Create ASDF tags with pydantic models
Project description
asdf-pydantic
Create ASDF tags with pydantic models.
from asdf_pydantic import AsdfPydanticModel
class Rectangle(AsdfPydanticModel):
_tag = "asdf://asdf-pydantic/examples/tags/rectangle-1.0.0"
width: float
height: float
# After creating extension and install ...
af = asdf.AsdfFile()
af["rect"] = Rectangle(width=1, height=1)
#ASDF 1.0.0
#ASDF_STANDARD 1.5.0
%YAML 1.1
%TAG ! tag:stsci.edu:asdf/
--- !core/asdf-1.1.0
asdf_library: !core/software-1.0.0 {
author: The ASDF Developers,
homepage: 'http://github.com/asdf-format/asdf',
name: asdf,
version: 2.14.3}
history:
extensions:
- !core/extension_metadata-1.0.0
extension_class: asdf.extension.BuiltinExtension
software: !core/software-1.0.0 {
name: asdf,
version: 2.14.3}
- !core/extension_metadata-1.0.0 {
extension_class: mypackage.shapes.ShapesExtension,
extension_uri: 'asdf://asdf-pydantic/shapes/extensions/shapes-1.0.0'}
rect: !<asdf://asdf-pydantic/shapes/tags/rectangle-1.0.0> {
height: 1.0,
width: 1.0}
...
Features
- Create ASDF tag from your pydantic models with batteries (converters) included.
- Validates data models as you create them and not only when reading and writing ASDF files.
- Preserve Python types when deserializing ASDF files.
- All the cool things that comes with pydantic (e.g., JSON encoder, JSON schema, Pydantic types).
- Comes with ASDF schemas (TBD).
Installation
pip install asdf-pydantic
Usage
Define your data model with AsdfPydanticModel
. For pydantic fans, this has
all the features of pydantic's BaseModel.
# mypackage/shapes.py
from asdf_pydantic import AsdfPydanticModel
class Rectangle(AsdfPydanticModel):
_tag = "asdf://asdf-pydantic/examples/tags/rectangle-1.0.0"
width: float
height: float
Then create an extension with the converter included with asdf-pydantic:
# mypackage/extensions.py
from asdf.extension import Extension
from asdf_pydantic.converter import AsdfPydanticConverter
from mypackage.shapes import Rectangle
AsdfPydanticConverter.add_models(Rectangle)
class ShapesExtension(Extension):
extension_uri = "asdf://asdf-pydantic/examples/extensions/shapes-1.0.0"
converters = [AsdfPydanticConverter()]
tags = [*AsdfPydanticConverter().tags]
Install the extension either by entry point specification or add it to
asdf.get_config()
:
import asdf
from mypackage.extensions import ShapeExtension
asdf.get_config().add_extension(ShapesExtension())
af = asdf.AsdfFile()
af["rect"] = Rectangle(width=1, height=1)
with open("shapes.asdf", "wb") as fp:
af.write_to(fp)
:maxdepth: 1
model
autoapi
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
asdf_pydantic-2.0.0.dev0.tar.gz
(11.7 kB
view details)
Built Distribution
File details
Details for the file asdf_pydantic-2.0.0.dev0.tar.gz
.
File metadata
- Download URL: asdf_pydantic-2.0.0.dev0.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7cf0edd89bda9507db959850fb8f512e4f95d50dc5f6499464096e9f50ba782 |
|
MD5 | a964fa08a60bb15540b2ee6d64f63263 |
|
BLAKE2b-256 | 4010203be08bc4d691a6ba7ed3a6abd5fb8b4ef95a7fe4f71113a943652ec2f9 |
File details
Details for the file asdf_pydantic-2.0.0.dev0-py3-none-any.whl
.
File metadata
- Download URL: asdf_pydantic-2.0.0.dev0-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64ce26cb043bf7bb8a866d94a67194f7fc548931f31e91549c7b2085071d5f36 |
|
MD5 | 211d8137daa1179098c205e86f66bb10 |
|
BLAKE2b-256 | fb9819b72d7d2ec75d74f01c15a624edd64e8567f91f9bd5279b886047ce059b |