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 details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

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

Hashes for apimodels-0.0.1.tar.gz
Algorithm Hash digest
SHA256 2731bacc5ac2c8de6d8cf76fb03628856371295ceb7fcdec6fa8b0e7644461ec
MD5 9dbcccde3158babb41cb2245051ae218
BLAKE2b-256 b15aa41a5851a0047422eb48b84fc6d3068880bf10fcf51437cae366395ebf97

See more details on using hashes here.

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

Hashes for apimodels-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ce01ebfb66eacb1e0017b146838e8c49837334c359e3c23d8e84c00d2b684524
MD5 4e83ff0b4657eeb1927616c1d4d5f5c4
BLAKE2b-256 9b0089f89ba81fb1448a6f3d8bb0efe85458b7a19ef34a9b410aa2b3344f3f2e

See more details on using hashes here.

Supported by

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