Ciri¶
Ciri helps you build schema definitions for your application; giving you a foundation to perform validation, serialization and encoding.
import datetime
from ciri import fields, Schema, ValidationError
class Actor(Schema):
first_name = fields.String()
last_name = fields.String()
class Movie(Schema):
title = fields.String()
released = fields.Date()
cast = fields.List(Actor())
movie = Movie()
output = movie.serialize({'title': 'Good Will Hunting',
'released': datetime.date(1998, 1, 9),
'cast': [
{'first_name': 'Matt', 'last_name': 'Damon'},
{'first_name': 'Ben', 'last_name': 'Affleck'},
{'first_name': 'Robin', 'last_name': 'Williams'}
]})
# output:
# {'cast': [{'last_name': 'Damon', 'first_name': 'Matt'},
# {'last_name': 'Affleck', 'first_name': 'Ben'},
# {'last_name': 'Williams', 'first_name': 'Robin'}],
# 'released': '1998-01-09',
# 'title': 'Good Will Hunting'}
Features¶
- Python 3/2 support
- Serialize data to basic Python types
- Deserialize data back to schema objects
- Schema encoding
- Polymorphic schemas
- Composable Fields
- Controllable error handling
- Pre/post processors available on fields
- Simple API
What makes Ciri different?¶
Ciri was built with a focus on ease of use, a cogent api, and faster execution.
Indices and tables¶
Testing
from ciri import fields, Schema
from ciri.exception import ValidationError
class Person(Schema):
name = fields.String()
age = fields.Integer()
class Parent(Person):
child = fields.Schema(Person)
# Create an instance of a child and a father
father = Parent(name='Jack', age=52,
child=Person(name='Sarah', age=17))
# Serialize the Parent
try:
serialized = father.serialize()
except ValidationError:
# the validate method is called by default when serializing
errors = father.errors
assert serialized == {'name': 'Jack', 'age': 52, 'child': {'name': 'Sarah', 'age': 17}}