Skip to content

Model signature generation makes incorrect signature for models with extras allowed and data attribute in spec  #1418

@JrooTJunior

Description

@JrooTJunior

Bug

Output of python -c "import pydantic.utils; print(pydantic.utils.version_info())":

             pydantic version: 1.5
            pydantic compiled: False
                 install path: /home/jrootjunior/.cache/pypoetry/virtualenvs/aiogram-BAWpo_Vh-py3.8/lib/python3.8/site-packages/pydantic
               python version: 3.8.2 (default, Apr  8 2020, 14:31:25)  [GCC 9.3.0]
                     platform: Linux-5.6.3-arch1-1-x86_64-with-glibc2.2.5
     optional deps. installed: ['typing-extensions']

Explanation

Feature from #1034 breaks things when model has data attribute and extra arguments is allowed and this attribute is not the last one in class.

Code snippet

import inspect
from typing import Optional

from pydantic import BaseModel, Extra


class MyObject(BaseModel):
    foo: Optional[str] = None
    data: Optional[str] = None
    bar: Optional[str] = None

    class Config:
        extra = Extra.allow

Caused an exception

Traceback (most recent call last):
  File "/home/jrootjunior/work/aiogram3/expetiment.py", line 7, in <module>
    class MyObject(BaseModel):
  File "/home/jrootjunior/.cache/pypoetry/virtualenvs/aiogram-BAWpo_Vh-py3.8/lib/python3.8/site-packages/pydantic/main.py", line 303, in __new__
    cls.__signature__ = generate_model_signature(cls.__init__, fields, config)
  File "/home/jrootjunior/.cache/pypoetry/virtualenvs/aiogram-BAWpo_Vh-py3.8/lib/python3.8/site-packages/pydantic/utils.py", line 185, in generate_model_signature
    return Signature(parameters=list(merged_params.values()), return_annotation=None)
  File "/usr/lib/python3.8/inspect.py", line 2785, in __init__
    raise ValueError(msg)
ValueError: wrong parameter order: variadic keyword parameter before keyword-only parameter

Information from debugger

As i see the data argument has incorrect signature:
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug V1Bug related to Pydantic V1.X

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions