跳到主要内容

pydantic_core.core_schema

WhenUsed

WhenUsed = Literal[
"always", "unless-none", "json", "json-unless-none"
]

SerializationInfo

  • context: Any | None

ValidationInfo

  • context: Any | None
  • config: CoreConfig | None
  • mode: Literal['python', 'json']
  • data: Dict[str, Any]
  • field_name: str | None

datetime_schema

datetime_schema(
*,
strict: bool | None = None,
le: datetime | None = None,
ge: datetime | None = None,
lt: datetime | None = None,
gt: datetime | None = None,
now_op: Literal["past", "future"] | None = None,
tz_constraint: (
Literal["aware", "naive"] | int | None
) = None,
now_utc_offset: int | None = None,
microseconds_precision: Literal[
"truncate", "error"
] = "truncate",
ref: str | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> DatetimeSchema

list_schema

list_schema(
items_schema: CoreSchema | None = None,
*,
min_length: int | None = None,
max_length: int | None = None,
fail_fast: bool | None = None,
strict: bool | None = None,
ref: str | None = None,
metadata: Dict[str, Any] | None = None,
serialization: IncExSeqOrElseSerSchema | None = None
) -> ListSchema
from pydantic_core import SchemaValidator, core_schema

schema = core_schema.list_schema(core_schema.int_schema(), min_length=0, max_length=10)
v = SchemaValidator(schema)
assert v.validate_python(['4']) == [4]

no_info_before_validator_function

no_info_before_validator_function(
function: NoInfoValidatorFunction,
schema: CoreSchema,
*,
ref: str | None = None,
json_schema_input_schema: CoreSchema | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> BeforeValidatorFunctionSchema

Returns a schema that calls a validator function before validating, no info argument is provided

from pydantic_core import SchemaValidator, core_schema

def fn(v: bytes) -> str:
return v.decode() + 'world'

func_schema = core_schema.no_info_before_validator_function(
function=fn, schema=core_schema.str_schema()
)
schema = core_schema.typed_dict_schema({'a': core_schema.typed_dict_field(func_schema)})

v = SchemaValidator(schema)
assert v.validate_python({'a': b'hello '}) == {'a': 'hello world'}

with_info_before_validator_function

with_info_before_validator_function(
function: WithInfoValidatorFunction,
schema: CoreSchema,
*,
field_name: str | None = None,
ref: str | None = None,
json_schema_input_schema: CoreSchema | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> BeforeValidatorFunctionSchema

no_info_after_validator_function

no_info_after_validator_function(
function: NoInfoValidatorFunction,
schema: CoreSchema,
*,
ref: str | None = None,
json_schema_input_schema: CoreSchema | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> AfterValidatorFunctionSchema

Returns a schema that calls a validator function after validating, no info argument is provided

from pydantic_core import SchemaValidator, core_schema

def fn(v: str) -> str:
return v + 'world'

func_schema = core_schema.no_info_after_validator_function(fn, core_schema.str_schema())
schema = core_schema.typed_dict_schema({'a': core_schema.typed_dict_field(func_schema)})

v = SchemaValidator(schema)
assert v.validate_python({'a': b'hello '}) == {'a': 'hello world'}

no_info_wrap_validator_function

no_info_wrap_validator_function(
function: NoInfoWrapValidatorFunction,
schema: CoreSchema,
*,
ref: str | None = None,
json_schema_input_schema: CoreSchema | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> WrapValidatorFunctionSchema

Returns a schema which calls a function with a validator callable argument which can optionally be used to call inner validation with the function logic, this is much like the "onion" implementation of middleware in many popular web frameworks, no info argument is passed

from pydantic_core import SchemaValidator, core_schema

def fn(
v: str,
validator: core_schema.ValidatorFunctionWrapHandler,
) -> str:
return validator(input_value=v) + 'world'

schema = core_schema.no_info_wrap_validator_function(
function=fn, schema=core_schema.str_schema()
)
v = SchemaValidator(schema)
assert v.validate_python('hello ') == 'hello world'

no_info_plain_validator_function

no_info_plain_validator_function(
function: NoInfoValidatorFunction,
*,
ref: str | None = None,
json_schema_input_schema: CoreSchema | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> PlainValidatorFunctionSchema

Returns a schema that uses the provided function for validation, no info argument is passed

union_schema

union_schema(
choices: list[CoreSchema | tuple[CoreSchema, str]],
*,
auto_collapse: bool | None = None,
custom_error_type: str | None = None,
custom_error_message: str | None = None,
custom_error_context: (
dict[str, str | int] | None
) = None,
mode: Literal["smart", "left_to_right"] | None = None,
strict: bool | None = None,
ref: str | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> UnionSchema

chain_schema

chain_schema(
steps: list[CoreSchema],
*,
ref: str | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> ChainSchema

json_or_python_schema

json_or_python_schema(
json_schema: CoreSchema,
python_schema: CoreSchema,
*,
ref: str | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> JsonOrPythonSchema

model_field

model_field(
schema: CoreSchema,
*,
validation_alias: (
str | list[str | int] | list[list[str | int]] | None
) = None,
serialization_alias: str | None = None,
serialization_exclude: bool | None = None,
frozen: bool | None = None,
metadata: Dict[str, Any] | None = None
) -> ModelField

model_fields_schema

model_fields_schema(
fields: Dict[str, ModelField],
*,
model_name: str | None = None,
computed_fields: list[ComputedField] | None = None,
strict: bool | None = None,
extras_schema: CoreSchema | None = None,
extra_behavior: ExtraBehavior | None = None,
populate_by_name: bool | None = None,
from_attributes: bool | None = None,
ref: str | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> ModelFieldsSchema

model_schema

model_schema(
cls: Type[Any],
schema: CoreSchema,
*,
generic_origin: Type[Any] | None = None,
custom_init: bool | None = None,
root_model: bool | None = None,
post_init: str | None = None,
revalidate_instances: (
Literal["always", "never", "subclass-instances"]
| None
) = None,
strict: bool | None = None,
frozen: bool | None = None,
extra_behavior: ExtraBehavior | None = None,
config: CoreConfig | None = None,
ref: str | None = None,
metadata: Dict[str, Any] | None = None,
serialization: SerSchema | None = None
) -> ModelSchema
from pydantic_core import CoreConfig, SchemaValidator, core_schema

class MyModel:
__slots__ = (
'__dict__',
'__pydantic_fields_set__',
'__pydantic_extra__',
'__pydantic_private__',
)

schema = core_schema.model_schema(
cls=MyModel,
config=CoreConfig(str_max_length=5),
schema=core_schema.model_fields_schema(
fields={'a': core_schema.model_field(core_schema.str_schema())},
),
)
v = SchemaValidator(schema)
assert v.isinstance_python({'a': 'hello'}) is True
assert v.isinstance_python({'a': 'too long'}) is False