Skip to main content

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]

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.

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 files

Supported by

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