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
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
objective-0.0.5.tar.gz
(7.3 kB
view details)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f5e8c3f11697b74b1de456ca23def3465eb76502373cfc0157f770ca711f732 |
|
MD5 | 9c49c6b3e1884ed9408137b9237b0ca0 |
|
BLAKE2b-256 | dbcf46d49ad1601daf8752eabdad77dc7d5a9b8b341718135ea922425edfd9cb |
File details
Details for the file objective-0.0.5-py2.py3-none-any.whl
.
File metadata
- Download URL: objective-0.0.5-py2.py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 096005944fdef29502aa2801fc70e675fa04a9c6c06f0d7d6cbe9639a001883d |
|
MD5 | b2e9a836ab0b57b61f3de79a8556920d |
|
BLAKE2b-256 | e9018507394efb9ed9b9e6341543cc49b6ee048cfbb88f9422e20ee7da5786f9 |