Skip to main content

Validate Python dictionaries like JSON schema

Project description

Latest PyPI version Documentation Status License Build status Coverage

logo

A schemadict is a regular Python dictionary which specifies the type and format of values for some given key. To check if a test dictionary is conform with the expected schema, schemadict provides the validate() method. If the test dictionary is ill-defined, an error will be thrown, otherwise None is returned.

Examples

Basic usage

>>> from schemadict import schemadict

>>> schema = schemadict({
...     'name': {
...         'type': str,
...         'min_len': 3,
...         'max_len': 12,
...     },
...     'age': {
...         'type': int,
...         '>=': 0,
...         '<': 150,
...     },
... })
>>>
>>> testdict = {'name': 'Neil', 'age': 55}
>>> schema.validate(testdict)
>>>

>>> testdict = {'name': 'Neil', 'age': -12}
>>> schema.validate(testdict)
Traceback (most recent call last):
    ...
ValueError: 'age' too small: expected >= 0, but was -12
>>>

>>> testdict = {'name': 'Neil', 'age': '55'}
>>> schema.validate(testdict)
Traceback (most recent call last):
    ...
TypeError: unexpected type for 'age': expected <class 'int'>, but was <class 'str'>
>>>

Nested schemadict

>>> schema_city = schemadict({
...     'name': {
...         'type': str
...     },
...     'population': {
...         'type': int,
...         '>=': 0,
...     },
... })
>>>
>>> schema_country = schemadict({
...     'name': {'type': str},
...     'cities': {
...         'type': list,
...         'item_type': dict,
...         'item_schema': schema_city,
...     },
... })
>>>
>>> test_country = {
...     'name': 'Neverland',
...     'cities': [
...         {'name': 'Faketown', 'population': 3},
...         {'name': 'Evergreen', 'population': True},
...     ],
... }
>>>
>>> schema_country.validate(test_country)
Traceback (most recent call last):
    ...
TypeError: unexpected type for 'population': expected <class 'int'>, but was <class 'bool'>
>>>

Custom validation functions

TODO

Full documentation: https://schemadict.readthedocs.io/

Features

Schemadicts supports

  • Built-in support for Python’s primitive types

  • Specification of required and optional keys

  • Validation of nested schemas

Features currently in development

  • Adding custom validator functions

  • Metaschema validation

  • Validation of subschemas in list or tuples

  • Regex support for strings

  • Lazy validation and summary of all errors

  • Allow schema variations: schmea 1 OR schema 2

  • Add support for validation of type number.Number

Installation

Schemadict is available on PyPI and may simply be installed with

pip install schemadict

Idea

Schemadict is loosely inspired by JSON schema and jsonschema, a JSON schema validator for Python.

License

License: Apache-2.0

Project details


Download files

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

Source Distribution

schemadict-0.0.5.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

schemadict-0.0.5-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file schemadict-0.0.5.tar.gz.

File metadata

  • Download URL: schemadict-0.0.5.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.9

File hashes

Hashes for schemadict-0.0.5.tar.gz
Algorithm Hash digest
SHA256 57c08b38f1aa4f3baa8421f492f61aaac1afd58c97e8aa489523d37f5c408efe
MD5 5347d133a1fffe59c9c42f131cb82109
BLAKE2b-256 ccb7af6c08e11fa5c9b88df110b4af9cbcf56b10d49b1265949cbba3017790bf

See more details on using hashes here.

Provenance

File details

Details for the file schemadict-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: schemadict-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.9

File hashes

Hashes for schemadict-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 88b1a075f8fcb72e389c80e145040cb3d78b7356b0a1d7eeaa6eb5ab38838f5f
MD5 dd54a6c051c217856ffdf176c3af8cf1
BLAKE2b-256 572d6cf2ca7b7b6d39057c5d6eea394c357b4aa2da1bca8580a6e702d1417013

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page