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}}