""" A minimal jsonschema validator. Supports only a tiny subset of jsonschema. """ from six import string_types class ValidationError(Exception): pass def validate(obj, schema, obj_name="value"): if schema.get("type") == "string": if not isinstance(obj, string_types): raise ValidationError("%s is not a string" % obj_name) elif schema.get("type") == "number": if not isinstance(obj, int): raise ValidationError("%s is not a number" % obj_name) if "minimum" in schema and obj < schema["minimum"]: raise ValidationError("%s is too small" % obj_name) if "maximum" in schema and obj > schema["maximum"]: raise ValidationError("%s is too large" % obj_name) elif schema.get("type") == "array": if not isinstance(obj, list): raise ValidationError("%s is not an array" % obj_name) for v in obj: validate(v, schema["items"], "an item in '%s'" % obj_name) elif schema.get("type") == "object": if not isinstance(obj, dict): raise ValidationError("%s is not an object" % obj_name) for key, spec in schema["properties"].items(): if key in obj: validate(obj[key], spec, obj_name=key) if "enum" in schema: if obj not in schema["enum"]: raise ValidationError("%s has unexpected value" % obj_name)