Skip to content
You're viewing docs for v2.2. See the latest version →

RootModel

RootModel class and type definitions.

PydanticUserError

Bases: PydanticErrorMixin, TypeError

An error raised due to incorrect use of Pydantic.


BaseModel

Usage docs: https://docs.pydantic.dev/2.2/usage/models/

A base class for creating Pydantic models.

Attributes

model_config

Configuration for the model, should be a dictionary conforming to ConfigDict.

Type: ConfigDict Default: ConfigDict()

model_fields

Metadata about the fields defined on the model, mapping of field names to FieldInfo.

This replaces Model.__fields__ from Pydantic V1.

Type: dict[str, FieldInfo]

model_computed_fields

Get the computed fields of this model instance.

Type: dict[str, ComputedFieldInfo]

model_extra

Get extra fields set during validation.

Type: dict[str, Any] | None

model_fields_set

Returns the set of fields that have been set on this model instance.

Type: set[str]

Methods

init

def __init__(__pydantic_self__, data: Any = {}) -> None

Create a new model by parsing and validating input data from keyword arguments.

Raises ValidationError if the input data cannot be validated to form a valid model.

__init__ uses __pydantic_self__ instead of the more common self for the first arg to allow self as a field name.

Returns

None

model_construct

@classmethod

def model_construct(
    cls: type[Model],
    _fields_set: set[str] | None = None,
    values: Any = {},
) -> Model

Creates a new instance of the Model class with validated data.

Creates a new model setting __dict__ and __pydantic_fields_set__ from trusted or pre-validated data. Default values are respected, but no other validation is performed. Behaves as if Config.extra = 'allow' was set since it adds all passed values

Returns

Model — A new instance of the Model class with validated data.

Parameters

_fields_set : set[str] | None Default: None

The set of field names accepted for the Model instance.

values : Any Default: \{\}

Trusted or pre-validated data dictionary.

model_copy

def model_copy(update: dict[str, Any] | None = None, deep: bool = False) -> Model

Usage docs: https://docs.pydantic.dev/2.2/usage/serialization/#model_copy

Returns a copy of the model.

Returns

Model — New model instance.

Parameters

update : dict[str, Any] | None Default: None

Values to change/add in the new model. Note: the data is not validated before creating the new model. You should trust this data.

deep : bool Default: False

Set to True to make a deep copy of the model.

model_dump

def model_dump(
    mode: Literal['json', 'python'] | str = 'python',
    include: IncEx = None,
    exclude: IncEx = None,
    by_alias: bool = False,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
    round_trip: bool = False,
    warnings: bool = True,
) -> dict[str, Any]

Usage docs: https://docs.pydantic.dev/2.2/usage/serialization/#modelmodel_dump

Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

Returns

dict[str, Any] — A dictionary representation of the model.

Parameters

mode : Literal['json', 'python'] | str Default: 'python'

The mode in which to_python should run. If mode is ‘json’, the dictionary will only contain JSON serializable types. If mode is ‘python’, the dictionary may contain any Python objects.

include : IncEx Default: None

A list of fields to include in the output.

exclude : IncEx Default: None

A list of fields to exclude from the output.

by_alias : bool Default: False

Whether to use the field’s alias in the dictionary key if defined.

exclude_unset : bool Default: False

Whether to exclude fields that are unset or None from the output.

exclude_defaults : bool Default: False

Whether to exclude fields that are set to their default value from the output.

exclude_none : bool Default: False

Whether to exclude fields that have a value of None from the output.

round_trip : bool Default: False

Whether to enable serialization and deserialization round-trip support.

warnings : bool Default: True

Whether to log warnings when invalid fields are encountered.

model_dump_json

def model_dump_json(
    indent: int | None = None,
    include: IncEx = None,
    exclude: IncEx = None,
    by_alias: bool = False,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
    round_trip: bool = False,
    warnings: bool = True,
) -> str

Usage docs: https://docs.pydantic.dev/2.2/usage/serialization/#modelmodel_dump_json

Generates a JSON representation of the model using Pydantic’s to_json method.

Returns

str — A JSON string representation of the model.

Parameters

indent : int | None Default: None

Indentation to use in the JSON output. If None is passed, the output will be compact.

