Skip to main content

An extremely flexible and configurable data model conversion library

Project description

adaptix logo

PyPI version downloads versions license

An extremely flexible and configurable data model conversion library.

[!IMPORTANT] Adaptix is ready for production! The beta version only means there may be some backward incompatible changes, so you need to pin a specific version.

📚 Documentation

TL;DR

Install

pip install adaptix==3.0.0b8

Use for model loading and dumping.

from dataclasses import dataclass

from adaptix import Retort


@dataclass
class Book:
    title: str
    price: int


data = {
    "title": "Fahrenheit 451",
    "price": 100,
}

# Retort is meant to be global constant or just one-time created
retort = Retort()

book = retort.load(data, Book)
assert book == Book(title="Fahrenheit 451", price=100)
assert retort.dump(book) == data

Use for converting one model to another.

from dataclasses import dataclass

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

from adaptix.conversion import get_converter


class Base(DeclarativeBase):
    pass


class Book(Base):
    __tablename__ = 'books'

    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    price: Mapped[int]


@dataclass
class BookDTO:
    id: int
    title: str
    price: int


convert_book_to_dto = get_converter(Book, BookDTO)

assert (
    convert_book_to_dto(Book(id=183, title="Fahrenheit 451", price=100))
    ==
    BookDTO(id=183, title="Fahrenheit 451", price=100)
)

Use cases

  • Validation and transformation of received data for your API.
  • Conversion between data models and DTOs.
  • Config loading/dumping via codec that produces/takes dict.
  • Storing JSON in a database and representing it as a model inside the application code.
  • Creating API clients that convert a model to JSON sending to the server.
  • Persisting entities at cache storage.
  • Implementing fast and primitive ORM.

Advantages

  • Sane defaults for JSON processing, no configuration is needed for simple cases.
  • Separated model definition and rules of conversion that allow preserving SRP and have different representations for one model.
  • Speed. It is one of the fastest data parsing and serialization libraries.
  • There is no forced model representation, adaptix can adjust to your needs.
  • Support dozens of types, including different model kinds: @dataclass, TypedDict, NamedTuple, attrs, sqlalchemy and pydantic.
  • Working with self-referenced data types (such as linked lists or trees).
  • Saving path where an exception is raised (including unexpected errors).
  • Machine-readable errors that could be dumped.
  • Support for user-defined generic models.
  • Automatic name style conversion (e.g. snake_case to camelCase).
  • Predicate system that allows to concisely and precisely override some behavior.
  • Disabling additional checks to speed up data loading from trusted sources.
  • No auto casting by default. The loader does not try to guess value from plenty of input formats.

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

adaptix-3.0.0b8.tar.gz (121.0 kB view details)

Uploaded Source

Built Distribution

adaptix-3.0.0b8-py3-none-any.whl (162.4 kB view details)

Uploaded Python 3

File details

Details for the file adaptix-3.0.0b8.tar.gz.

File metadata

  • Download URL: adaptix-3.0.0b8.tar.gz
  • Upload date:
  • Size: 121.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for adaptix-3.0.0b8.tar.gz
Algorithm Hash digest
SHA256 dcde98ff7ce7dd7c99dcfeabbbbe22219deb463eba30861502e036c235c11c57
MD5 cff5b4f4f40a44032a1b531f43222d51
BLAKE2b-256 f7387e8298cd7397a2c0bdfc579c3924599b113c7dc6405900dc1aa448d2bd3f

See more details on using hashes here.

File details

Details for the file adaptix-3.0.0b8-py3-none-any.whl.

File metadata

  • Download URL: adaptix-3.0.0b8-py3-none-any.whl
  • Upload date:
  • Size: 162.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for adaptix-3.0.0b8-py3-none-any.whl
Algorithm Hash digest
SHA256 5e4426c33089636704d551339e1d4307afec48abf33f19639bee4411c2fde9b3
MD5 b7e942d34ca42a534de4f8e3f783cd56
BLAKE2b-256 e28930fd00434709e9ca8c091a0a0b95e1c9094a0408d8f85eebc19dc46e80ee

See more details on using hashes here.

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