Skip to main content

Models for modern JSON APIs.

Project description

APIModel

Downloads PyPI package Last Commit Coverage Documentation

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


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)

Uploaded Source

Built Distribution

apimodels-0.0.1-py3-none-any.whl (24.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page