summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Nezbeda <hn@nezhar.com>2021-06-25 08:41:19 +0200
committerHarald Nezbeda <hn@nezhar.com>2021-07-20 17:08:47 +0200
commitdf1953ff50c16d7bad396b4e38677bbc0502c182 (patch)
tree72f22f9c2a564a585c42ba1fda31b399eb8e0361
parentf8555cd4a7458b0dd8c39f869d18c1b3cc67e816 (diff)
downloadjsonschema-df1953ff50c16d7bad396b4e38677bbc0502c182.tar.gz
Julian/jsonschema#782: Load dependencies from legacy validators
-rw-r--r--jsonschema/_legacy_validators.py26
-rw-r--r--jsonschema/_validators.py24
-rw-r--r--jsonschema/validators.py6
3 files changed, 29 insertions, 27 deletions
diff --git a/jsonschema/_legacy_validators.py b/jsonschema/_legacy_validators.py
index b337151..8e46190 100644
--- a/jsonschema/_legacy_validators.py
+++ b/jsonschema/_legacy_validators.py
@@ -27,6 +27,32 @@ def dependencies_draft3(validator, dependencies, instance, schema):
yield ValidationError(message % (each, property))
+def dependencies_draft4_draft6_draft7(validator, dependencies, instance, schema):
+ """
+ Support for the ``dependencies`` validator from pre-draft 2019-09.
+
+ In later drafts, the validator was split into separate ``dependentRequired``
+ and ``dependentSchemas`` validators.
+ """
+ if not validator.is_type(instance, "object"):
+ return
+
+ for property, dependency in dependencies.items():
+ if property not in instance:
+ continue
+
+ if validator.is_type(dependency, "array"):
+ for each in dependency:
+ if each not in instance:
+ message = "%r is a dependency of %r"
+ yield ValidationError(message % (each, property))
+ else:
+ for error in validator.descend(
+ instance, dependency, schema_path=property,
+ ):
+ yield error
+
+
def disallow_draft3(validator, disallow, instance, schema):
for disallowed in _utils.ensure_list(disallow):
if validator.is_valid(instance, {"type": [disallowed]}):
diff --git a/jsonschema/_validators.py b/jsonschema/_validators.py
index 588d957..093aaba 100644
--- a/jsonschema/_validators.py
+++ b/jsonschema/_validators.py
@@ -301,30 +301,6 @@ def maxLength(validator, mL, instance, schema):
yield ValidationError("%r is too long" % (instance,))
-def dependencies(validator, dependencies, instance, schema):
- """
- The dependencies keyword has been deprecated since draft 2019-09 and has been split into dependentRequired
- and dependentSchemas.
- """
- if not validator.is_type(instance, "object"):
- return
-
- for property, dependency in dependencies.items():
- if property not in instance:
- continue
-
- if validator.is_type(dependency, "array"):
- for each in dependency:
- if each not in instance:
- message = "%r is a dependency of %r"
- yield ValidationError(message % (each, property))
- else:
- for error in validator.descend(
- instance, dependency, schema_path=property,
- ):
- yield error
-
-
def dependentRequired(validator, dependentRequired, instance, schema):
"""
Split from dependencies
diff --git a/jsonschema/validators.py b/jsonschema/validators.py
index 9acf65a..30f0116 100644
--- a/jsonschema/validators.py
+++ b/jsonschema/validators.py
@@ -326,7 +326,7 @@ Draft4Validator = create(
u"additionalProperties": _validators.additionalProperties,
u"allOf": _validators.allOf,
u"anyOf": _validators.anyOf,
- u"dependencies": _validators.dependencies,
+ u"dependencies": _legacy_validators.dependencies_draft4_draft6_draft7,
u"enum": _validators.enum,
u"format": _validators.format,
u"items": _legacy_validators.items_draft3_draft4,
@@ -363,7 +363,7 @@ Draft6Validator = create(
u"anyOf": _validators.anyOf,
u"const": _validators.const,
u"contains": _legacy_validators.contains_draft6_draft7,
- u"dependencies": _validators.dependencies,
+ u"dependencies": _legacy_validators.dependencies_draft4_draft6_draft7,
u"enum": _validators.enum,
u"exclusiveMaximum": _validators.exclusiveMaximum,
u"exclusiveMinimum": _validators.exclusiveMinimum,
@@ -402,7 +402,7 @@ Draft7Validator = create(
u"anyOf": _validators.anyOf,
u"const": _validators.const,
u"contains": _legacy_validators.contains_draft6_draft7,
- u"dependencies": _validators.dependencies,
+ u"dependencies": _legacy_validators.dependencies_draft4_draft6_draft7,
u"enum": _validators.enum,
u"exclusiveMaximum": _validators.exclusiveMaximum,
u"exclusiveMinimum": _validators.exclusiveMinimum,