/dictify

Dictify : Documents schema and data validation

Primary LanguagePythonMIT LicenseMIT

{ Dictify }

Documents schema and data validation

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

Data assignment and validation


After schema definition, now we can use it to create Model instance with required data.

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

# `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