{ D }
V3.2.0

{ Dictify }

Schema and data validation for Python

Github

{ dictify } is a python library to define data schema and validation with simple and flexible syntax for documents data type such as JSON and Python dict object.

! New in V3.2.0 Model.dict() Return data as native dict and list
! New in V3.1.0 strict mode post validation

Get it


$ pip install dictify

Schema definition


Let's start with an example note data:

{
    "title": "Dictify",
    "content": "dictify is easy",
    "timestamp": "2021-06-13T05:13:45.326869"
}

The schema condition should be like:

title

  1. Required field
  2. Must be str instance
  3. Length is <= 300

content

  1. Must be str instance

timestamp

  1. Required field
  2. Default to datetime on creation in ISO format string
  3. Must be a valid ISO datetime string
from datetime import datetime
from dictify import Model, Field

class Note(Model):
    title = Field(required=True)\
        .instance(str)\
        .verify(lambda value: len(value) <= 300) # [1]

    content = Field().instance(str)

    timestamp = Field(
            required=True,
            default=lambda: datetime.utcnow().isoformat())\
        .verify(lambda value: datetime.fromisoformat(value))

[1] Field validations can be chained.

Create data instance with defined schema.


note = Note({'title': 'Dictify', 'content': 'dictify is easy'})

Use it like dict instance with schema ;)

Worry free, invalid data can't be assigned at anytime.

# `note` can be used like a dict object.
note.update({"content": "Updated content"})
note["content"] = "Updated again"

# Code below will raise `Model.Error`.
note.update({'title': 0})
note['title'] = 0

Note : Use try..except to catch errors if needed.

Convert data to native dict or JSON


import json

note_dict = dict(note) # Convert to python built-in `dict`
note_json = json.dumps(note)  # Convert to JSON string