Adds some YAML functionality to the excellent `pydantic` library.
Project description
Pydantic-YAML
Pydantic-YAML adds YAML capabilities to Pydantic, which is an excellent Python library for data validation and settings management. If you aren't familiar with Pydantic, I would suggest you first check out their docs.
Documentation on ReadTheDocs.org
Basic Usage
from enum import Enum
from pydantic import BaseModel, validator
from pydantic_yaml import parse_yaml_raw_as, to_yaml_str
class MyEnum(str, Enum):
"""A custom enumeration that is YAML-safe."""
a = "a"
b = "b"
class InnerModel(BaseModel):
"""A normal pydantic model that can be used as an inner class."""
fld: float = 1.0
class MyModel(BaseModel):
"""Our custom Pydantic model."""
x: int = 1
e: MyEnum = MyEnum.a
m: InnerModel = InnerModel()
@validator("x")
def _chk_x(cls, v: int) -> int: # noqa
"""You can add your normal pydantic validators, like this one."""
assert v > 0
return v
m1 = MyModel(x=2, e="b", m=InnerModel(fld=1.5))
# This dumps to YAML and JSON respectively
yml = to_yaml_str(m1)
jsn = m1.json()
# This parses YAML as the MyModel type
m2 = parse_yaml_raw_as(MyModel, yml)
assert m1 == m2
# JSON is also valid YAML, so this works too
m3 = parse_yaml_raw_as(MyModel, jsn)
assert m1 == m3
Configuration
Currently we use the JSON dumping of Pydantic to perform most of the magic.
This uses the Config
inner class,
as in Pydantic:
class MyModel(BaseModel):
# ...
class Config:
# You can override these fields, which affect JSON and YAML:
json_dumps = my_custom_dumper
json_loads = lambda x: MyModel()
# As well as other Pydantic configuration:
allow_mutation = False
A separate configuration for YAML specifically will be added later.
# TODO
Breaking Changes for pydantic-yaml
V1
The API for pydantic-yaml
version 1.0.0 has been greatly simplified!
Mixin Class
This functionality has currently been removed!
YamlModel
and YamlModelMixin
base classes are no longer needed.
The plan is to re-add it before v1 fully releases,
to allow the .yaml()
or .parse_*()
methods.
However, this will be availble only for pydantic<2
.
Versioned Models
This functionality has been removed, as it's questionably useful for most users. There is an example in the docs that's available.
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
Built Distribution
Hashes for pydantic_yaml-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb552c199aa2e0af54d2445775fea11206b614043f58b5828e24c1a709404aa1 |
|
MD5 | 53127e2a93e0fe19eae6bdbf6275f9ec |
|
BLAKE2b-256 | e544facb9ef1dfc0d0e076745cede31c82202a53f3855407d972b5195cc7b270 |