Skip to main content

Custom hamcrest matchers for json schema validation

Project description

json-schema-matchers

PyHamcrest matchers extension for json schema validation

The schema should be implemented following syntax of Draft-07 to 2019-09 version. Schema example:

single_user_schema = {
    "title": "Single User Info",
    "type": "object",
    "properties": {
        "first_name": {
            "type": "string",
            "minLength": 3
        },
        "last_name": {
            "type": "string",
            "minLength": 3
        },
        "phone_number": {
            "type": "number"
        }
    },
    "required": [
        "first_name",
        "last_name",
    ]
}

all_users_info_schema = {
    "title": "All Users Info",
    "type": "array",
    "items": single_user_schema
}

Then you can use matches_json_schema matcher with all hamcrest matchers:

from hamcrest import assert_that
from json_schema_matchers.common_matcher import matches_json_schema

users_list_json_obj = [
    {
        "first_name": 'John',
        "last_name": "Johnson",
        "phone_number": 123456789
    },
    {
        "first_name": 'Jim',
        "last_name": 'Jefferson'
    }
]

assert_that(users_list_json_obj, matches_json_schema(all_users_info_schema))

assert_that(users_list_json_obj[0], matches_json_schema(single_user_schema))

In case of validation fail the matcher will return all mismatches iteratively:

users_list_json_obj = [
    {
        "first_name": 'John',
        "last_name": "Johnson",
        "phone_number": '123456789'
    },
    {
        "first_name": None,
        "last_name": 'Je'
    }
]

assert_that(users_list_json_obj, matches_json_schema(all_users_info_schema))
AssertionError: 
Expected: 
     JSON object should match schema "All Users Info"
     but: 
     mismatches occurred: 

'123456789' is not of type 'number'

Failed validating 'type' in schema['items']['properties']['phone_number']:
    {'type': 'number'}

On instance[0]['phone_number']:
    '123456789'

------------
'Je' is too short

Failed validating 'minLength' in schema['items']['properties']['last_name']:
    {'minLength': 3, 'type': 'string'}

On instance[1]['last_name']:
    'Je'

------------
None is not of type 'string'

Failed validating 'type' in schema['items']['properties']['first_name']:
    {'minLength': 3, 'type': 'string'}

On instance[1]['first_name']:
    None

------------

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

json-schema-matchers-0.1.0.tar.gz (2.9 kB view details)

Uploaded Source

Built Distribution

json_schema_matchers-0.1.0-py3-none-any.whl (3.9 kB view details)

Uploaded Python 3

File details

Details for the file json-schema-matchers-0.1.0.tar.gz.

File metadata

  • Download URL: json-schema-matchers-0.1.0.tar.gz
  • Upload date:
  • Size: 2.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for json-schema-matchers-0.1.0.tar.gz
Algorithm Hash digest
SHA256 96d4b3afda1ef71943179620f5c229cdb4fa03598d7dded6ec9ed76ca5483ff6
MD5 0f84b6841ddcb648c6419a171e514350
BLAKE2b-256 d75b0b3e52d08125570d1dd59bf7ec02e9058d622d078e0e1770d49b7d82419f

See more details on using hashes here.

File details

Details for the file json_schema_matchers-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: json_schema_matchers-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 3.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for json_schema_matchers-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dec0c98ac3f6e2b0a56b9b9ecb787cce7555ec992657eca550df1cd083ce7461
MD5 a654219a5ed671ef942507b52e394491
BLAKE2b-256 d87d32a098fee7a405e8bc19f8f4df7438962e630210de703c22ffadfa431c9d

See more details on using hashes here.

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