base models, metadata, and how to dump them to json|yaml
Project description
Model-lib - pydantic base models with convenient dump methods
Model-lib tutorial: What classes to use as base classes, how to serialize them, and add metadata
- The models:
Event
andEntity
are subclassing pydantic.BaseModel - The only specific configuration are:
- Automatic registering for dumping
- Support different serializers for yaml/json/pretty_json
- use_enum_values
- +++
from datetime import datetime
from freezegun import freeze_time
from pydantic import Field
from model_lib import Entity, Event, dump, parse_model, dump_with_metadata
class Birthday(Event):
"""
>>> birthday = Birthday()
>>> birthday.date = datetime.utcnow()
Traceback (most recent call last):
...
TypeError: "Birthday" is immutable and does not support item assignment
"""
date: datetime = Field(default_factory=datetime.utcnow)
class Person(Entity):
"""
>>> person = Person(name="espen", age=99)
>>> person.age += 1 # mutable
>>> person.age
100
"""
name: str
age: int
_pretty_person = """{
"age": 99,
"name": "espen"
}"""
def test_show_dumping():
with freeze_time("2020-01-01"):
birthday = Birthday(date=datetime.utcnow())
# can dump non-primitives e.g., datetime
assert dump(birthday, "json") == '{"date":"2020-01-01T00:00:00"}'
person = Person(name="espen", age=99)
assert dump(person, "yaml") == "name: espen
age: 99
"
assert dump(person, "pretty_json") == _pretty_person
_metadata_dump = """model:
name: espen
age: 99
metadata:
model_name: Person
"""
def test_show_parsing(tmp_path):
path_json = tmp_path / "example.json"
path_json.write_text(_pretty_person)
person = Person(name="espen", age=99)
assert parse_model(path_json, t=Person) == person
assert dump_with_metadata(person, format="yaml") == _metadata_dump
path_yaml = tmp_path / "example.yaml"
path_yaml.write_text(_metadata_dump)
assert parse_model(path_yaml) == person # metadata is used to find the class
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 Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
File details
Details for the file model_lib-0.0.28a1-py3-none-any.whl
.
File metadata
- Download URL: model_lib-0.0.28a1-py3-none-any.whl
- Upload date:
- Size: 25.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7f9aacfe15e257ed06f8930940daf7bf3b6a195a2d297c8b202c0de3daed8c82 |
|
MD5 | 0ab324b1b9d303c68b52fb4b457aea9d |
|
BLAKE2b-256 | 638bf2bf03562e0dea1575f211a0ce10ccde52ef06cb1cd6b435d9c93db22d98 |