A pydantic model subclass that implements Python's dictionary interface.
Project description
pydantic_dict
A pydantic
model subclass that implements Python's dictionary interface.
Example:
from pydantic_dict import BaseModelDict
class User(BaseModelDict):
id: int
name: str = "Jane Doe"
user = User(id=42)
user["session_id"] = "95607c42-250a-4913-9dfb-00eb6535e685"
assert user.session_id == "95607c42-250a-4913-9dfb-00eb6535e685"
assert user["session_id"] == "95607c42-250a-4913-9dfb-00eb6535e685"
user.pop("session_id")
assert "session_id" not in user
assert user.get("last_name", None) is None
user.update({"email": "jane.doe@email.com"})
print(user.json())
# >>> {"id": 42, "name": "Jane Doe", "email": "jane.doe@email.com"}
user.clear() # fields are NOT removed. only non-fields are removed
print(user.json())
# >>> {"id": 42, "name": "Jane Doe"}
user.setdefault("last_active", "2023-01-01T19:56:10Z")
del user["last_active"]
Unset
marker type
The Unset
marker type provides a way to "mark" that an optional model field
is by default not set and is not required to construct the model. This enables
more semantic usage of built-in dict methods like get()
and setdefault()
that can return or set a default value. Likewise, fields that are Unset
are
not considered to be members of a BaseModelDict
dictionary (e.g.
"unset_field" not in model_dict
) and are not included in __iter__()
,
keys()
, values()
, or len(model_dict)
. This feature is especially useful
when refactoring existing code to use pydantic.
Example:
from pydantic_dict import BaseModelDict, Unset
from typing import Optional
class User(BaseModelDict):
id: int
name: str = "Jane Doe"
email: Optional[str] = Unset
user = User(id=42)
assert "email" not in user
user["email"] # raises KeyError
assert len(user) == 2
assert set(user.keys()) == {"id", "name"}
user.setdefault("email", f"{user.id}@service.com") # returns `42@service.com`
assert "email" in user
Install
pip install pydantic_dict
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_dict-0.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1bf99ee97cd314e871f306b79e29de711a4897b34d9c8810c09081b9f9259c74 |
|
MD5 | 6d6ba24db633c2091b1f8579c02d8f6d |
|
BLAKE2b-256 | 52f3b2ec888024b29b923a3bf0d86c5a182687bb20712ce3b66149fbdfb94933 |