Skip to content

Latest commit

 

History

History
87 lines (60 loc) · 2.14 KB

README.rst

File metadata and controls

87 lines (60 loc) · 2.14 KB

lollipop

Build Status Documentation Status

Data serialization and validation library

from lollipop.types import Object, String, Date
from lollipop.validators import Length
from collections import namedtuple
from datetime import date

Person = namedtuple('Person', ['name'])
Book = namedtuple('Book', ['title', 'publish_date', 'author'])

PersonType = Object({
    'name': String(validate=Length(min=1)),
}, constructor=Person)

BookType = Object({
    'title': String(),
    'pubish_date': Date(),
    'author': PersonType,
}, constructor=Book)

BookType.dump(
    Book(title='Moby-Dick',
         publish_date=date(1854, 11, 14),
         author=Person(name='Herman Melville'))
)
# => {'title': 'Moby-Dick',
#     'publish_date': '1854-11-14',
#     'author': {
#         'name': 'Herman Melville'
#     }}

BookType.load({'title': 'Moby-Dick', 'publish_date': '1854-11-14',
               'author': {'name': 'Herman Melville'}})
# => Book(title='Moby-Dick', publish_date=date(1854, 11, 14),
#         author=User(name='Herman Melville'))

BookType.validate({'title': 'Moby-Dick', 'author': {'name': ''}})
# => {'author': {'name': 'Length should be at least 1'},
#     'publish_date': 'Value is required'}

Installation

$ pip install lollipop

Documentation

Documentation is available at http://lollipop.readthedocs.io/ .

Requirements

  • Python >= 2.6 or <= 3.5

Project Links

License

MIT licensed. See the bundled LICENSE file for more details.