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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file apimodels-0.0.1.tar.gz.
File metadata
- Download URL: apimodels-0.0.1.tar.gz
- Upload date:
- Size: 21.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2731bacc5ac2c8de6d8cf76fb03628856371295ceb7fcdec6fa8b0e7644461ec
|
|
| MD5 |
9dbcccde3158babb41cb2245051ae218
|
|
| BLAKE2b-256 |
b15aa41a5851a0047422eb48b84fc6d3068880bf10fcf51437cae366395ebf97
|
File details
Details for the file apimodels-0.0.1-py3-none-any.whl.
File metadata
- Download URL: apimodels-0.0.1-py3-none-any.whl
- Upload date:
- Size: 24.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce01ebfb66eacb1e0017b146838e8c49837334c359e3c23d8e84c00d2b684524
|
|
| MD5 |
4e83ff0b4657eeb1927616c1d4d5f5c4
|
|
| BLAKE2b-256 |
9b0089f89ba81fb1448a6f3d8bb0efe85458b7a19ef34a9b410aa2b3344f3f2e
|