Django-pydantic-field

Latest version: v0.3.10

Safety actively analyzes 679296 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 4 of 8

0.3.0a1

Pydantic v2 initial support
Important note: `0.3.0a1` contained a broken package. Please take a look on `0.3.0a2` if you like to test it in the wild (:

This release is specifically focused on adding v2 primitives. Pydantic v1 was supported by a trickery around passed (or annotated) schema, wrapping it into intermediary RootModel to support both pydantic models and most of arbitrary annotations.

With v2, pydantic now contains the primitive -- `TypeAdapter` -- which is well designed for this particular machinery.

There's one remaining primitive is to be migrated prior final 0.3.0 -- OpenAPI `AutoSchema` generator, but since this library is already not super-sticky to the OpenAPI standard, I decided that alpha release could be rolled out without it.

Compatibility layer
To support both Pydantic v1 and v2, which might be useful during migration step, I added an indirection level during the import step.
`0.3.0` contains implementations for both versions, with changes in v1 only required to make this compatibility layer to operate, with all behaviour remaining as in `0.2.11`.

Lazy schema evaluation
In `0.2.*` versions, exact schema resolution had been done in three stages:
1. First, the field tried to resolve the passed schema during field descriptor creation.
2. If it's failed, the next attempt had been performed during Django model class preparation, particularly in `contribute_to_class` method.
3. If even step 2 had failed (because of forward references might be still unresolvable at this stage), then the schema evaluation had to be postponed until the first attempt to access the field on model instance (either instance creation, field assignment or so).

In this update, I decided that evaluation logic should be as simple as possible, thus keeping only stage 3, and removing all the dirty logic that supported the machinery around 1 and 2 stages.
To mitigate possible schema evaluation errors, which may appear only in runtime, the field now performs a few checks that are being performed by Django during app development lifecycle:
- `manage.py check`
- `manage.py runserver`
- `manage.py makemigrations`
- `manage.py migrate`
- and so on...

This check is relied on the same mechanics that you might see in plain `JSONField`, complaining on passing mutable structures itself, instead of callables (Django's `field.E010` warning).

Additional integrity checks
Along with the schema evaluation check, the field now performes a few others, to make sure of its integrity:
- `pydantic.E001` (a check from the section above). The schema cannot be resolved. It is most likely a programmatic error -- forward references cannot be resolved in the Django model's execution context.
- `pydantic.E002`. The field's `default=` value cannot be serialized by the specified schema. This may lead to runtime errors during model `.save()` or `.objects.create(...)` methods.
- `pydantic.E003`. If the field contains `include=` or `exclude=` export arguments, there could be a situation that value, written in the database, could not be restored back to python from its serialized form. This check tries to pass the specified default value (or the one that could be inferred directly from the schema, if `default=` is missing), through the whole transformation cycle, yielding a warning if the value could not be transformed back to python.

Additionally, `JSONField`'s `field.E010` warning is suppressed, as it is meaningless due to the nature of field transformations -- we're always getting a new value, not reusing the one passed to `default=` argument.


**Full Changelog**: https://github.com/surenkov/django-pydantic-field/compare/v0.2.11...v0.3.0a1

0.2.14

What's Changed
* Backport django.core.serializers support by surenkov in https://github.com/surenkov/django-pydantic-field/pull/42


**Full Changelog**: https://github.com/surenkov/django-pydantic-field/compare/v0.2.13...v0.2.14

0.2.13

What's Changed
* Add `py.typed` marker by surenkov in https://github.com/surenkov/django-pydantic-field/pull/40


**Full Changelog**: https://github.com/surenkov/django-pydantic-field/compare/v0.2.12...v0.2.13

0.2.12

What's Changed
* Declare Django 5.0 support by surenkov in https://github.com/surenkov/django-pydantic-field/pull/37


**Full Changelog**: https://github.com/surenkov/django-pydantic-field/compare/v0.2.11...v0.2.12

0.2.11

What's Changed
* Preserve kwargs for json.dumps() by fdemmer in https://github.com/surenkov/django-pydantic-field/pull/30
* Support nested generic containers in schemas by geigerzaehler in https://github.com/surenkov/django-pydantic-field/pull/32
* Fix equality check in GenericContainer by geigerzaehler in https://github.com/surenkov/django-pydantic-field/pull/33

New Contributors
* fdemmer made their first contribution in https://github.com/surenkov/django-pydantic-field/pull/30
* geigerzaehler made their first contribution in https://github.com/surenkov/django-pydantic-field/pull/32

**Full Changelog**: https://github.com/surenkov/django-pydantic-field/compare/v0.2.10...v0.2.11

0.2.10

What's Changed
* Raise ValidationError on form invalid JSON payload by surenkov in https://github.com/surenkov/django-pydantic-field/pull/29


**Full Changelog**: https://github.com/surenkov/django-pydantic-field/compare/v0.2.9...v0.2.10

Page 4 of 8

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.