pydantic 2.6.4

pip install pydantic Copy PIP instructions

Released: Mar 12, 2024

Data validation using Python type hints

Project links

  • Documentation
  • Open issues:

View statistics for this project via Libraries.io , or by using our public dataset on Google BigQuery

License: MIT License

Author: Samuel Colvin

Requires: Python >=3.8

Maintainers

Avatar for samuelcolvin from gravatar.com

Classifiers

  • 5 - Production/Stable
  • Information Technology
  • System Administrators
  • OSI Approved :: MIT License
  • POSIX :: Linux
  • Python :: 3
  • Python :: 3 :: Only
  • Python :: 3.8
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: Implementation :: CPython
  • Python :: Implementation :: PyPy
  • Software Development :: Libraries :: Python Modules

Project description

python hypothesis pydantic

Data validation using Python type hints.

Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.8+; validate it with Pydantic.

Pydantic Company :rocket:

We've started a company based on the principles that I believe have led to Pydantic's success. Learning more from the Company Announcement .

Pydantic V1.10 vs. V2

Pydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.

If you're using Pydantic V1 you may want to look at the pydantic V1.10 Documentation or, 1.10.X-fixes git branch . Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: from pydantic import v1 as pydantic_v1 .

See documentation for more details.

Installation

Install using pip install -U pydantic or conda install pydantic -c conda-forge . For more installation options to make Pydantic even faster, see the Install section in the documentation.

A Simple Example

Contributing.

For guidance on setting up a development environment and how to make a contribution to Pydantic, see Contributing to Pydantic .

Reporting a Security Vulnerability

See our security policy .

v2.6.4 (2024-03-08)

GitHub release

What's Changed

  • Fix usage of AliasGenerator with computed_field decorator by @sydney-runkle in #8806
  • Fix nested discriminated union schema gen, pt 2 by @sydney-runkle in #8932
  • Fix bug with no_strict_optional=True caused by API deferral by @dmontagu in #8826

v2.6.3 (2024-02-27)

  • Update pydantic-settings version in the docs by @hramezani in #8906
  • Fix discriminated union schema gen bug by @sydney-runkle in #8904

v2.6.2 (2024-02-23)

  • Upgrade to pydantic-core 2.16.3 by @sydney-runkle in #8879
  • 'YYYY-MM-DD' date string coerced to datetime shouldn't infer timezone by @sydney-runkle in pydantic/pydantic-core#1193

v2.6.1 (2024-02-05)

  • Upgrade to pydantic-core 2.16.2 by @sydney-runkle in #8717
  • Fix bug with mypy plugin and no_strict_optional = True by @dmontagu in #8666
  • Fix ByteSize error type change by @sydney-runkle in #8681
  • Fix inheriting Field annotations in dataclasses by @sydney-runkle in #8679
  • Fix regression in core schema generation for indirect definition references by @dmontagu in #8702
  • Fix unsupported types bug with PlainValidator by @sydney-runkle in #8710
  • Reverting problematic fix from 2.6 release, fixing schema building bug by @sydney-runkle in #8718
  • Fix warning for tuple of wrong size in Union by @davidhewitt in pydantic/pydantic-core#1174
  • Fix computed_field JSON serializer exclude_none behavior by @sydney-runkle in pydantic/pydantic-core#1187

v2.6.0 (2024-01-29)

