Models for modern JSON APIs.
Project description
APIModel
Advanced models for non-standard modern JSON APIs.
Documentation: https://apimodel.readthedocs.io/en/latest/
Source Code: https://github.com/thesadru/apimodel
Advanced models for non-standard modern JSON APIs. Supports extensive conversion and validation with several tools to help speed up development. Works with both synchronous and asynchronous models seamlessly. Fully tested and type-hinted.
Key Features
- Seamless data parsing through annotations.
- Supports extensive conversion and validation.
- Automatic code generation from json to speed up development.
- Inspired by pydantic to ensure familiarity.
- Localization support.
- Fully tested and type-hinted.
- No requirements.
Example
You can see more examples in the docs.
import typing
import datetime
import apimodel
class User(apimodel.APIModel):
id: int
username: str
profile: str
# UNIX or ISO parsing
created_at: datetime.datetime
@apimodel.validator()
def _complete_profile_url(self, profile: str) -> str:
"""Take the raw profile ID and turn it into a full url"""
return f"https://example.com/assets/profile/{profile}.png"
# inheritance
class Attendee(User):
status: typing.Literal["attending", "interested", "absent"] | None = None
@apimodel.root_validator()
def _parse_status(self, values: dict[str, typing.Any]) -> dict[str, typing.Any]:
"""Take the entire JSON and update it accordingly"""
# made for non-standard APIs
if "attending" in values:
values["status"] = "attending" if values["attending"] else "absent"
elif "interested" in values:
values["status"] = "interested" if values["interested"] else "absent"
# excess values get thrown away
return values
class Event(apimodel.APIModel):
# allow easily renaming fields
time: datetime.datetime = apimodel.Field(alias="happening_at")
# clean nested models
attendees: list[User]
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
apimodels-0.0.1.tar.gz
(21.9 kB
view hashes)
Built Distribution
apimodels-0.0.1-py3-none-any.whl
(24.5 kB
view hashes)
Close
Hashes for apimodels-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce01ebfb66eacb1e0017b146838e8c49837334c359e3c23d8e84c00d2b684524 |
|
MD5 | 4e83ff0b4657eeb1927616c1d4d5f5c4 |
|
BLAKE2b-256 | 9b0089f89ba81fb1448a6f3d8bb0efe85458b7a19ef34a9b410aa2b3344f3f2e |