Skip to main content

A set of pydantic utilities, to extend models on package load

Project description

pydantic-modelable

A set of utilities around pydantic that allows to create extensible pydantic models, with little code, in an aim to have models extended by third-party python code.

Features

Using pydantic for type modelisation and validation has become a very common practice. That being said, some advanced uses are not natively supported, although the pydantic types are extremely flexible, such as dynamic extensibility of the models.

It can be very useful to define extensible models relying on this mechanism, and pydantic_modelable, as it may provide the following benefits:

  • Reduction of code maintenance (defining an "extension" registers it automatically wherever the base was setup)
  • Easy extension of a core library's models and features through the loading of extension modules
  • Automatically updated Model schemas for inclusion in any schema-based tooling or framework (ex: FastAPI's OpenAPI Schema generation tooling)

With a few additional parameters to your model's constructor, inheriting from pydantic_modelable.Modelable, you can thus configure specific behaviors for your extensible model:

  • discriminated union: discriminator=attr_name

You can then register other models into your base model using decorators embedded into your base model by the pydantic_modelable.Modelable class:

  • extends_enum
  • extends_union(dicriminated_union_attr_name: str)
  • as_attribute(attr_name: str, optional: bool, default_factory: Callable[[], BaseModel])

Limitations

As pydantic-modelable relies on altering the pydantic models at runtime, the type-checking tools are usually not able to understand that the model was extended and its type signature was changed. This, sadly, often leads to an extensive use of #type: ignore directives in the code relating to the use of the extended models.

Project details


Download files

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

Source Distribution

pydantic_modelable-0.2.0.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydantic_modelable-0.2.0-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file pydantic_modelable-0.2.0.tar.gz.

File metadata

  • Download URL: pydantic_modelable-0.2.0.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pydantic_modelable-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3ffca8d1c8f3432c346d22a3793e6a002d5eac875545b9fd91429dda9750c2ef
MD5 dece584d60f1c3587d9cf83973048fda
BLAKE2b-256 555ab6c0043ff4ca1bcf5a83e553f958e0c7317220c32ce74fdd45e40e489923

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydantic_modelable-0.2.0.tar.gz:

Publisher: workflow.yml on Joacchim/pydantic-modelable

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydantic_modelable-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pydantic_modelable-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9c47a7abb113be431266643da18c88d26d5d83309ef6dabf17bbe6d223a962b9
MD5 5b3f09d5d56c91ba91cbb2713d79e46c
BLAKE2b-256 75d84f450984cf2454d706d63b09e9d09ac0b498a1e405cd768d1c86e358cfa8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydantic_modelable-0.2.0-py3-none-any.whl:

Publisher: workflow.yml on Joacchim/pydantic-modelable

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page