From ceb37aac7ea96fc90966441728bd035c04d8fdbf Mon Sep 17 00:00:00 2001 From: Julian Berman Date: Sun, 30 Sep 2018 09:47:31 -0400 Subject: If/Then/Else. --- jsonschema/_validators.py | 13 +++++++++++++ jsonschema/validators.py | 1 + 2 files changed, 14 insertions(+) diff --git a/jsonschema/_validators.py b/jsonschema/_validators.py index 2d6d2aa..1107586 100644 --- a/jsonschema/_validators.py +++ b/jsonschema/_validators.py @@ -529,3 +529,16 @@ def not_(validator, not_schema, instance, schema): yield ValidationError( "%r is not allowed for %r" % (not_schema, instance) ) + + +def if_(validator, if_schema, instance, schema): + # FIXME: paths + if validator.is_valid(instance, if_schema): + if u"then" in schema: + then = schema[u"then"] + for error in validator.descend(instance, then): + yield error + elif u"else" in schema: + else_ = schema[u"else"] + for error in validator.descend(instance, else_): + yield error diff --git a/jsonschema/validators.py b/jsonschema/validators.py index fd68a9f..fed56a2 100644 --- a/jsonschema/validators.py +++ b/jsonschema/validators.py @@ -513,6 +513,7 @@ Draft7Validator = create( u"exclusiveMaximum": _validators.exclusiveMaximum, u"exclusiveMinimum": _validators.exclusiveMinimum, u"format": _validators.format, + u"if": _validators.if_, u"items": _validators.items, u"maxItems": _validators.maxItems, u"maxLength": _validators.maxLength, -- cgit v1.2.1