Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Dictionary to Colander schema conversion library

Project Description

Convert python dict (YAML, JSON) to colander schema.

Colander is library, which enables you to validate and convert YAML, JSON and HTML form data. Colander schema as it is could be defined only in Python declaratively for example like this:

import colander

class Person(colander.MappingSchema):
    name = colander.SchemaNode(colander.String())
    age = colander.SchemaNode(colander.Int(),
                              validator=colander.Range(0, 200))

    class phones(colander.SequenceSchema):

        class phone(colander.MappingSchema):
            location = colander.SchemaNode(colander.String(),
                                 validator=colander.OneOf(['home', 'work']))
            number = colander.SchemaNode(colander.String())

With dict2colander you can define the same colander schema in dictionary and convert it to colader.MappingSchema object.


You can install dict2colander from Python Package Index like this:

pip install dict2colander


from dict2colander import dict2colander

schema_dict = {
    'type': 'Mapping',
    'name': 'person',
    'subnodes': [
        {'type': 'String', 'name': 'name'},

        {'type': 'Integer', 'name': 'age',
            {'Range': {'args': ('0', '200')}}},

        {'type': 'Sequence',
         'name': 'phones',
         'subnodes': [

             {'type': 'Mapping', 'name': 'phone',
              'subnodes': [

                  {'type': 'String', 'name': 'location',
                     {'OneOf': {'args': (['home', 'work'],)}}},

                  {'type': 'String', 'name': 'number'}


schema = dict2colander(schema_dict)
data = {
         'name': 'keith',
         'age': '20',
         'friends':[('1', 'jim'),('2', 'bob'), ('3', 'joe'), ('4', 'fred')],
         'phones':[{'location':'home', 'number':'555-1212'},
                   {'location':'work', 'number':'555-8989'},],

serialized_data = schema.deserialize(data)
print serialized_data

Dict2colander is intended to make possible to read colander schemas from YAML or JSON format. So here is schema from previous example written in YAML:

name: person
type: Mapping

    - name: name
      type: String

    - name: age
      type: Integer
            args: ['0', '200']

    - name: phones
      type: Sequence
        - name: phone
          type: Mapping
            - name: location
              type: String
                    args: [[home, work]]

            - name: number
              type: String

Note that Range validator has arguments defined as Strings not Integers although that field age is of type Integer.

Here are data to deserialize in YAML format from first example:

name: keith
age: 20
    - [1, jim]
    - [2, bob]
    - [3, joe]
    - [4, fred]

    - location: home
      number: 555-1212

    - location: work
      number: 555-8989

Here is example how YAML data are deserialized with schema defined in YAML document.

import yaml
import dict2colander

def deserialize(yaml_doc, yaml_schema):
    mapping_schema = dict2colander.dict2colander(yaml_schema)
    return mapping_schema.deserialize(yaml_doc)

f = open('doc.yaml')
doc = yaml.load(f)

f = open('schema.yaml')
schema = yaml.load(f)

dict_doc = deserialize(doc, schema)
print dict_doc

Release History

This version
History Node


History Node


Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(7.4 kB) Copy SHA256 Hash SHA256
Source None Feb 21, 2014

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Kabu Creative Kabu Creative UX & Design Google Google Cloud Servers Fastly Fastly CDN StatusPage StatusPage Statuspage DigiCert DigiCert EV Certificate