from cerberus import Validator AMOUNT_AND_UNITS_SCHEMA = { 'qty': { 'oneof': [ { 'type': 'integer', 'min': 1, 'required': True, }, { 'type': 'dict', 'schema': { 'num': { 'type': 'integer', 'min': 1, 'required': True, }, 'den': { 'type': 'integer', 'min': 1, 'required': True, }, }, }, ], 'required': True, }, 'units': { 'type': 'string', 'required': True, 'empty': False, }, } TOKEN_LIST_SCHEMA = { 'tokens': { 'type': 'list', 'schema': { 'type': 'dict', 'schema': { 'measurement': { 'type': 'dict', 'schema': AMOUNT_AND_UNITS_SCHEMA, }, }, }, }, } v = Validator(TOKEN_LIST_SCHEMA) document = { 'tokens': [ { 'measurement': { 'qty': { 'num': 'THIS WILL FAIL!', 'den': 1, }, 'units': 'lbs', }, }, ], } result = v.validate(document) if result: print("Document validated successfully!") else: print(v.errors)