perde 0.0.2

Creator: bigcodingguy24

Last updated:

Add to Cart

Description:

perde 0.0.2

perde: python-wrapped serde
Heavily under construction towards 0.1.0 🎅







Python wrapper around the powerful Rust serialization framework.

Serialization & deserialization of python data structures.
Supports various types including dataclasses, generic types, enum and common built-in types.
Supports various serialization formats. By design, perde can support as many format as serde can.
Provides string case conversion of field names, skipping serialization/deserialization options, structure flattening.
Precise type checking based on type hints.
Very fast.


Install
pip install perde

Usage
>>> import perde

Assume you have a dataclass,
>>> @dataclass
... class A:
... a: int
... b: str

To serialize class A to JSON,
>>> perde.json.dumps(A(a=10, b='x'))
'{"a":10,"b":"x"}'

To deserialize JSON to class A,
>>> perde.json.loads_as(A, '{"a":10,"b":"x"}')
A(a=10, b='x')

To deserialize JSON to a dictionary,
>>> perde.json.loads('{"a":10,"b":"x"}')
{'a': 10, 'b': 'x'}

More formats are supported.
>>> perde.yaml.dumps(A(10, "x"))
'---\na: 10\nb: x'
>>> perde.yaml.loads_as(A, '---\na: 10\nb: x')
A(a=10, b='x')
>>> perde.msgpack.dumps(A(10, "x"))
b'\x82\xa1a\n\xa1b\xa1x'
>>> perde.msgpack.loads_as(A, b'\x82\xa1a\n\xa1b\xa1x')
A(a=10, b='x')

Supported formats

JSON (perde.json)
YAML (perde.yaml)
MessagePack (perde.msgpack)
TOML (perde.toml)
CBOR
Pickle
RON
BSON
Avro
JSON5
Postcard
URL
Environment variables
AWS Parameter Store
S-expressions
D-Bus
FlexBuffer
XML

Supported types

dataclass
Primitive types

int
str
float
bool
bytes
bytearray


Generic types

dict /typing.Dict
list / typing.List
set / typing.Set
frozenset / typing.FrozenSet
tuple / typing.Tuple
typing.Optional
typing.Union
typing.Any


Enum types

Enum
IntEnum
Flag
IntFlag


More built-in types

datetime.datetime
datetime.date
datetime.time
decimal.Decimal
uuid.UUID



Attributes
Attributes allow to modify the way of serialization/deserialization.
For example, to serialize/deserialize the field names as camelCase,
>>> @perde.attr(rename_all="camelCase")
... @dataclass
... class A:
... foo_bar: int
... bar_bar: int

>>> perde.json.dumps(A(foo_bar=1, bar_bar=2))
'{"fooBar":1,"barBar":2}'
>>> perde.json.loads_as(A, '{"fooBar":1,"barBar":2}')
A(foo_bar=1, bar_bar=2)

See the book for more details.
Benchmark
JSON

YAML

TOML

MessagePack

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.