include : IncEx Default: None

Field(s) to include in the JSON output. Can take either a string or set of strings.

exclude : IncEx Default: None

Field(s) to exclude from the JSON output. Can take either a string or set of strings.

by_alias : bool Default: False

Whether to serialize using field aliases.

exclude_unset : bool Default: False

Whether to exclude fields that have not been explicitly set.

exclude_defaults : bool Default: False

Whether to exclude fields that have the default value.

exclude_none : bool Default: False

Whether to exclude fields that have a value of None.

round_trip : bool Default: False

Whether to use serialization/deserialization between JSON and class instance.

warnings : bool Default: True

Whether to show any warnings that occurred during serialization.

model_json_schema

@classmethod

def model_json_schema(
    cls,
    by_alias: bool = True,
    ref_template: str = DEFAULT_REF_TEMPLATE,
    schema_generator: type[GenerateJsonSchema] = GenerateJsonSchema,
    mode: JsonSchemaMode = 'validation',
) -> dict[str, Any]

Generates a JSON schema for a model class.

Returns

dict[str, Any] — The JSON schema for the given model class.

Parameters

by_alias : bool Default: True

Whether to use attribute aliases or not.

ref_template : str Default: DEFAULT_REF_TEMPLATE

The reference template.

schema_generator : type[GenerateJsonSchema] Default: GenerateJsonSchema

To override the logic used to generate the JSON schema, as a subclass of GenerateJsonSchema with your desired modifications

mode : JsonSchemaMode Default: 'validation'

The mode in which to generate the schema.

model_parametrized_name

@classmethod

def model_parametrized_name(cls, params: tuple[type[Any], ...]) -> str

Compute the class name for parametrizations of generic classes.

This method can be overridden to achieve a custom naming scheme for generic BaseModels.

Returns

str — String representing the new class where params are passed to cls as type variables.

Parameters

params : tuple[type[Any], ...]

Tuple of types of the class. Given a generic class Model with 2 type variables and a concrete model Model[str, int], the value (str, int) would be passed to params.

Raises
  • TypeError — Raised when trying to generate concrete names for non-generic models.

model_post_init

def model_post_init(__context: Any) -> None

Override this method to perform additional initialization after __init__ and model_construct. This is useful if you want to do some validation that requires the entire model to be initialized.

Returns

None

model_rebuild

@classmethod

def model_rebuild(
    cls,
    force: bool = False,
    raise_errors: bool = True,
    _parent_namespace_depth: int = 2,
    _types_namespace: dict[str, Any] | None = None,
) -> bool | None

Try to rebuild the pydantic-core schema for the model.

This may be necessary when one of the annotations is a ForwardRef which could not be resolved during the initial attempt to build the schema, and automatic rebuilding fails.

Returns

bool | None — Returns None if the schema is already “complete” and rebuilding was not required. bool | None — If rebuilding was required, returns True if rebuilding was successful, otherwise False.

Parameters

force : bool Default: False

Whether to force the rebuilding of the model schema, defaults to False.

raise_errors : bool Default: True

Whether to raise errors, defaults to True.

_parent_namespace_depth : int Default: 2

The depth level of the parent namespace, defaults to 2.

_types_namespace : dict[str, Any] | None Default: None

The types namespace, defaults to None.

model_validate

@classmethod

def model_validate(
    cls: type[Model],
    obj: Any,
    strict: bool | None = None,
    from_attributes: bool | None = None,
    context: dict[str, Any] | None = None,
) -> Model

Validate a pydantic model instance.

Returns

Model — The validated model instance.

Parameters

obj : Any

The object to validate.

strict : bool | None Default: None

Whether to raise an exception on invalid fields.

from_attributes : bool | None Default: None

Whether to extract data from object attributes.

context : dict[str, Any] | None Default: None

Additional context to pass to the validator.

Raises
  • ValidationError — If the object could not be validated.

model_validate_json

@classmethod

def model_validate_json(
    cls: type[Model],
    json_data: str | bytes | bytearray,
    strict: bool | None = None,
    context: dict[str, Any] | None = None,
) -> Model

Validate the given JSON data against the Pydantic model.

Returns

Model — The validated Pydantic model.

