Skip to content

Dataclasses and schema attribute #408

@blfpd

Description

@blfpd

When creating a model with the dataclasses backport, the model doesn’t have the schema() method, but it’s still forbidden to create a model with this attribute name. Is this a desired behaviour?

>>> from pydantic.dataclasses import dataclass
>>> 
>>> @dataclass
... class Card:
...     number: str
... 
>>> card = Card(number="1234")
>>> card.schema()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    card.schema()
AttributeError: 'Card' object has no attribute 'schema'
>>> card.__pydantic_model__.schema()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    card.__pydantic_model__.schema()
  File "~/env/lib/python3.6/site-packages/pydantic/main.py", line 402, in schema
    s = model_schema(cls, by_alias=by_alias)
  File "~/env/lib/python3.6/site-packages/pydantic/schema.py", line 204, in model_schema
    model, by_alias=by_alias, model_name_map=model_name_map, ref_prefix=ref_prefix
  File "~/env/lib/python3.6/site-packages/pydantic/schema.py", line 488, in model_process_schema
    model, by_alias=by_alias, model_name_map=model_name_map, ref_prefix=ref_prefix
  File "~/env/lib/python3.6/site-packages/pydantic/schema.py", line 514, in model_type_schema
    f, by_alias=by_alias, model_name_map=model_name_map, ref_prefix=ref_prefix
  File "~/env/lib/python3.6/site-packages/pydantic/schema.py", line 243, in field_schema
    s['default'] = encode_default(field.default)
  File "~/env/lib/python3.6/site-packages/pydantic/schema.py", line 693, in encode_default
    return pydantic_encoder(dft)
  File "~/env/lib/python3.6/site-packages/pydantic/json.py", line 40, in pydantic_encoder
    raise TypeError(f"Object of type '{obj.__class__.__name__}' is not JSON serializable")
TypeError: Object of type '_MISSING_TYPE' is not JSON serializable
>>> 
>>> @dataclass
... class Card:
...     schema: str
... 
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    @dataclass
  File "~/env/lib/python3.6/site-packages/pydantic/dataclasses.py", line 118, in dataclass
    return wrap(_cls)
  File "~/env/lib/python3.6/site-packages/pydantic/dataclasses.py", line 113, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, config)
  File "~/env/lib/python3.6/site-packages/pydantic/dataclasses.py", line 77, in _process_class
    cls.__pydantic_model__ = create_model(cls.__name__, __config__=config, __module__=_cls.__module__, **fields)
  File "~/env/lib/python3.6/site-packages/pydantic/main.py", line 562, in create_model
    return type(model_name, (__base__,), namespace)  # type: ignore
  File "~/env/lib/python3.6/site-packages/pydantic/main.py", line 184, in __new__
    validate_field_name(bases, var_name)
  File "~/env/lib/python3.6/site-packages/pydantic/utils.py", line 194, in validate_field_name
    f'Field name "{field_name}" shadows a BaseModel attribute; '
NameError: Field name "schema" shadows a BaseModel attribute; use a different field name with "alias='schema'".
>>> 

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