Advanced converters for cattrs
Project description
cattrs-extras
This package contains advanced converter classes for cattrs, a great serialization library built around attrs.
Key features
- Support for additional types: Decimal, bool, datetime, date, timedelta
- Alternative structuring algorithm capable of handling complex Unions without registering additional hooks
- Human-readable exceptions on structuring failure
- Support for Tortoise ORM models serialization (including relations)
- Additional class and Tortoise field for reversed enumerations (serialized to member name instead of value)
Installation
DEV=0 PYTHON=python make install # remove PYTHON to use pyenv
make build
Usage
from enum import Enum
from decimal import Decimal
from datetime import datetime
from attr import dataclass
from cattrs_extras.converter import Converter
class Color(Enum):
RED = 'RED'
GREEN = 'GREEN'
@dataclass(kw_only=True)
class Apple:
weight: Decimal
color: Color
best_before: datetime
sweet: bool
converter = Converter()
raw_apple = {
'weight': '200.5',
'color': 'RED',
'best_before': '2020-04-02T12:00:00',
'sweet': 'true'
}
apple = converter.structure(raw_apple, Apple)
assert apple == Apple(weight=Decimal('200.5'), color=Color.RED, best_before=datetime(2020, 4, 2, 12, 0), sweet=True)
raw_apple = converter.unstructure(apple)
assert raw_apple == {'weight': '200.5', 'color': 'RED', 'best_before': 1585818000.0, 'sweet': True}
Tortoise ORM
Important note: Tortoise ORM have chosen pydantic as a serialization library so better to stick with it. However pydantic support is still WIP, you can check current status here.
from cattrs_extras.tortoise.converter import TortoiseConverter
from cattrs_extras.tortoise.model import Model
from tortoise import fields
# TODO: ReversedCharEnumField example
class AppleModel(Model):
id = fields.IntField(pk=True)
weight = fields.DecimalField(20, 10)
color = fields.CharEnumField(Color)
best_before = fields.DateField()
sweet = fields.BooleanField()
# NOTE: Replace with module name of your models
tortoise_converter = TortoiseConverter('cattrs_extras.tortoise.model')
apple_model = tortoise_converter.structure(raw_apple, AppleModel)
assert apple_model == AppleModel(weight=Decimal('200.5'), color=Color.RED, best_before=datetime(2020, 4, 2, 12, 0), sweet=True)
raw_apple = tortoise_converter.unstructure(apple_model)
assert raw_apple == {'id': None, 'weight': '200.5', 'color': 'RED', 'best_before': 1585774800.0, 'sweet': True}
Limitations
- PEP 563 – Postponed Evaluation of Annotations is not supported at the moment. Attempt to import
__future__.annotationsin module containing models will lead to exception. However you can still use strings as typehints. - Backward relations in Tortoise models are ignored during structuring even if fetched. Not sure if we should fix it.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cattrs-extras-0.2.0.tar.gz.
File metadata
- Download URL: cattrs-extras-0.2.0.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.10.1 Linux/5.15.10-arch1-1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05204f7b4ca9f9e74d0142b4e7853b6f9e7af7bf24fda7b322a7229116bfa0ea
|
|
| MD5 |
50765b0d117b425d2d44c90da886f03a
|
|
| BLAKE2b-256 |
ff8fdefa9bf67b4cf984aea99fa11f65be2777f25ff493a7d416f5979526413c
|
File details
Details for the file cattrs_extras-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cattrs_extras-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.10.1 Linux/5.15.10-arch1-1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffdb2a731c101fdda2381dcb5ea7cee8fb870409644c1c13eea49ad1cd577c22
|
|
| MD5 |
fb647a53b32b2f2c766f6bfdb61c5dba
|
|
| BLAKE2b-256 |
aee7f267681fd7d8717cd1814ec09f5508edc41728f5f503e3a40213519f9257
|