Skip to main content

declaraive de/serialization of python structures

Project description

Objective is a de/serialization tool with following features:

  • declarative definition of objectives.

  • reuse definitions by inheritance.

  • optional validation.

Usage

Simple mapping and validation

import objective
import datetime


now = datetime.datetime(2001, 9, 11)


class UserObjective(objective.Mapping):

    name = objective.Item(objective.Unicode, missing=objective.Ignore)
    email = objective.Item(objective.Unicode, validator=objective.Email())
    password = objective.Item(objective.Unicode)
    since = objective.Item(objective.UtcDateTime, missing=now)


serialized = {
    'email': 'foo@example.com',
    'password': 'foobar'
}


deserialized = UserObjective.deserialize(serialized)


assert deserialized == {
    'password': u'foobar',
    'email': u'foo@example.com',
    'since': datetime.datetime(2001, 9, 11, 0, 0)
}


bad_serialized = {
    'name': 'foobar'
}


try:
    deserialized = UserObjective().deserialize(bad_serialized)

except objective.Invalid as e:

    assert isinstance(e, objective.exc.InvalidChildren)
    assert {(x.node.__name__, x.__class__, x.value) for x in e.children} == {
        ('password', objective.exc.MissingValue, objective.values.Undefined),
        ('email', objective.exc.InvalidValue, 'baz')
    }

Mapping complex structures

import objective


class ProductRequestObjective(objective.BunchMapping):
    @objective.Item()
    class body(objective.Mapping):
        name = objective.Item(objective.Unicode)
        root = objective.Item(objective.Unicode)

        @objective.Item()
        class semantics(objective.List):
            items = objective.Item(objective.Unicode)

    @objective.Item()
    class match(objective.Mapping):
        _id = objective.Item(objective.Field)

Issues, thoughts, ideas

objective is far from complete. There are tons of possible validators I can imagine.

I tried my best (mostly in terms of time) to test.

If you find bugs or you have a great idea, I am totally open to implement it.

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

objective-0.0.5.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

objective-0.0.5-py2.py3-none-any.whl (8.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file objective-0.0.5.tar.gz.

File metadata

  • Download URL: objective-0.0.5.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for objective-0.0.5.tar.gz
Algorithm Hash digest
SHA256 2f5e8c3f11697b74b1de456ca23def3465eb76502373cfc0157f770ca711f732
MD5 9c49c6b3e1884ed9408137b9237b0ca0
BLAKE2b-256 dbcf46d49ad1601daf8752eabdad77dc7d5a9b8b341718135ea922425edfd9cb

See more details on using hashes here.

File details

Details for the file objective-0.0.5-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for objective-0.0.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 096005944fdef29502aa2801fc70e675fa04a9c6c06f0d7d6cbe9639a001883d
MD5 b2e9a836ab0b57b61f3de79a8556920d
BLAKE2b-256 e9018507394efb9ed9b9e6341543cc49b6ee048cfbb88f9422e20ee7da5786f9

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