Pre-release
This release is a pre-release and may not be stable for production use.
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.
TL;DR
Install
pip install adaptix==3.0.0b12
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,pydanticandmsgspec. - 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_casetocamelCase). - 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.
Release files for adaptix 3.0.0b12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| adaptix-3.0.0b12.tar.gz | 128.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adaptix-3.0.0b12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 317.3 kB
Release files / adaptix-3.0.0b12.tar.gz
| Download URL | adaptix-3.0.0b12.tar.gz |
|---|---|
| Size | 128.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
906053a39ff509f0aa4ca9faa07dffa205bd90fa41d9774cd849d3454565b0ea
|
|
BLAKE2b-256 checksum How to use checksums |
5d82aa17eb2968cf7c78caf4915ca62397214f196dc1bef07e4d81bfb4c4abc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Release files / adaptix-3.0.0b12-py3-none-any.whl
| Download URL | adaptix-3.0.0b12-py3-none-any.whl |
|---|---|
| Size | 188.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8156f0549b96fcd193d13efca7bfbda39b3d6389085556d930e204c09f9ae6ed
|
|
BLAKE2b-256 checksum How to use checksums |
1166abcca849b17e4a3adf5116e58c51471f37264a190cee2c67f1ba57782a7f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|