Parameters

json_data : str | bytes | bytearray

The JSON data to validate.

strict : bool | None Default: None

Whether to enforce types strictly.

context : dict[str, Any] | None Default: None

Extra variables to pass to the validator.

Raises
  • ValueError — If json_data is not a JSON string.

get_pydantic_core_schema

@classmethod

def __get_pydantic_core_schema__(
    cls,
    __source: type[BaseModel],
    __handler: _annotated_handlers.GetCoreSchemaHandler,
) -> CoreSchema

Hook into generating the model’s CoreSchema.

Returns

CoreSchema — A pydantic-core CoreSchema.

Parameters

__source : type[BaseModel]

The class we are generating a schema for. This will generally be the same as the cls argument if this is a classmethod.

__handler : _annotated_handlers.GetCoreSchemaHandler

Call into Pydantic’s internal JSON schema generation. A callable that calls into Pydantic’s internal CoreSchema generation logic.

get_pydantic_json_schema

@classmethod

def __get_pydantic_json_schema__(
    cls,
    __core_schema: CoreSchema,
    __handler: _annotated_handlers.GetJsonSchemaHandler,
) -> JsonSchemaValue

Hook into generating the model’s JSON schema.

Returns

JsonSchemaValue — A JSON schema, as a Python object.

Parameters

__core_schema : CoreSchema

A pydantic-core CoreSchema. You can ignore this argument and call the handler with a new CoreSchema, wrap this CoreSchema (\{'type': 'nullable', 'schema': current_schema\}), or just call the handler with the original schema.

__handler : _annotated_handlers.GetJsonSchemaHandler

Call into Pydantic’s internal JSON schema generation. This will raise a pydantic.errors.PydanticInvalidForJsonSchema if JSON schema generation fails. Since this gets called by BaseModel.model_json_schema you can override the schema_generator argument to that function to change JSON schema generation globally for a type.

pydantic_init_subclass

@classmethod

def __pydantic_init_subclass__(cls, kwargs: Any = {}) -> None

This is intended to behave just like __init_subclass__, but is called by ModelMetaclass only after the class is actually fully initialized. In particular, attributes like model_fields will be present when this is called.

This is necessary because __init_subclass__ will always be called by type.__new__, and it would require a prohibitively large refactor to the ModelMetaclass to ensure that type.__new__ was called in such a manner that the class would already be sufficiently initialized.

This will receive the same kwargs that would be passed to the standard __init_subclass__, namely, any kwargs passed to the class definition that aren’t used internally by pydantic.

Returns

None

Parameters

**kwargs : Any Default: \{\}

Any keyword arguments passed to the class definition that aren’t used internally by pydantic.

copy

def __copy__() -> Model

Returns a shallow copy of the model.

Returns

Model

deepcopy

def __deepcopy__(memo: dict[int, Any] | None = None) -> Model

Returns a deep copy of the model.

Returns

Model

init_subclass

def __init_subclass__(cls, kwargs: Unpack[ConfigDict] = {})

This signature is included purely to help type-checkers check arguments to class declaration, which provides a way to conveniently set model_config key/value pairs.

from pydantic import BaseModel

class MyModel(BaseModel, extra='allow'):
    ...

However, this may be deceiving, since the actual calls to __init_subclass__ will not receive any of the config arguments, and will only receive any keyword arguments passed during class initialization that are not expected keys in ConfigDict. (This is due to the way ModelMetaclass.__new__ works.)

Parameters

**kwargs : Unpack[ConfigDict] Default: \{\}

Keyword arguments passed to the class definition, which set model_config

iter

def __iter__() -> TupleGenerator

So dict(model) works.

Returns

TupleGenerator

dict

def dict(
    include: IncEx = None,
    exclude: IncEx = None,
    by_alias: bool = False,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
) -> typing.Dict[str, Any]
Returns

typing.Dict[str, Any]

json

def json(
    include: IncEx = None,
    exclude: IncEx = None,
    by_alias: bool = False,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
    encoder: typing.Callable[[Any], Any] | None = PydanticUndefined,
    models_as_dict: bool = PydanticUndefined,
    dumps_kwargs: Any = {},
) -> str
Returns

str

parse_obj

@classmethod