The code released in v2.6.0 is practically identical to that of v2.6.0b1.

  • Check for email-validator version >= 2.0 by @commonism in #6033
  • Upgrade `ruff`` target version to Python 3.8 by @Elkiwa in #8341
  • Update to pydantic-extra-types==2.4.1 by @yezz123 in #8478
  • Update to pyright==1.1.345 by @Viicos in #8453
  • Update pydantic-core from 2.14.6 to 2.16.1, significant changes from these updates are described below, full changelog here

New Features

  • Add NatsDsn by @ekeew in #6874
  • Add ConfigDict.ser_json_inf_nan by @davidhewitt in #8159
  • Add types.OnErrorOmit by @adriangb in #8222
  • Support AliasGenerator usage by @sydney-runkle in #8282
  • Add Pydantic People Page to docs by @sydney-runkle in #8345
  • Support yyyy-MM-DD datetime parsing by @sydney-runkle in #8404
  • Added bits conversions to the ByteSize class #8415 by @luca-matei in #8507
  • Enable json schema creation with type ByteSize by @geospackle in #8537
  • Add eval_type_backport to handle union operator and builtin generic subscripting in older Pythons by @alexmojaki in #8209
  • Add support for dataclass fields init by @dmontagu in #8552
  • Implement pickling for ValidationError by @davidhewitt in pydantic/pydantic-core#1119
  • Add unified tuple validator that can handle "variadic" tuples via PEP-646 by @dmontagu in pydantic/pydantic-core#865
  • Drop Python3.7 support by @hramezani in #7188
  • Drop Python 3.7, and PyPy 3.7 and 3.8 by @davidhewitt in pydantic/pydantic-core#1129
  • Use positional-only self in BaseModel constructor, so no field name can ever conflict with it by @ariebovenberg in #8072
  • Make @validate_call return a function instead of a custom descriptor - fixes binding issue with inheritance and adds self/cls argument to validation errors by @alexmojaki in #8268
  • Exclude BaseModel docstring from JSON schema description by @sydney-runkle in #8352
  • Introducing classproperty decorator for model_computed_fields by @Jocelyn-Gas in #8437
  • Explicitly raise an error if field names clashes with types by @Viicos in #8243
  • Use stricter serializer for unions of simple types by @alexdrydew pydantic/pydantic-core#1132

Performance

  • Add Codspeed profiling Actions workflow by @lambertsbennett in #8054
  • Improve int extraction by @samuelcolvin in pydantic/pydantic-core#1155
  • Improve performance of recursion guard by @samuelcolvin in pydantic/pydantic-core#1156
  • dataclass serialization speedups by @samuelcolvin in pydantic/pydantic-core#1162
  • Avoid HashMap creation when looking up small JSON objects in LazyIndexMaps by @samuelcolvin in pydantic/jiter#55
  • use hashbrown to speedup python string caching by @davidhewitt in pydantic/jiter#51
  • Replace Peak with more efficient Peek by @davidhewitt in pydantic/jiter#48
  • Move getattr warning in deprecated BaseConfig by @tlambert03 in #7183
  • Only hash model_fields , not whole __dict__ by @alexmojaki in #7786
  • Fix mishandling of unions while freezing types in the mypy plugin by @dmontagu in #7411
  • Fix mypy error on untyped ClassVar by @vincent-hachin-wmx in #8138
  • Only compare pydantic fields in BaseModel.__eq__ instead of whole __dict__ by @QuentinSoubeyranAqemia in #7825
  • Update strict docstring in model_validate method. by @LukeTonin in #8223
  • Fix overload position of computed_field by @Viicos in #8227
  • Fix custom type type casting used in multiple attributes by @ianhfc in #8066
  • Fix issue not allowing validate_call decorator to be dynamically assigned to a class method by @jusexton in #8249
  • Fix issue unittest.mock deprecation warnings by @ibleedicare in #8262
  • Added tests for the case JsonValue contains subclassed primitive values by @jusexton in #8286
  • Fix mypy error on free before validator (classmethod) by @sydney-runkle in #8285
  • Fix to_snake conversion by @jevins09 in #8316
  • Fix type annotation of ModelMetaclass.__prepare__ by @slanzmich in #8305
  • Disallow config specification when initializing a TypeAdapter when the annotated type has config already by @sydney-runkle in #8365
  • Fix a naming issue with JSON schema for generics parametrized by recursive type aliases by @dmontagu in #8389
  • Fix type annotation in pydantic people script by @shenxiangzhuang in #8402
  • Add support for field alias in dataclass signature by @NeevCohen in #8387
  • Fix bug with schema generation with Field(...) in a forward ref by @dmontagu in #8494
  • Fix ordering of keys in __dict__ with model_construct call by @sydney-runkle in #8500
  • Fix module path_type creation when globals does not contain __name__ by @hramezani in #8470
  • Fix for namespace issue with dataclasses with from __future__ import annotations by @sydney-runkle in #8513
  • Fix: make function validator types positional-only by @pmmmwh in #8479
  • Fix usage of @deprecated by @Viicos in #8294
  • Add more support for private attributes in model_construct call by @sydney-runkle in #8525
  • Use a stack for the types namespace by @dmontagu in #8378
  • Fix schema-building bug with TypeAliasType for types with refs by @dmontagu in #8526
  • Support pydantic.Field(repr=False) in dataclasses by @tigeryy2 in #8511
  • Override dataclass_transform behavior for RootModel by @Viicos in #8163
  • Refactor signature generation for simplicity by @sydney-runkle in #8572
  • Fix ordering bug of PlainValidator annotation by @Anvil in #8567
  • Fix exclude_none for json serialization of computed_field s by @sydney-runkle in pydantic/pydantic-core#1098
  • Support yyyy-MM-DD string for datetimes by @sydney-runkle in pydantic/pydantic-core#1124
  • Tweak ordering of definitions in generated schemas by @StrawHatDrag0n in #8583

New Contributors

  • @ekeew made their first contribution in #6874
  • @lambertsbennett made their first contribution in #8054
  • @vincent-hachin-wmx made their first contribution in #8138
  • @QuentinSoubeyranAqemia made their first contribution in #7825
  • @ariebovenberg made their first contribution in #8072
  • @LukeTonin made their first contribution in #8223
  • @denisart made their first contribution in #8231
  • @ianhfc made their first contribution in #8066
  • @eonu made their first contribution in #8255
  • @amandahla made their first contribution in #8263
  • @ibleedicare made their first contribution in #8262
  • @jevins09 made their first contribution in #8316
  • @cuu508 made their first contribution in #8322
  • @slanzmich made their first contribution in #8305
  • @jensenbox made their first contribution in #8331
  • @szepeviktor made their first contribution in #8356
  • @Elkiwa made their first contribution in #8341
  • @parhamfh made their first contribution in #8395
  • @shenxiangzhuang made their first contribution in #8402
  • @NeevCohen made their first contribution in #8387
  • @zby made their first contribution in #8497
  • @patelnets made their first contribution in #8491
  • @edwardwli made their first contribution in #8503
  • @luca-matei made their first contribution in #8507
  • @Jocelyn-Gas made their first contribution in #8437
  • @bL34cHig0 made their first contribution in #8501
  • @tigeryy2 made their first contribution in #8511
  • @geospackle made their first contribution in #8537
  • @Anvil made their first contribution in #8567
  • @hungtsetse made their first contribution in #8546
  • @StrawHatDrag0n made their first contribution in #8583

pydantic-core

  • @mariuswinger made their first contribution in pydantic/pydantic-core#1087
  • @adamchainz made their first contribution in pydantic/pydantic-core#1090
  • @akx made their first contribution in pydantic/pydantic-core#1123

v2.6.0b1 (2024-01-19)

Pre-release, see the GitHub release for details.

v2.5.3 (2023-12-22)

  • uprev pydantic-core to 2.14.6
  • Fix memory leak with recursive definitions creating reference cycles by @davidhewitt in pydantic/pydantic-core#1125

v2.5.2 (2023-11-22)

  • uprev pydantic-core to 2.14.5
  • Fix validation of Literal from JSON keys when used as dict key by @sydney-runkle in pydantic/pydantic-core#1075
  • Fix bug re custom_init on members of Union by @sydney-runkle in pydantic/pydantic-core#1076
  • Fix JsonValue bool serialization by @sydney-runkle in #8190
  • Fix handling of unhashable inputs with Literal in Union s by @sydney-runkle in pydantic/pydantic-core#1089

v2.5.1 (2023-11-15)

  • uprev pydantic-core to 2.14.3 by @samuelcolvin in #8120
  • Fix package description limit by @dmontagu in #8097
  • Fix ValidateCallWrapper error when creating a model which has a @validate_call wrapped field annotation by @sydney-runkle in #8110

v2.5.0 (2023-11-13)

The code released in v2.5.0 is functionally identical to that of v2.5.0b1.

  • Update pydantic-core from 2.10.1 to 2.14.1, significant changes from these updates are described below, full changelog here
  • Update to pyright==1.1.335 by @Viicos in #8075
  • Allow plugins to catch non ValidationError errors by @adriangb in #7806
  • Support __doc__ argument in create_model() by @chris-spann in #7863
  • Expose regex_engine flag - meaning you can use with the Rust or Python regex libraries in constraints by @utkini in #7768
  • Save return type generated from type annotation in ComputedFieldInfo by @alexmojaki in #7889
  • Adopting ruff formatter by @Luca-Blight in #7930
  • Added validation_error_cause to config by @zakstucke in #7626
  • Make path of the item to validate available in plugin by @hramezani in #7861
  • CallableDiscriminator renamed to Discriminator by @dmontagu in #8047
  • Make union case tags affect union error messages by @dmontagu in #8001
  • Add examples and json_schema_extra to @computed_field by @alexmojaki in #8013
  • Add JsonValue type by @dmontagu in #7998
  • Allow str as argument to Discriminator by @dmontagu in #8047
  • Add SchemaSerializer.__reduce__ method to enable pickle serialization by @edoakes in pydantic/pydantic-core#1006
  • Significant Change: replace ultra_strict with new smart union implementation, the way unions are validated has changed significantly to improve performance and correctness, we have worked hard to absolutely minimise the number of cases where behaviour has changed, see the PR for details - by @davidhewitt in pydantic/pydantic-core#867
  • Add support for instance method reassignment when extra='allow' by @sydney-runkle in #7683
  • Support JSON schema generation for Enum types with no cases by @sydney-runkle in #7927
  • Warn if a class inherits from Generic before BaseModel by @alexmojaki in #7891
  • New custom JSON parser, jiter by @samuelcolvin in pydantic/pydantic-core#974
  • PGO build for MacOS M1 by @samuelcolvin in pydantic/pydantic-core#1063
  • Use __getattr__ for all package imports, improve import time by @samuelcolvin in #7947
  • Fix mypy issue with subclasses of RootModel by @sydney-runkle in #7677
  • Properly rebuild the FieldInfo when a forward ref gets evaluated by @dmontagu in #7698
  • Fix failure to load SecretStr from JSON (regression in v2.4) by @sydney-runkle in #7729
  • Fix defer_build behavior with TypeAdapter by @sydney-runkle in #7736
  • Improve compatibility with legacy mypy versions by @dmontagu in #7742
  • Fix: update TypeVar handling when default is not set by @pmmmwh in #7719
  • Support specification of strict on Enum type fields by @sydney-runkle in #7761
  • Wrap weakref.ref instead of subclassing to fix cloudpickle serialization by @edoakes in #7780
  • Keep values of private attributes set within model_post_init in subclasses by @alexmojaki in #7775
  • Add more specific type for non-callable json_schema_extra by @alexmojaki in #7803
  • Raise an error when deleting frozen (model) fields by @alexmojaki in #7800
  • Fix schema sorting bug with default values by @sydney-runkle in #7817
  • Use generated alias for aliases that are not specified otherwise by @alexmojaki in #7802
  • Support strict specification for UUID types by @sydney-runkle in #7865
  • JSON schema: fix extra parameter handling by @me-and in #7810
  • Fix: support pydantic.Field(kw_only=True) with inherited dataclasses by @PrettyWood in #7827
  • Support validate_call decorator for methods in classes with __slots__ by @sydney-runkle in #7883
  • Fix pydantic dataclass problem with dataclasses.field default by @hramezani in #7898
  • Fix schema generation for generics with union type bounds by @sydney-runkle in #7899
  • Fix version for importlib_metadata on python 3.7 by @sydney-runkle in #7904
  • Support | operator (Union) in PydanticRecursiveRef by @alexmojaki in #7892
  • Fix display_as_type for TypeAliasType in python 3.12 by @dmontagu in #7929
  • Add support for NotRequired generics in TypedDict by @sydney-runkle in #7932
  • Make generic TypeAliasType specifications produce different schema definitions by @alexdrydew in #7893
  • Added fix for signature of inherited dataclass by @howsunjow in #7925
  • Make the model name generation more robust in JSON schema by @joakimnordling in #7881
  • Fix plurals in validation error messages (in tests) by @Iipin in #7972
  • PrivateAttr is passed from Annotated default position by @tabassco in #8004
  • Don't decode bytes (which may not be UTF8) when displaying SecretBytes by @alexmojaki in #8012
  • Use classmethod instead of classmethod[Any, Any, Any] by @Mr-Pepe in #7979
  • Clearer error on invalid Plugin by @samuelcolvin in #8023
  • Correct pydantic dataclasses import by @samuelcolvin in #8027
  • Fix misbehavior for models referencing redefined type aliases by @dmontagu in #8050
  • Fix Optional field with validate_default only performing one field validation by @sydney-runkle in pydantic/pydantic-core#1002
  • Fix definition-ref bug with Dict keys by @sydney-runkle in pydantic/pydantic-core#1014
  • Fix bug allowing validation of bool types with coerce_numbers_to_str=True by @sydney-runkle in pydantic/pydantic-core#1017
  • Don't accept NaN in float and decimal constraints by @davidhewitt in pydantic/pydantic-core#1037
  • Add lax_str and lax_int support for enum values not inherited from str/int by @michaelhly in pydantic/pydantic-core#1015
  • Support subclasses in lists in Union of List types by @sydney-runkle in pydantic/pydantic-core#1039
  • Allow validation against max_digits and decimals to pass if normalized or non-normalized input is valid by @sydney-runkle in pydantic/pydantic-core#1049
  • Fix: proper pluralization in ValidationError messages by @Iipin in pydantic/pydantic-core#1050
  • Disallow the string '-' as datetime input by @davidhewitt in pydantic/speedate#52 & pydantic/pydantic-core#1060
  • Fix: NaN and Inf float serialization by @davidhewitt in pydantic/pydantic-core#1062
  • Restore manylinux-compatible PGO builds by @davidhewitt in pydantic/pydantic-core#1068
  • @schneebuzz made their first contribution in #7699
  • @edoakes made their first contribution in #7780
  • @alexmojaki made their first contribution in #7775
  • @NickG123 made their first contribution in #7751
  • @gowthamgts made their first contribution in #7830
  • @jamesbraza made their first contribution in #7848
  • @laundmo made their first contribution in #7850
  • @rahmatnazali made their first contribution in #7870
  • @waterfountain1996 made their first contribution in #7878
  • @chris-spann made their first contribution in #7863
  • @me-and made their first contribution in #7810
  • @utkini made their first contribution in #7768
  • @bn-l made their first contribution in #7744
  • @alexdrydew made their first contribution in #7893
  • @Luca-Blight made their first contribution in #7930
  • @howsunjow made their first contribution in #7925
  • @joakimnordling made their first contribution in #7881
  • @icfly2 made their first contribution in #7976
  • @Yummy-Yums made their first contribution in #8003
  • @Iipin made their first contribution in #7972
  • @tabassco made their first contribution in #8004
  • @Mr-Pepe made their first contribution in #7979
  • @0x00cl made their first contribution in #8010
  • @barraponto made their first contribution in #8032
  • @sisp made their first contribution in pydantic/pydantic-core#995
  • @michaelhly made their first contribution in pydantic/pydantic-core#1015

v2.5.0b1 (2023-11-09)

V2.4.2 (2023-09-27).

  • Fix bug with JSON schema for sequence of discriminated union by @dmontagu in #7647
  • Fix schema references in discriminated unions by @adriangb in #7646
  • Fix json schema generation for recursive models by @adriangb in #7653
  • Fix models_json_schema for generic models by @adriangb in #7654
  • Fix xfailed test for generic model signatures by @adriangb in #7658
  • @austinorr made their first contribution in #7657
  • @peterHoburg made their first contribution in #7670

v2.4.1 (2023-09-26)

  • Update pydantic-core to 2.10.1 by @davidhewitt in #7633
  • Serialize unsubstituted type vars as Any by @adriangb in #7606
  • Remove schema building caches by @adriangb in #7624
  • Fix an issue where JSON schema extras weren't JSON encoded by @dmontagu in #7625

v2.4.0 (2023-09-22)

  • Update pydantic-core to 2.10.0 by @samuelcolvin in #7542
  • Add Base64Url types by @dmontagu in #7286
  • Implement optional number to str coercion by @lig in #7508
  • Allow access to field_name and data in all validators if there is data and a field name by @samuelcolvin in #7542
  • Add BaseModel.model_validate_strings and TypeAdapter.validate_strings by @hramezani in #7552
  • Add Pydantic plugins experimental implementation by @lig @samuelcolvin and @Kludex in #6820
  • Do not override model_post_init in subclass with private attrs by @Viicos in #7302
  • Make fields with defaults not required in the serialization schema by default by @dmontagu in #7275
  • Mark Extra as deprecated by @disrupted in #7299
  • Make EncodedStr a dataclass by @Kludex in #7396
  • Move annotated_handlers to be public by @samuelcolvin in #7569
  • Simplify flattening and inlining of CoreSchema by @adriangb in #7523
  • Remove unused copies in CoreSchema walking by @adriangb in #7528
  • Add caches for collecting definitions and invalid schemas from a CoreSchema by @adriangb in #7527
  • Eagerly resolve discriminated unions and cache cases where we can't by @adriangb in #7529
  • Replace dict.get and dict.setdefault with more verbose versions in CoreSchema building hot paths by @adriangb in #7536
  • Cache invalid CoreSchema discovery by @adriangb in #7535
  • Allow disabling CoreSchema validation for faster startup times by @adriangb in #7565
  • Fix config detection for TypedDict from grandparent classes by @dmontagu in #7272
  • Fix hash function generation for frozen models with unusual MRO by @dmontagu in #7274
  • Make strict config overridable in field for Path by @hramezani in #7281
  • Use ser_json_<timedelta|bytes> on default in GenerateJsonSchema by @Kludex in #7269
  • Adding a check that alias is validated as an identifier for Python by @andree0 in #7319
  • Raise an error when computed field overrides field by @sydney-runkle in #7346
  • Fix applying SkipValidation to referenced schemas by @adriangb in #7381
  • Enforce behavior of private attributes having double leading underscore by @lig in #7265
  • Standardize __get_pydantic_core_schema__ signature by @hramezani in #7415
  • Fix generic dataclass fields mutation bug (when using TypeAdapter ) by @sydney-runkle in #7435
  • Fix TypeError on model_validator in wrap mode by @pmmmwh in #7496
  • Improve enum error message by @hramezani in #7506
  • Make repr work for instances that failed initialization when handling ValidationError s by @dmontagu in #7439
  • Fixed a regular expression denial of service issue by limiting whitespaces by @prodigysml in #7360
  • Fix handling of UUID values having UUID.version=None by @lig in #7566
  • Fix __iter__ returning private cached_property info by @sydney-runkle in #7570
  • Improvements to version info message by @samuelcolvin in #7594
  • @15498th made their first contribution in #7238
  • @GabrielCappelli made their first contribution in #7213
  • @tobni made their first contribution in #7184
  • @redruin1 made their first contribution in #7282
  • @FacerAin made their first contribution in #7288
  • @acdha made their first contribution in #7297
  • @andree0 made their first contribution in #7319
  • @gordonhart made their first contribution in #7375
  • @pmmmwh made their first contribution in #7496
  • @disrupted made their first contribution in #7299
  • @prodigysml made their first contribution in #7360

v2.3.0 (2023-08-23)

  • 🔥 Remove orphaned changes file from repo by @lig in #7168
  • Add copy button on documentation by @Kludex in #7190
  • Fix docs on JSON type by @Kludex in #7189
  • Update mypy 1.5.0 to 1.5.1 in CI by @hramezani in #7191
  • fix download links badge by @samuelcolvin in #7200
  • add 2.2.1 to changelog by @samuelcolvin in #7212
  • Make ModelWrapValidator protocols generic by @dmontagu in #7154
  • Correct Field(..., exclude: bool) docs by @samuelcolvin in #7214
  • Make shadowing attributes a warning instead of an error by @adriangb in #7193
  • Document Base64Str and Base64Bytes by @Kludex in #7192
  • Fix config.defer_build for serialization first cases by @samuelcolvin in #7024
  • clean Model docstrings in JSON Schema by @samuelcolvin in #7210
  • fix #7228 (typo): docs in validators.md to correct validate_default kwarg by @lmmx in #7229
  • ✅ Implement tzinfo.fromutc method for TzInfo in pydantic-core by @lig in #7019
  • Support __get_validators__ by @hramezani in #7197

v2.2.1 (2023-08-18)

  • Make xfail ing test for root model extra stop xfail ing by @dmontagu in #6937
  • Optimize recursion detection by stopping on the second visit for the same object by @mciucu in #7160
  • fix link in docs by @tlambert03 in #7166
  • Replace MiMalloc w/ default allocator by @adriangb in pydantic/pydantic-core#900
  • Bump pydantic-core to 2.6.1 and prepare 2.2.1 release by @adriangb in #7176

v2.2.0 (2023-08-17)

  • Split "pipx install" setup command into two commands on the documentation site by @nomadmtb in #6869
  • Deprecate Field.include by @hramezani in #6852
  • Fix typo in default factory error msg by @hramezani in #6880
  • Simplify handling of typing.Annotated in GenerateSchema by @dmontagu in #6887
  • Re-enable fastapi tests in CI by @dmontagu in #6883
  • Make it harder to hit collisions with json schema defrefs by @dmontagu in #6566
  • Cleaner error for invalid input to Path fields by @samuelcolvin in #6903
  • :memo: support Coordinate Type by @yezz123 in #6906
  • Fix ForwardRef wrapper for py 3.10.0 (shim until bpo-45166) by @randomir in #6919
  • Fix misbehavior related to copying of RootModel by @dmontagu in #6918
  • Fix issue with recursion error caused by ParamSpec by @dmontagu in #6923
  • Add section about Constrained classes to the Migration Guide by @Kludex in #6924
  • Use main branch for badge links by @Viicos in #6925
  • Add test for v1/v2 Annotated discrepancy by @carlbordum in #6926
  • Make the v1 mypy plugin work with both v1 and v2 by @dmontagu in #6921
  • Fix issue where generic models couldn't be parametrized with BaseModel by @dmontagu in #6933
  • Remove xfail for discriminated union with alias by @dmontagu in #6938
  • add field_serializer to computed_field by @andresliszt in #6965
  • Use union_schema with Type[Union[...]] by @JeanArhancet in #6952
  • Fix inherited typeddict attributes / config by @adriangb in #6981
  • fix dataclass annotated before validator called twice by @davidhewitt in #6998
  • Update test-fastapi deselected tests by @hramezani in #7014
  • Fix validator doc format by @hramezani in #7015
  • Fix typo in docstring of model_json_schema by @AdamVinch-Federated in #7032
  • remove unused "type ignores" with pyright by @samuelcolvin in #7026
  • Add benchmark representing FastAPI startup time by @adriangb in #7030
  • Fix json_encoders for Enum subclasses by @adriangb in #7029
  • Update docstring of ser_json_bytes regarding base64 encoding by @Viicos in #7052
  • Allow @validate_call to work on async methods by @adriangb in #7046
  • Fix: mypy error with Settings and SettingsConfigDict by @JeanArhancet in #7002
  • Fix some typos (repeated words and it's/its) by @eumiro in #7063
  • Fix the typo in docstring by @harunyasar in #7062
  • Docs: Fix broken URL in the pydantic-settings package recommendation by @swetjen in #6995
  • Handle constraints being applied to schemas that don't accept it by @adriangb in #6951
  • Replace almost_equal_floats with math.isclose by @eumiro in #7082
  • bump pydantic-core to 2.5.0 by @davidhewitt in #7077
  • Add short_version and use it in links by @hramezani in #7115
  • 📝 Add usage link to RootModel by @Kludex in #7113
  • Revert "Fix default port for mongosrv DSNs (#6827)" by @Kludex in #7116
  • Clarify validate_default and _Unset handling in usage docs and migration guide by @benbenbang in #6950
  • Tweak documentation of Field.exclude by @Viicos in #7086
  • Do not require validate_assignment to use Field.frozen by @Viicos in #7103
  • tweaks to _core_utils by @samuelcolvin in #7040
  • Make DefaultDict working with set by @hramezani in #7126
  • Don't always require typing.Generic as a base for partially parametrized models by @dmontagu in #7119
  • Fix issue with JSON schema incorrectly using parent class core schema by @dmontagu in #7020
  • Fix xfailed test related to TypedDict and alias_generator by @dmontagu in #6940
  • Improve error message for NameEmail by @dmontagu in #6939
  • Fix generic computed fields by @dmontagu in #6988
  • Reflect namedtuple default values during validation by @dmontagu in #7144
  • Update dependencies, fix pydantic-core usage, fix CI issues by @dmontagu in #7150
  • Add mypy 1.5.0 by @hramezani in #7118
  • Handle non-json native enum values by @adriangb in #7056
  • document round_trip in Json type documentation by @jc-louis in #7137
  • Relax signature checks to better support builtins and C extension functions as validators by @adriangb in #7101
  • add union_mode='left_to_right' by @davidhewitt in #7151
  • Include an error message hint for inherited ordering by @yvalencia91 in #7124
  • Fix one docs link and resolve some warnings for two others by @dmontagu in #7153
  • Include Field extra keys name in warning by @hramezani in #7136

v2.1.1 (2023-07-25)

  • Skip FieldInfo merging when unnecessary by @dmontagu in #6862

v2.1.0 (2023-07-25)

  • Add StringConstraints for use as Annotated metadata by @adriangb in #6605
  • Try to fix intermittently failing CI by @adriangb in #6683
  • Remove redundant example of optional vs default. by @ehiggs-deliverect in #6676
  • Docs update by @samuelcolvin in #6692
  • Remove the Validate always section in validator docs by @adriangb in #6679
  • Fix recursion error in json schema generation by @adriangb in #6720
  • Fix incorrect subclass check for secretstr by @AlexVndnblcke in #6730
  • update pdm / pdm lockfile to 2.8.0 by @davidhewitt in #6714
  • unpin pdm on more CI jobs by @davidhewitt in #6755
  • improve source locations for auxiliary packages in docs by @davidhewitt in #6749
  • Assume builtins don't accept an info argument by @adriangb in #6754
  • Fix bug where calling help(BaseModelSubclass) raises errors by @hramezani in #6758
  • Fix mypy plugin handling of @model_validator(mode="after") by @ljodal in #6753
  • update pydantic-core to 2.3.1 by @davidhewitt in #6756
  • Mypy plugin for settings by @hramezani in #6760
  • Use contentSchema keyword for JSON schema by @dmontagu in #6715
  • fast-path checking finite decimals by @davidhewitt in #6769
  • Docs update by @samuelcolvin in #6771
  • Improve json schema doc by @hramezani in #6772
  • Update validator docs by @adriangb in #6695
  • Fix typehint for wrap validator by @dmontagu in #6788
  • 🐛 Fix validation warning for unions of Literal and other type by @lig in #6628
  • Update documentation for generics support in V2 by @tpdorsey in #6685
  • add pydantic-core build info to version_info() by @samuelcolvin in #6785
  • Fix pydantic dataclasses that use slots with default values by @dmontagu in #6796
  • Fix inheritance of hash function for frozen models by @dmontagu in #6789
  • ✨ Add SkipJsonSchema annotation by @Kludex in #6653
  • Error if an invalid field name is used with Field by @dmontagu in #6797
  • Add GenericModel to MOVED_IN_V2 by @adriangb in #6776
  • Remove unused code from docs/usage/types/custom.md by @hramezani in #6803
  • Fix float -> Decimal coercion precision loss by @adriangb in #6810
  • remove email validation from the north star benchmark by @davidhewitt in #6816
  • Fix link to mypy by @progsmile in #6824
  • Improve initialization hooks example by @hramezani in #6822
  • Fix default port for mongosrv DSNs by @dmontagu in #6827
  • Improve API documentation, in particular more links between usage and API docs by @samuelcolvin in #6780
  • update pydantic-core to 2.4.0 by @davidhewitt in #6831
  • Fix annotated_types.MaxLen validator for custom sequence types by @ImogenBits in #6809
  • Update V1 by @hramezani in #6833
  • Make it so callable JSON schema extra works by @dmontagu in #6798
  • Fix serialization issue with InstanceOf by @dmontagu in #6829
  • Add back support for json_encoders by @adriangb in #6811
  • Update field annotations when building the schema by @dmontagu in #6838
  • Use WeakValueDictionary to fix generic memory leak by @dmontagu in #6681
  • Add config.defer_build to optionally make model building lazy by @samuelcolvin in #6823
  • delegate UUID serialization to pydantic-core by @davidhewitt in #6850
  • Update json_encoders docs by @adriangb in #6848
  • Fix error message for staticmethod / classmethod order with validate_call by @dmontagu in #6686
  • Improve documentation for Config by @samuelcolvin in #6847
  • Update serialization doc to mention Field.exclude takes priority over call-time include/exclude by @hramezani in #6851
  • Allow customizing core schema generation by making GenerateSchema public by @adriangb in #6737

v2.0.3 (2023-07-05)

  • Mention PyObject (v1) moving to ImportString (v2) in migration doc by @slafs in #6456
  • Fix release-tweet CI by @Kludex in #6461
  • Revise the section on required / optional / nullable fields. by @ybressler in #6468
  • Warn if a type hint is not in fact a type by @adriangb in #6479
  • Replace TransformSchema with GetPydanticSchema by @dmontagu in #6484
  • Fix the un-hashability of various annotation types, for use in caching generic containers by @dmontagu in #6480
  • PYD-164: Rework custom types docs by @adriangb in #6490
  • Fix ci by @adriangb in #6507
  • Fix forward ref in generic by @adriangb in #6511
  • Fix generation of serialization JSON schemas for core_schema.ChainSchema by @dmontagu in #6515
  • Document the change in Field.alias behavior in Pydantic V2 by @hramezani in #6508
  • Give better error message attempting to compute the json schema of a model with undefined fields by @dmontagu in #6519
  • Document alias_priority by @tpdorsey in #6520
  • Add redirect for types documentation by @tpdorsey in #6513
  • Allow updating docs without release by @samuelcolvin in #6551
  • Ensure docs tests always run in the right folder by @dmontagu in #6487
  • Defer evaluation of return type hints for serializer functions by @dmontagu in #6516
  • Disable E501 from Ruff and rely on just Black by @adriangb in #6552
  • Update JSON Schema documentation for V2 by @tpdorsey in #6492
  • Add documentation of cyclic reference handling by @dmontagu in #6493
  • Remove the need for change files by @samuelcolvin in #6556
  • add "north star" benchmark by @davidhewitt in #6547
  • Update Dataclasses docs by @tpdorsey in #6470
  • ♻️ Use different error message on v1 redirects by @Kludex in #6595
  • ⬆ Upgrade pydantic-core to v2.2.0 by @lig in #6589
  • Fix serialization for IPvAny by @dmontagu in #6572
  • Improve CI by using PDM instead of pip to install typing-extensions by @adriangb in #6602
  • Add enum error type docs by @lig in #6603
  • 🐛 Fix max_length for unicode strings by @lig in #6559
  • Add documentation for accessing features via pydantic.v1 by @tpdorsey in #6604
  • Include extra when iterating over a model by @adriangb in #6562
  • Fix typing of model_validator by @adriangb in #6514
  • Touch up Decimal validator by @adriangb in #6327
  • Fix various docstrings using fixed pytest-examples by @dmontagu in #6607
  • Handle function validators in a discriminated union by @dmontagu in #6570
  • Review json_schema.md by @tpdorsey in #6608
  • Make validate_call work on basemodel methods by @dmontagu in #6569
  • add test for big int json serde by @davidhewitt in #6614
  • Fix pydantic dataclass problem with dataclasses.field default_factory by @hramezani in #6616
  • Fixed mypy type inference for TypeAdapter by @zakstucke in #6617
  • Make it work to use None as a generic parameter by @dmontagu in #6609
  • Make it work to use $ref as an alias by @dmontagu in #6568
  • add note to migration guide about changes to AnyUrl etc by @davidhewitt in #6618
  • 🐛 Support defining json_schema_extra on RootModel using Field by @lig in #6622
  • Update pre-commit to prevent commits to main branch on accident by @dmontagu in #6636
  • Fix PDM CI for python 3.7 on MacOS/windows by @dmontagu in #6627
  • Produce more accurate signatures for pydantic dataclasses by @dmontagu in #6633
  • Updates to Url types for Pydantic V2 by @tpdorsey in #6638
  • Fix list markdown in transform docstring by @StefanBRas in #6649
  • simplify slots_dataclass construction to appease mypy by @davidhewitt in #6639
  • Update TypedDict schema generation docstring by @adriangb in #6651
  • Detect and lint-error for prints by @dmontagu in #6655
  • Add xfailing test for pydantic-core PR 766 by @dmontagu in #6641
  • Ignore unrecognized fields from dataclasses metadata by @dmontagu in #6634
  • Make non-existent class getattr a mypy error by @dmontagu in #6658
  • Update pydantic-core to 2.3.0 by @hramezani in #6648
  • Use OrderedDict from typing_extensions by @dmontagu in #6664
  • Fix typehint for JSON schema extra callable by @dmontagu in #6659

v2.0.2 (2023-07-05)

  • Fix bug where round-trip pickling/unpickling a RootModel would change the value of __dict__ , #6457 by @dmontagu
  • Allow single-item discriminated unions, #6405 by @dmontagu
  • Fix issue with union parsing of enums, #6440 by @dmontagu
  • Docs: Fixed constr documentation, renamed old regex to new pattern , #6452 by @miili
  • Change GenerateJsonSchema.generate_definitions signature, #6436 by @dmontagu

See the full changelog here

v2.0.1 (2023-07-04)

First patch release of Pydantic V2

  • Extra fields added via setattr (i.e. m.some_extra_field = 'extra_value' ) are added to .model_extra if model_config extra='allowed' . Fixed #6333 , #6365 by @aaraney
  • Automatically unpack JSON schema '$ref' for custom types, #6343 by @adriangb
  • Fix tagged unions multiple processing in submodels, #6340 by @suharnikov

v2.0 (2023-06-30)

Pydantic V2 is here! :tada:

See this post for more details.

v2.0b3 (2023-06-16)

Third beta pre-release of Pydantic V2

v2.0b2 (2023-06-03)

Add from_attributes runtime flag to TypeAdapter.validate_python and BaseModel.model_validate .

v2.0b1 (2023-06-01)

First beta pre-release of Pydantic V2

v2.0a4 (2023-05-05)

Fourth pre-release of Pydantic V2

v2.0a3 (2023-04-20)

Third pre-release of Pydantic V2

v2.0a2 (2023-04-12)

Second pre-release of Pydantic V2

v2.0a1 (2023-04-03)

First pre-release of Pydantic V2!

... see here for earlier changes.

Project details

Release history release notifications | rss feed.

Mar 12, 2024

Feb 27, 2024

Feb 23, 2024

Feb 5, 2024

Jan 29, 2024

2.6.0b1 pre-release

Jan 19, 2024

Dec 22, 2023

Nov 22, 2023

Nov 15, 2023

Nov 13, 2023

2.5.0b1 pre-release

Nov 9, 2023

Sep 28, 2023

Sep 26, 2023

Sep 25, 2023

Aug 23, 2023

Aug 18, 2023

Aug 17, 2023

Jul 25, 2023

Jul 14, 2023

Jul 5, 2023

Jul 4, 2023

Jun 30, 2023

2.0b3 pre-release

Jun 17, 2023

2.0b2 pre-release

Jun 3, 2023

2.0b1 pre-release

Jun 1, 2023

2.0a4 pre-release

May 5, 2023

2.0a3 pre-release

Apr 20, 2023

2.0a2 pre-release

Apr 12, 2023

2.0a1 pre-release

Apr 3, 2023

Sep 27, 2023

Jul 24, 2023

Jun 7, 2023

May 23, 2023

Mar 22, 2023

Mar 8, 2023

Feb 15, 2023

Dec 30, 2022

1.10.3 yanked

Dec 29, 2022

Reason this release was yanked:

See https://github.com/pydantic/pydantic/issues/4885

Sep 5, 2022

Aug 31, 2022

Aug 30, 2022

1.10.0b1 pre-release

Aug 24, 2022

1.10.0a2 pre-release

1.10.0a1 pre-release

Aug 22, 2022

Aug 11, 2022

May 19, 2022

Dec 31, 2021

1.9.0a2 pre-release

Dec 24, 2021

1.9.0a1 pre-release

Dec 18, 2021

May 11, 2021

Mar 3, 2021

Feb 26, 2021

Nov 30, 2020

Nov 1, 2020

Oct 28, 2020

Oct 26, 2020

Jul 15, 2020

Jul 11, 2020

Apr 23, 2020

Apr 18, 2020

Jan 24, 2020

Dec 21, 2019

Nov 28, 2019

Nov 20, 2019

Nov 7, 2019

Oct 23, 2019

1.0b2 pre-release

Oct 7, 2019

1.0b1 pre-release

Oct 1, 2019

Aug 17, 2019

Aug 8, 2019

Aug 6, 2019

Jul 31, 2019

Jul 24, 2019

Jul 15, 2019

Jul 7, 2019

Jun 19, 2019

Jun 11, 2019

May 30, 2019

0.27a1 pre-release

May 26, 2019

May 22, 2019

May 5, 2019

Apr 23, 2019

Apr 4, 2019

Mar 29, 2019

Mar 15, 2019

Feb 26, 2019

Feb 18, 2019

0.20a1 pre-release

Feb 13, 2019

Feb 4, 2019

Jan 22, 2019

Jan 17, 2019

Jan 13, 2019

Dec 27, 2018

Dec 10, 2018

Dec 3, 2018

Nov 18, 2018

Oct 2, 2018

Sep 21, 2018

Aug 25, 2018

Jul 31, 2018

Jul 5, 2018

Jul 2, 2018

Jun 28, 2018

Jun 11, 2018

May 10, 2018

Apr 28, 2018

Mar 25, 2018

Feb 7, 2018

Feb 6, 2018

Feb 1, 2018

Nov 26, 2017

Nov 13, 2017

Nov 8, 2017

Nov 7, 2017

Oct 23, 2017

Jul 8, 2017

Jun 21, 2017

Jun 7, 2017

Jun 3, 2017

May 31, 2017

May 23, 2017

May 11, 2017

May 10, 2017

May 9, 2017

May 6, 2017

May 3, 2017

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages .

Source Distribution

Uploaded Mar 12, 2024 Source

Built Distribution

Uploaded Mar 12, 2024 Python 3

Hashes for pydantic-2.6.4.tar.gz

Hashes for pydantic-2.6.4-py3-none-any.whl.

  • português (Brasil)

Supported by

python hypothesis pydantic

An introduction to Pydantic (with basic example)

This article will help you take your first steps in using Pydantic. While prior knowledge of Pydantic is not required, a basic understanding of Python programming is necessary.

What is Pydantic and how to install it?

Pydantic is a Python library for data validation and parsing using type hints1. It is fast, extensible, and easy to use. To install Pydantic, you can use pip or conda commands, like this:

Or like this:

Why use Pydantic?

Pydantic isn’t a must-do, but a should-do. The library brings to the table a plethora of benefits:

  • It is easy to use and has a simple API, making it accessible to developers of all levels.
  • It performs fast validation and integrates seamlessly with Python’s data structures and type hints, making it suitable for use in high-performance applications.
  • It can automatically generate documentation for your data models, saving time and making it easier to understand the structure of your data.
  • It allows custom validation rules and serialization and deserialization, making it possible to handle a wide range of data validation scenarios.
  • It can be easily integrated with FastAPI, a high-performance Python web framework, to provide automatic request and response validation for APIs.
  • It ensures that the data used in a project is consistent and meets the required standards, reducing the risk of errors and making it easier to maintain the codebase.

Pydantic is more and more used by companies of all sizes. Mastering it can help you get a well-paid job or build your own dream project (and maybe a startup).

At this point, words alone won’t do. Let’s write some code to experience Pydantic. It may seem tough at first, but believe me, you’ll love it really soon.

Practical example

This is a very, very basic example of using Pydantic, in a step-by-step fashion. Here, we’ll use Pydantic to crate and validate a simple data model that represents a person with information including name, age, address, and whether they are active or not.

1. Import the  BaseModel  class from Pydantic. This is the base class for all Pydantic models:

2. Define your data model by creating a new class that inherits from  BaseModel . You can use type hints to specify the data types of the attributes. You can also use default values or validators to customize the behavior of your model.

3. Create an instance of your model by passing the data as keyword arguments. Pydantic will validate the data and raise an error if it does not match the model definition.

Valid input:

Invalid input:

4. You can access and modify the attributes of your model instance as normal Python attributes. Pydantic will check the types and values of the attributes whenever you assign them.

If you try to assign an invalid value, a ValidationError will be raised:

5. You can also use methods and properties on your model instance, such as  model_dump() ,  model_dump_json() ,  model_copy() , etc. These methods will respect the validation rules and serialization options of your model.

If you don’t fully grasp the example above, there’s nothing to worry about. Every aspect of Pydantic will be explained in more detail in the tutorials to come.

Next Article: Pydantic: Validate User Email and Password (2 Ways)

Series: Pydantic Basic Tutorials

Related Articles

  • Pydantic: Parsing and Validating JSON Data
  • How to serialize Pydantic models into JSON
  • Pydantic model_post_init() Method: Explained with Examples
  • Using Nested Models in Pydantic (with Examples)
  • How to Use Pydantic with Regular Expressions (2 Examples)
  • How to Use Enums with Pydantic (3 Examples)

Search tutorials, examples, and resources

  • PHP programming
  • Symfony & Doctrine
  • Laravel & Eloquent
  • Tailwind CSS
  • Sequelize.js
  • Mongoose.js

Search code, repositories, users, issues, pull requests...

Provide feedback.

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly.

To see all available qualifiers, see our documentation .

  • Notifications

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make hypothesis + pydantic work #1666

@MartinThoma

MartinThoma commented Jun 28, 2020 • edited

@MartinThoma

samuelcolvin commented Jun 28, 2020

Sorry, something went wrong.

MartinThoma commented Jun 28, 2020

  • 👍 1 reaction

@Zac-HD

Kludex commented Feb 26, 2021

  • ❤️ 1 reaction

@sidmitra

sidmitra commented Apr 26, 2021 • edited

  • 👍 9 reactions

@nocko

nocko commented May 26, 2021 • edited

@ento

ento commented Feb 2, 2022

  • 👍 2 reactions

No branches or pull requests

@ento

Pydantic :一个数据验证python库

半个码农

Pydantic 是一个用于数据验证和解析的 Python 库,它通过声明式的方式定义数据模型,并提供了自动生成文档、验证数据等功能。

使用 Pydantic 定义数据模型,可以通过继承 pydantic.BaseModel 来创建模型类。在模型类中声明字段并定义它们的类型。

使用定义的模型类创建实例,并进行数据验证。Pydantic 将验证数据类型和字段的其他规则。

如果提供的数据与 模型不匹配,Pydantic 将引发 pydantic.error_wrappers.ValidationError 异常。

图片

3.模型的 字段 Field验证:

Pydantic 的 Field 是一个用于定义模型字段的类,它允许你为模型中的每个字段指定类型、默认值、描述以及其他验证规则。以下是 Field 的一些常见用法:

定义字段类型 :通过 Field 可以明确指定字段的数据类型,确保数据的类型安全。

设置默认值 :可以在 Field 中为字段设置默认值,当创建模型实例时未提供该字段的值,将使用默认值。

添加描述信息 :可以为字段添加描述信息,这有助于生成文档或在错误消息中提供更清晰的说明。

自定义验证 :如果需要对字段进行额外的验证,可以在 Field 中使用 validator 参数来添加自定义的验证函数。

字段别名 :有时候需要在不同的上下文中使用不同的字段名,可以通过 Field 的 alias 参数来实现。

控制序列化 :通过 Field 的 exclude 参数,可以控制该字段是否被包含在模型的序列化输出中。

读取描述 :可以使用 description 属性来获取字段的描述信息,这在自动生成API文档时非常有用。

额外信息 : Field 还支持 title 、 example 等其他参数,用于提供更多关于字段的信息。

继承和共享 :如果多个模型中有相同的字段定义,可以使用 Field 来实现字段的继承和共享,避免重复代码。

配合类型注解 : Field 通常与 Python 的类型注解一起使用,以提供更强的类型检查和自动完成功能。

图片

在模型中,可以通过 class Config 类来配置一些行为,例如是否启用数据解析、字段别名、校验字段的预处理函数等。

图片

Pydantic 可以自动生成 API 文档。通过使用 schema() 方法,

图片

1.类型注解 :确保使用正确的类型提示来定义字段,以便Pydantic能够进行准确的验证。这是Pydantic强大验证功能的基础。

2. 数据模型验证 :当创建模型实例时,Pydantic会自动根据模型中定义的规则验证传入的数据。如果数据无效,Pydantic将抛出异常并停止验证过程。

3.错误消息 :Pydantic提供友好的错误消息,帮助理解验证失败的原因。这有助于调试和用户反馈。

4. 环境变量 :可以使用BaseSettings从环境变量中读取系统设置,这对于配置管理非常有用。

5.序列化与反序列化 :Pydantic支持数据的序列化和反序列化,可以轻松地将数据转换为Python数据结构、JSON等格式。

6. IDE集成 :Pydantic与IDE和linter配合良好,可以提供更好的开发体验和代码质量。

7.嵌套模型 :在模型内部使用其他模型,以创建复杂的数据结构,同时保持清晰的结构和易于管理。

8.数据转换 :Pydantic会尝试将输入数据转换为模型中定义的字段类型,例如将字符串转换为整数或浮点数。

9.避免循环引用 :在使用Pydantic时,应避免模型之间的循环引用,这可能会导致验证过程中的问题。

以上只是pydantic的一部分用法,更多用法请参考官方文档

关注公众号,发送【python】获取

本文使用 文章同步助手 同步
  • PrivateAttr
  • computed_field
  • ComputedFieldInfo
  • Configuration
  • JSON Schema
  • Functional Validators
  • Functional Serializers
  • Standard Library Types
  • Pydantic Types
  • Network Types
  • Version Information
  • Pydantic Plugins
  • Annotated Handlers
  • Pydantic Settings
  • Pydantic People

Defining fields on models.

Field ¶

Usage Documentation

Create a field for objects that can be configured.

Used to provide extra information about a field, either for the model schema or complex validation. Some arguments apply only to number fields ( int , float , Decimal ) and some apply only to str .

  • Any _Unset objects will be replaced by the corresponding value defined in the _DefaultValues dictionary. If a key for the _Unset object is not found in the _DefaultValues dictionary, it will default to None

Parameters:

FieldInfo ¶

Bases: Representation

This class holds information about a field.

FieldInfo is used for any field definition regardless of whether the Field() function is explicitly used.

You generally shouldn't be creating FieldInfo directly, you'll only need to use it when accessing BaseModel .model_fields internals.

Attributes:

See the signature of pydantic.fields.Field for more details about the expected arguments.

from_field staticmethod ¶

Create a new FieldInfo object with the Field function.

This is how you can create a field with default value like this:

from_annotation staticmethod ¶

Creates a FieldInfo instance from a bare annotation.

This function is used internally to create a FieldInfo from a bare annotation like this:

We also account for the case where the annotation can be an instance of Annotated and where one of the (not first) arguments in Annotated is an instance of FieldInfo , e.g.:

from_annotated_attribute staticmethod ¶

Create FieldInfo from an annotation with a default value.

This is used in cases like the following:

merge_field_infos staticmethod ¶

Merge FieldInfo instances keeping only explicitly set attributes.

Later FieldInfo instances override earlier ones.

get_default ¶

Get the default value.

We expose an option for whether to call the default_factory (if present), as calling it may result in side effects that we want to avoid. However, there are times when it really should be called (namely, when instantiating a model via model_construct ).

is_required ¶

Check if the field is required (i.e., does not have a default value or factory).

rebuild_annotation ¶

Attempts to rebuild the original annotation for use in function signatures.

If metadata is present, it adds it to the original annotation using Annotated . Otherwise, it returns the original annotation as-is.

Note that because the metadata has been flattened, the original annotation may not be reconstructed exactly as originally provided, e.g. if the original type had unrecognized annotations, or was annotated with a call to pydantic.Field .

apply_typevars_map ¶

Apply a typevars_map to the annotation.

This method is used when analyzing parametrized generic types to replace typevars with their concrete types.

This method applies the typevars_map to the annotation in place.

pydantic._internal._generics.replace_types is used for replacing the typevars with their concrete types.

PrivateAttr ¶

Private model attributes

Indicates that an attribute is intended for private use and not handled during normal validation/serialization.

Private attributes are not validated by Pydantic, so it's up to you to ensure they are used in a type-safe manner.

Private attributes are stored in __private_attributes__ on the model.

ModelPrivateAttr ¶

A descriptor for private attributes in class models.

You generally shouldn't be creating ModelPrivateAttr instances directly, instead use pydantic.fields.PrivateAttr . (This is similar to FieldInfo vs. Field .)

Retrieve the default value of the object.

If self.default_factory is None , the method will return a deep copy of the self.default object.

If self.default_factory is not None , it will call self.default_factory and return the value returned.

computed_field ¶

The computed_field decorator

Decorator to include property and cached_property when serializing models or dataclasses.

This is useful for fields that are computed from other fields, or for fields that are expensive to compute and should be cached.

If applied to functions not yet decorated with @property or @cached_property , the function is automatically wrapped with property . Although this is more concise, you will lose IntelliSense in your IDE, and confuse static type checkers, thus explicit use of @property is recommended.

Mypy Warning

Even with the @property or @cached_property applied to your function before @computed_field , mypy may throw a Decorated property not supported error. See mypy issue #1362 , for more information. To avoid this error message, add # type: ignore[misc] to the @computed_field line.

pyright supports @computed_field without error.

Overriding with computed_field

You can't override a field from a parent class with a computed_field in the child class. mypy complains about this behavior if allowed, and dataclasses doesn't allow this pattern either. See the example below:

Private properties decorated with @computed_field have repr=False by default.

ComputedFieldInfo dataclass ¶

A container for data from @computed_field so that we can access it while building the pydantic-core schema.

python hypothesis pydantic

为什么2024年你应该使用Pydantic

  • 字幕制作者(中文(简体)): 小橙子2077
  • 字幕制作者(英语(美国)): 小橙子2077

可以陪你打游戏的AI桌宠见过吗?

编程圈有一个不成文的规定,你知道吗?

劝退!还敢自学python!骂醒一个算一个!这里面的水可深了(爬虫/数据分析)

AsyncIO、await 和 async - Python 中的并发

一个临床医学生已接触Python两年半,这是他搭的网站

我教你学爬虫,不是让你写一个开源软件爬我网站视频免费看。

【2024年数据分析】10小时系统学会数据分析、挖掘、清洗、可视化从入门到项目实战(完整版)学会可做项目

FastAPI 完整课程

毕设-基于python的微博评论情感分析

今年的控制985,还有谁在压分?

stata一键输出实证分析程序包

【3月末战力梯度排行榜】只有吒儿大伤,还有英雄前瞻。

我是如何制作科普动画的?

p14爬虫自动化之drissionpage过瑞数反爬6代/5/4/3代

p11爬虫自动化之drissionpage巧妙绕过反爬像fiddler和network一样监听数据包

24年超火热的可视化工具pygwalker,一行代码生成数据可视化

二十五岁 人大本硕 腾讯在职 爬虫被捕!

p10爬虫自动化之drissionpage过极验4代语序点选和九宫格反爬

如何使用Manim制作图形 | Manim新手教程

IMAGES

  1. Testing your Python Code with Hypothesis • Inspired Python

    python hypothesis pydantic

  2. Parsing and validating data in Python using Pydantic

    python hypothesis pydantic

  3. The Beginner’s Guide to Pydantic. A Python package to parse and validate…

    python hypothesis pydantic

  4. Statistical Hypothesis Test in Python

    python hypothesis pydantic

  5. Statistical Hypothesis Testing- Data Science with Python

    python hypothesis pydantic

  6. python

    python hypothesis pydantic

VIDEO

  1. What is PYTHON programming language #python #programming

  2. Python Variables

  3. Methods in Python

  4. Why is python used in data science? 🤔

  5. 1-1 What is Python

  6. Json Serialization en Python, rien de + simple #shorts #python #pydantic

COMMENTS

  1. Hypothesis

    Hypothesis. Hypothesis is the Python library for property-based testing.Hypothesis can infer how to construct type-annotated classes, and supports builtin types, many standard library types, and generic types from the typing and typing_extensions modules by default. Pydantic v2.0 drops built-in support for Hypothesis and no more ships with the integrated Hypothesis plugin.

  2. python

    Our protocol is hierarchical, so comes easy to me to describe it with nested classes in pydantic: from pydantic import BaseModel, Field, conint. from hypothesis import given, strategies as st. class Inner(BaseModel): start: conint(ge=0, le=9) = Field(description="starting value") end: conint(ge=0, le=9) = Field(description="it should be greater ...

  3. What you can generate and how

    For example, everything_except(int) returns a strategy that can generate anything that from_type() can ever generate, except for instances of int, and excluding instances of types added via register_type_strategy(). This is useful when writing tests which check that invalid input is rejected in a certain way. hypothesis.strategies. frozensets (elements, *, min_size = 0, max_size = None ...

  4. The Beginner's Guide to Pydantic. A Python package to parse and

    2. Implementation. In this section, we are going to explore some of the useful functionalities available in pydantic.. Defining an object in pydantic is as simple as creating a new class which inherits from theBaseModel.When you create a new object from the class, pydantic guarantees that the fields of the resultant model instance will conform to the field types defined on the model.

  5. pydantic · PyPI

    Pydantic. Data validation using Python type hints. Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.8+; validate it with Pydantic. Pydantic Company :rocket: We've started a company based on the principles that I believe have led to Pydantic's success.

  6. pydantic. The library you must know if you juggle…

    The library you must know if you juggle data around. Having complex nested data structures is hard. The traditional approach to store this kind of data in Python is nested dictionaries. Although Python dictionaries are amazing, there are two issues which typically arise: (1) How do I, as a developer, know which kind of data is to be expected in ...

  7. An introduction to Pydantic (with basic example)

    This is a very, very basic example of using Pydantic, in a step-by-step fashion. Here, we'll use Pydantic to crate and validate a simple data model that represents a person with information including name, age, address, and whether they are active or not. 1. Import the BaseModel class from Pydantic. This is the base class for all Pydantic ...

  8. Pydantic: Building Robust Data Models in Python

    Pydantic is a data validation and settings management library for Python. It's primarily used for data parsing and validation, especially in the context of data serialization and deserialization ...

  9. Exploring Pydantic and Dataclasses in Python: A Comprehensive ...

    Pydantic is a data validation and settings management library for Python that is widely used for defining data schemas. It is built on top of Python type hints, allowing you to define data models ...

  10. Clean and Robust Request Validations in Python using Pydantic

    Pydantic provides a functionality to define schemas which consist of a set of properties and types to validate a payload. The primary means of defining objects in pydantic is via models. "You ...

  11. Welcome to Hypothesis!

    Welcome to Hypothesis!¶ Hypothesis is a Python library for creating unit tests which are simpler to write and more powerful when run, finding edge cases in your code you wouldn't have thought to look for. It is stable, powerful and easy to add to any existing test suite. It works by letting you write tests that assert that something should be true for every case, not just the ones you ...

  12. Pydantic

    Hundreds of other fixes and improvements further support Pydantic as the canonical way of working with real world data in Python. Based on the same principles that have made Pydantic so successful, the creator of Pydantic, Samuel Colvin, has started a company to bring the same quality of developer experience to other domains.

  13. Make hypothesis + pydantic work · Issue #1666

    I'm still trying to gather some info from the runner, but at first look all the versions of python, pydantic, hypothesis seem to be exactly the same upto even the patch version. 👍 9 nocko, Jokab, samkim, StasEvseev, mattduck, kirill-nikitin-ailet, buchi-busireddy, SliMM, and luisgc93 reacted with thumbs up emoji

  14. Why use Pydantic

    Pydantic provides functionality to serialize model in three ways: To a Python dict made up of the associated Python objects. To a Python dict made up only of "jsonable" types. To a JSON string. In all three modes, the output can be customized by excluding specific fields, excluding unset fields, excluding default values, and excluding None ...

  15. Pydantic 2.0 Update: Advancing Data Validation and Parsing in Python ⬆️

    Pydantic was created by Samuel Colvin, and the first public release was made in August 2018. The main purpose of Pydantic is to provide a way to validate and parse data in Python programs. It ...

  16. Pydantic :一个数据验证python库

    前言 Pydantic 是一个用于数据验证和解析的 Python 库,它通过声明式的方式定义数据模型,并提供了自动生成文档、验证数据等功能。 一.安装 pip install pydantic 二.基本用法 1.定义数据模型: 使用 Pydantic 定…

  17. Pythonが教育用途において十分だという話

    dataclass / Pydantic. 自分は型ヒントよりもdataclassやPydanticを使った型付けを重視しています。いわゆるクラスベースな言語の書き方が大事だと考えています。 dataclass. Pythonは動的型付け言語であり、interface相当の機能すらclassの構文で書く変わった言語です。

  18. python

    # model from pydantic import BaseModel, validator class SimpleModel(BaseModel): a: int b: int @validator('b') def check_numbers(cls, b, values): if b*values['a'] < 0: raise ValueError('a*b > 0 does not hold') return b # test from hypothesis import given, strategies as st @given(st.builds(SimpleModel)) def test_simple_model(instance: SimpleModel ...

  19. hoe to solve:ImportError: /home/nadeem/venv/lib/python3.12 ...

    Maybe I'm an outlier but I've always found Anaconda Python to be a much better tool for Python, especially Mini Conda. It's very good at finding and installing dependencies among other things, which looks to be the problem here.

  20. Fields

    This is how you can create a field with default value like this: import pydantic class MyModel(pydantic.BaseModel): foo: int = pydantic.Field(4) Source code in pydantic/fields.py. from_annotation staticmethod. from_annotation(annotation) Creates a FieldInfo instance from a bare annotation.

  21. python

    In my fastapi app I have created a pydantic BaseModel with two fields (among others): 'relation_type' and 'document_list' (both are optional). I want to validate that, if 'relation_type' has a value, then, 'document_list' must have al least one element.

  22. 为什么2024年你应该使用Pydantic_哔哩哔哩_bilibili

    为什么2024年你应该使用Pydantic, 视频播放量 179、弹幕量 0、点赞数 6、投硬币枚数 3、收藏人数 7、转发人数 0, 视频作者 小橙子2077, 作者简介 公众号:Python开发笔记,相关视频:FastAPI 完整课程,AsyncIO、await 和 async - Python 中的并发,【2024年数据分析】10小时系统学会数据分析、挖掘、清洗、可视化从 ...

  23. Python Enum and Pydantic : accept enum member's composition

    I would like to validate a pydantic field based on that enum. from pydantic import BaseModel. class MyModel(BaseModel): my_enum_field: MyEnum. BUT I would like this validation to also accept string that are composed by the Enum members. So for example : "val1_val2_val3" or "val1_val3" are valid input. I cannot make this field as a string field ...

  24. python

    I have an excel spreadsheet with multiple sheets. I am reading the entire sheet and making into a dictionary where the the key is the sheet_name and the value is a dataframe of all the data. I am using the pydantic model below and cant seem get it update the dataframe value to the default.