Skip to main content

Fast and flexible object mapping (serialization, marshalling)

Project description

.. sourcecode :: python

Lion is a very flexible yet fast library for mapping objects to
dictionaries. It uses a declarative API and supports a query language
similar to GraphQL. Unlike other serialization libraries it also
allows to skip entire fields instead of having a ``null`` value
in the dictionary.

It is inspired by libraries like serpy_, marshmallow_,
`Django REST Framework`_ and Kim_.

Example::

import lion

class UserMapper(lion.Mapper):
id = lion.UUIDField()
email = lion.StrField(condition=lion.skip_empty)
first_name = lion.StrField()
last_name = lion.StrField()

user = User(
id=UUID('ad94d0e8-2526-4d9b-ad76-0fbffcf41033'),
email='john.doe@example.com',
first_name='John',
last_name='Doe'
)

# Dump all fields to a dictionary
assert UserMapper().dump(user) == {
'id': 'ad94d0e8-2526-4d9b-ad76-0fbffcf41033',
'email': 'john.doe@example.com',
'first_name': 'John',
'last_name': 'Doe'
}

# Dump a subset of fields
assert UserMapper('{id,email}').dump(user) == {
'id': 'ad94d0e8-2526-4d9b-ad76-0fbffcf41033',
'email': 'john.doe@example.com'
}

The query language also supports subfields::

UserMapper('{id,email,groups{id,name}}).dump(user)

The performance is somewhat slower than serpy_ but still far ahead of
marshmallow_ and `Django REST Framework`_

Right now only ``dumping`` (aka. serialization, marshalling) is supported
but future versions will also introduce ``loading`` (aka. deserialization,
unmarshalling) of data.

.. _serpy: https://pypi-hypernode.com/pypi/serpy
.. _marshmallow: https://pypi-hypernode.com/pypi/marshmallow/
.. _Kim: https://pypi-hypernode.com/pypi/py-kim/1.2.0
.. _`Django REST Framework`: https://pypi-hypernode.com/pypi/djangorestframework

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

lion-0.1.1.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

lion-0.1.1-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file lion-0.1.1.tar.gz.

File metadata

  • Download URL: lion-0.1.1.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for lion-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4af11aa20f5cc38583ac5e8e29f9b488a14a64ddd16f79b1e072f0a6bd32d5dc
MD5 e58604eef7e8a0669610aff158385858
BLAKE2b-256 de11dd92062c38cdbd7a61c589f8945e7d66e820043857276259ec1502fd2926

See more details on using hashes here.

File details

Details for the file lion-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for lion-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3a1a9f9d86e0ba54c6870f092db876fe7ccd9fb80c779e90919ea64de49fbd46
MD5 a17e81d55a42b15723daafcad4118ec5
BLAKE2b-256 2eb45accf4b286bf4b17e9c7f79d9a79121dc2859e6483c05d6271805eb4f723

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