def parse_obj(cls: type[Model], obj: Any) -> Model
Returns

Model

parse_raw

@classmethod

def parse_raw(
    cls: type[Model],
    b: str | bytes,
    content_type: str | None = None,
    encoding: str = 'utf8',
    proto: _deprecated_parse.Protocol | None = None,
    allow_pickle: bool = False,
) -> Model
Returns

Model

parse_file

@classmethod

def parse_file(
    cls: type[Model],
    path: str | Path,
    content_type: str | None = None,
    encoding: str = 'utf8',
    proto: _deprecated_parse.Protocol | None = None,
    allow_pickle: bool = False,
) -> Model
Returns

Model

from_orm

@classmethod

def from_orm(cls: type[Model], obj: Any) -> Model
Returns

Model

construct

@classmethod

def construct(
    cls: type[Model],
    _fields_set: set[str] | None = None,
    values: Any = {},
) -> Model
Returns

Model

copy

def copy(
    include: AbstractSetIntStr | MappingIntStrAny | None = None,
    exclude: AbstractSetIntStr | MappingIntStrAny | None = None,
    update: typing.Dict[str, Any] | None = None,
    deep: bool = False,
) -> Model

Returns a copy of the model.

If you need include or exclude, use:

data = self.model_dump(include=include, exclude=exclude, round_trip=True)
data = {**data, **(update or {})}
copied = self.model_validate(data)
Returns

Model — A copy of the model with included, excluded and updated fields as specified.

Parameters

include : AbstractSetIntStr | MappingIntStrAny | None Default: None

Optional set or mapping specifying which fields to include in the copied model.

exclude : AbstractSetIntStr | MappingIntStrAny | None Default: None

Optional set or mapping specifying which fields to exclude in the copied model.

update : typing.Dict[str, Any] | None Default: None

Optional dictionary of field-value pairs to override field values in the copied model.

deep : bool Default: False

If True, the values of fields that are Pydantic models will be deep copied.

schema

@classmethod

def schema(
    cls,
    by_alias: bool = True,
    ref_template: str = DEFAULT_REF_TEMPLATE,
) -> typing.Dict[str, Any]
Returns

typing.Dict[str, Any]

schema_json

@classmethod

def schema_json(
    cls,
    by_alias: bool = True,
    ref_template: str = DEFAULT_REF_TEMPLATE,
    dumps_kwargs: Any = {},
) -> str
Returns

str

validate

@classmethod

def validate(cls: type[Model], value: Any) -> Model
Returns

Model

update_forward_refs

@classmethod

def update_forward_refs(cls, localns: Any = {}) -> None
Returns

None


RootModel

Bases: BaseModel, Generic[RootModelRootType]

Usage docs: https://docs.pydantic.dev/2.2/usage/models/#rootmodel-and-custom-root-types

A Pydantic BaseModel for the root object of the model.

Attributes

root

Type: RootModelRootType

Methods

model_construct

@classmethod

def model_construct(
    cls: type[Model],
    root: RootModelRootType,
    _fields_set: set[str] | None = None,
) -> Model

Create a new model using the provided root object and update fields set.

Returns

Model — The new model.

Parameters

root : RootModelRootType

The root object of the model.

_fields_set : set[str] | None Default: None

The set of fields to be updated.

Raises
  • NotImplemented — If the model is not a subclass of RootModel.

copy

def __copy__() -> Model

Returns a shallow copy of the model.

Returns

Model

deepcopy

def __deepcopy__(memo: dict[int, Any] | None = None) -> Model

Returns a deep copy of the model.

Returns

Model

model_dump

def model_dump(
    mode: Literal['json', 'python'] | str = 'python',
    include: Any = None,
    exclude: Any = None,
    by_alias: bool = False,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
    round_trip: bool = False,
    warnings: bool = True,
) -> RootModelRootType

This method is included just to get a more accurate return type for type checkers. It is included in this if TYPE_CHECKING: block since no override is actually necessary.

See the documentation of BaseModel.model_dump for more details about the arguments.

Returns

RootModelRootType


Model

Default: typing.TypeVar('Model', bound='BaseModel')

RootModelRootType

Default: typing.TypeVar('RootModelRootType')