summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2021-09-29 18:59:03 -0400
committerJulian Berman <Julian@GrayVines.com>2021-09-29 18:59:03 -0400
commit38b4c603a0f232ddbf94f9129263a1d1ff45ddae (patch)
treedf551f89f44773a7c8c885a3905b6994350850cc
parent1790fcc12678ed2281e7bf2106c8de7d4cc0523f (diff)
downloadjsonschema-38b4c603a0f232ddbf94f9129263a1d1ff45ddae.tar.gz
Remove the added argument to jsonschema.validators.create. julian@Airm ●
We need a better public API for vocabularies, and this unfortunately won't cut it. For now this is dirty, but works to load all vocabularies (which are just concatenated together). The reason this is needed is because I don't see a PEP302-compliant way to load a whole directory using the importlib.resources APIs (which call directories 'packages') -- and doing so manually would break importing jsonschema via a zip file, which is something historically that users were doing.
-rw-r--r--jsonschema/_utils.py13
-rw-r--r--jsonschema/schemas/draft2019-09/applicator.json56
-rw-r--r--jsonschema/schemas/draft2019-09/content.json17
-rw-r--r--jsonschema/schemas/draft2019-09/core.json57
-rw-r--r--jsonschema/schemas/draft2019-09/format.json14
-rw-r--r--jsonschema/schemas/draft2019-09/hyper-schema.json29
-rw-r--r--jsonschema/schemas/draft2019-09/meta-data.json37
-rw-r--r--jsonschema/schemas/draft2019-09/validation.json98
-rw-r--r--jsonschema/schemas/draft2020-12/applicator.json48
-rw-r--r--jsonschema/schemas/draft2020-12/content.json17
-rw-r--r--jsonschema/schemas/draft2020-12/core.json51
-rw-r--r--jsonschema/schemas/draft2020-12/format-annotation.json14
-rw-r--r--jsonschema/schemas/draft2020-12/meta-data.json37
-rw-r--r--jsonschema/schemas/draft2020-12/unevaluated.json15
-rw-r--r--jsonschema/schemas/draft2020-12/validation.json98
-rw-r--r--jsonschema/schemas/vocabularies.json1
-rw-r--r--jsonschema/validators.py22
17 files changed, 9 insertions, 615 deletions
diff --git a/jsonschema/_utils.py b/jsonschema/_utils.py
index 3125f1e..15e2089 100644
--- a/jsonschema/_utils.py
+++ b/jsonschema/_utils.py
@@ -58,19 +58,6 @@ def load_schema(name):
return json.loads(data.decode("utf-8"))
-def load_vocabulary(name):
- """
- Load all schema files from ./schemas/``name`` and return them as a list.
- """
- vocabulary = []
- base_path = os.path.dirname(sys.modules["jsonschema"].__file__)
- pathlist = Path(os.path.join(base_path, "schemas", name)).glob("*.json")
- for path in pathlist:
- with open(path) as data:
- vocabulary.append(json.load(data))
- return vocabulary
-
-
def format_as_index(container, indices):
"""
Construct a single string containing indexing operations for the indices.
diff --git a/jsonschema/schemas/draft2019-09/applicator.json b/jsonschema/schemas/draft2019-09/applicator.json
deleted file mode 100644
index 24a1cc4..0000000
--- a/jsonschema/schemas/draft2019-09/applicator.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2019-09/schema",
- "$id": "https://json-schema.org/draft/2019-09/meta/applicator",
- "$vocabulary": {
- "https://json-schema.org/draft/2019-09/vocab/applicator": true
- },
- "$recursiveAnchor": true,
-
- "title": "Applicator vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "additionalItems": { "$recursiveRef": "#" },
- "unevaluatedItems": { "$recursiveRef": "#" },
- "items": {
- "anyOf": [
- { "$recursiveRef": "#" },
- { "$ref": "#/$defs/schemaArray" }
- ]
- },
- "contains": { "$recursiveRef": "#" },
- "additionalProperties": { "$recursiveRef": "#" },
- "unevaluatedProperties": { "$recursiveRef": "#" },
- "properties": {
- "type": "object",
- "additionalProperties": { "$recursiveRef": "#" },
- "default": {}
- },
- "patternProperties": {
- "type": "object",
- "additionalProperties": { "$recursiveRef": "#" },
- "propertyNames": { "format": "regex" },
- "default": {}
- },
- "dependentSchemas": {
- "type": "object",
- "additionalProperties": {
- "$recursiveRef": "#"
- }
- },
- "propertyNames": { "$recursiveRef": "#" },
- "if": { "$recursiveRef": "#" },
- "then": { "$recursiveRef": "#" },
- "else": { "$recursiveRef": "#" },
- "allOf": { "$ref": "#/$defs/schemaArray" },
- "anyOf": { "$ref": "#/$defs/schemaArray" },
- "oneOf": { "$ref": "#/$defs/schemaArray" },
- "not": { "$recursiveRef": "#" }
- },
- "$defs": {
- "schemaArray": {
- "type": "array",
- "minItems": 1,
- "items": { "$recursiveRef": "#" }
- }
- }
-}
diff --git a/jsonschema/schemas/draft2019-09/content.json b/jsonschema/schemas/draft2019-09/content.json
deleted file mode 100644
index f6752a8..0000000
--- a/jsonschema/schemas/draft2019-09/content.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2019-09/schema",
- "$id": "https://json-schema.org/draft/2019-09/meta/content",
- "$vocabulary": {
- "https://json-schema.org/draft/2019-09/vocab/content": true
- },
- "$recursiveAnchor": true,
-
- "title": "Content vocabulary meta-schema",
-
- "type": ["object", "boolean"],
- "properties": {
- "contentMediaType": { "type": "string" },
- "contentEncoding": { "type": "string" },
- "contentSchema": { "$recursiveRef": "#" }
- }
-}
diff --git a/jsonschema/schemas/draft2019-09/core.json b/jsonschema/schemas/draft2019-09/core.json
deleted file mode 100644
index eb708a5..0000000
--- a/jsonschema/schemas/draft2019-09/core.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2019-09/schema",
- "$id": "https://json-schema.org/draft/2019-09/meta/core",
- "$vocabulary": {
- "https://json-schema.org/draft/2019-09/vocab/core": true
- },
- "$recursiveAnchor": true,
-
- "title": "Core vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "$id": {
- "type": "string",
- "format": "uri-reference",
- "$comment": "Non-empty fragments not allowed.",
- "pattern": "^[^#]*#?$"
- },
- "$schema": {
- "type": "string",
- "format": "uri"
- },
- "$anchor": {
- "type": "string",
- "pattern": "^[A-Za-z][-A-Za-z0-9.:_]*$"
- },
- "$ref": {
- "type": "string",
- "format": "uri-reference"
- },
- "$recursiveRef": {
- "type": "string",
- "format": "uri-reference"
- },
- "$recursiveAnchor": {
- "type": "boolean",
- "default": false
- },
- "$vocabulary": {
- "type": "object",
- "propertyNames": {
- "type": "string",
- "format": "uri"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "$comment": {
- "type": "string"
- },
- "$defs": {
- "type": "object",
- "additionalProperties": { "$recursiveRef": "#" },
- "default": {}
- }
- }
-}
diff --git a/jsonschema/schemas/draft2019-09/format.json b/jsonschema/schemas/draft2019-09/format.json
deleted file mode 100644
index 09bbfdd..0000000
--- a/jsonschema/schemas/draft2019-09/format.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2019-09/schema",
- "$id": "https://json-schema.org/draft/2019-09/meta/format",
- "$vocabulary": {
- "https://json-schema.org/draft/2019-09/vocab/format": true
- },
- "$recursiveAnchor": true,
-
- "title": "Format vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "format": { "type": "string" }
- }
-}
diff --git a/jsonschema/schemas/draft2019-09/hyper-schema.json b/jsonschema/schemas/draft2019-09/hyper-schema.json
deleted file mode 100644
index 3d23058..0000000
--- a/jsonschema/schemas/draft2019-09/hyper-schema.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2019-09/hyper-schema",
- "$id": "https://json-schema.org/draft/2019-09/meta/hyper-schema",
- "$vocabulary": {
- "https://json-schema.org/draft/2019-09/vocab/hyper-schema": true
- },
- "$recursiveAnchor": true,
-
- "title": "JSON Hyper-Schema Vocabulary Schema",
- "type": ["object", "boolean"],
- "properties": {
- "base": {
- "type": "string",
- "format": "uri-template"
- },
- "links": {
- "type": "array",
- "items": {
- "$ref": "https://json-schema.org/draft/2019-09/links"
- }
- }
- },
- "links": [
- {
- "rel": "self",
- "href": "{+%24id}"
- }
- ]
-}
diff --git a/jsonschema/schemas/draft2019-09/meta-data.json b/jsonschema/schemas/draft2019-09/meta-data.json
deleted file mode 100644
index da04cff..0000000
--- a/jsonschema/schemas/draft2019-09/meta-data.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2019-09/schema",
- "$id": "https://json-schema.org/draft/2019-09/meta/meta-data",
- "$vocabulary": {
- "https://json-schema.org/draft/2019-09/vocab/meta-data": true
- },
- "$recursiveAnchor": true,
-
- "title": "Meta-data vocabulary meta-schema",
-
- "type": ["object", "boolean"],
- "properties": {
- "title": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "default": true,
- "deprecated": {
- "type": "boolean",
- "default": false
- },
- "readOnly": {
- "type": "boolean",
- "default": false
- },
- "writeOnly": {
- "type": "boolean",
- "default": false
- },
- "examples": {
- "type": "array",
- "items": true
- }
- }
-}
diff --git a/jsonschema/schemas/draft2019-09/validation.json b/jsonschema/schemas/draft2019-09/validation.json
deleted file mode 100644
index 9f59677..0000000
--- a/jsonschema/schemas/draft2019-09/validation.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2019-09/schema",
- "$id": "https://json-schema.org/draft/2019-09/meta/validation",
- "$vocabulary": {
- "https://json-schema.org/draft/2019-09/vocab/validation": true
- },
- "$recursiveAnchor": true,
-
- "title": "Validation vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "multipleOf": {
- "type": "number",
- "exclusiveMinimum": 0
- },
- "maximum": {
- "type": "number"
- },
- "exclusiveMaximum": {
- "type": "number"
- },
- "minimum": {
- "type": "number"
- },
- "exclusiveMinimum": {
- "type": "number"
- },
- "maxLength": { "$ref": "#/$defs/nonNegativeInteger" },
- "minLength": { "$ref": "#/$defs/nonNegativeIntegerDefault0" },
- "pattern": {
- "type": "string",
- "format": "regex"
- },
- "maxItems": { "$ref": "#/$defs/nonNegativeInteger" },
- "minItems": { "$ref": "#/$defs/nonNegativeIntegerDefault0" },
- "uniqueItems": {
- "type": "boolean",
- "default": false
- },
- "maxContains": { "$ref": "#/$defs/nonNegativeInteger" },
- "minContains": {
- "$ref": "#/$defs/nonNegativeInteger",
- "default": 1
- },
- "maxProperties": { "$ref": "#/$defs/nonNegativeInteger" },
- "minProperties": { "$ref": "#/$defs/nonNegativeIntegerDefault0" },
- "required": { "$ref": "#/$defs/stringArray" },
- "dependentRequired": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/$defs/stringArray"
- }
- },
- "const": true,
- "enum": {
- "type": "array",
- "items": true
- },
- "type": {
- "anyOf": [
- { "$ref": "#/$defs/simpleTypes" },
- {
- "type": "array",
- "items": { "$ref": "#/$defs/simpleTypes" },
- "minItems": 1,
- "uniqueItems": true
- }
- ]
- }
- },
- "$defs": {
- "nonNegativeInteger": {
- "type": "integer",
- "minimum": 0
- },
- "nonNegativeIntegerDefault0": {
- "$ref": "#/$defs/nonNegativeInteger",
- "default": 0
- },
- "simpleTypes": {
- "enum": [
- "array",
- "boolean",
- "integer",
- "null",
- "number",
- "object",
- "string"
- ]
- },
- "stringArray": {
- "type": "array",
- "items": { "type": "string" },
- "uniqueItems": true,
- "default": []
- }
- }
-}
diff --git a/jsonschema/schemas/draft2020-12/applicator.json b/jsonschema/schemas/draft2020-12/applicator.json
deleted file mode 100644
index ca69923..0000000
--- a/jsonschema/schemas/draft2020-12/applicator.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://json-schema.org/draft/2020-12/meta/applicator",
- "$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/applicator": true
- },
- "$dynamicAnchor": "meta",
-
- "title": "Applicator vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "prefixItems": { "$ref": "#/$defs/schemaArray" },
- "items": { "$dynamicRef": "#meta" },
- "contains": { "$dynamicRef": "#meta" },
- "additionalProperties": { "$dynamicRef": "#meta" },
- "properties": {
- "type": "object",
- "additionalProperties": { "$dynamicRef": "#meta" },
- "default": {}
- },
- "patternProperties": {
- "type": "object",
- "additionalProperties": { "$dynamicRef": "#meta" },
- "propertyNames": { "format": "regex" },
- "default": {}
- },
- "dependentSchemas": {
- "type": "object",
- "additionalProperties": { "$dynamicRef": "#meta" },
- "default": {}
- },
- "propertyNames": { "$dynamicRef": "#meta" },
- "if": { "$dynamicRef": "#meta" },
- "then": { "$dynamicRef": "#meta" },
- "else": { "$dynamicRef": "#meta" },
- "allOf": { "$ref": "#/$defs/schemaArray" },
- "anyOf": { "$ref": "#/$defs/schemaArray" },
- "oneOf": { "$ref": "#/$defs/schemaArray" },
- "not": { "$dynamicRef": "#meta" }
- },
- "$defs": {
- "schemaArray": {
- "type": "array",
- "minItems": 1,
- "items": { "$dynamicRef": "#meta" }
- }
- }
-}
diff --git a/jsonschema/schemas/draft2020-12/content.json b/jsonschema/schemas/draft2020-12/content.json
deleted file mode 100644
index 2f6e056..0000000
--- a/jsonschema/schemas/draft2020-12/content.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://json-schema.org/draft/2020-12/meta/content",
- "$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/content": true
- },
- "$dynamicAnchor": "meta",
-
- "title": "Content vocabulary meta-schema",
-
- "type": ["object", "boolean"],
- "properties": {
- "contentEncoding": { "type": "string" },
- "contentMediaType": { "type": "string" },
- "contentSchema": { "$dynamicRef": "#meta" }
- }
-}
diff --git a/jsonschema/schemas/draft2020-12/core.json b/jsonschema/schemas/draft2020-12/core.json
deleted file mode 100644
index dfc092d..0000000
--- a/jsonschema/schemas/draft2020-12/core.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://json-schema.org/draft/2020-12/meta/core",
- "$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/core": true
- },
- "$dynamicAnchor": "meta",
-
- "title": "Core vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "$id": {
- "$ref": "#/$defs/uriReferenceString",
- "$comment": "Non-empty fragments not allowed.",
- "pattern": "^[^#]*#?$"
- },
- "$schema": { "$ref": "#/$defs/uriString" },
- "$ref": { "$ref": "#/$defs/uriReferenceString" },
- "$anchor": { "$ref": "#/$defs/anchorString" },
- "$dynamicRef": { "$ref": "#/$defs/uriReferenceString" },
- "$dynamicAnchor": { "$ref": "#/$defs/anchorString" },
- "$vocabulary": {
- "type": "object",
- "propertyNames": { "$ref": "#/$defs/uriString" },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "$comment": {
- "type": "string"
- },
- "$defs": {
- "type": "object",
- "additionalProperties": { "$dynamicRef": "#meta" }
- }
- },
- "$defs": {
- "anchorString": {
- "type": "string",
- "pattern": "^[A-Za-z_][-A-Za-z0-9._]*$"
- },
- "uriString": {
- "type": "string",
- "format": "uri"
- },
- "uriReferenceString": {
- "type": "string",
- "format": "uri-reference"
- }
- }
-}
diff --git a/jsonschema/schemas/draft2020-12/format-annotation.json b/jsonschema/schemas/draft2020-12/format-annotation.json
deleted file mode 100644
index 51ef7ea..0000000
--- a/jsonschema/schemas/draft2020-12/format-annotation.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://json-schema.org/draft/2020-12/meta/format-annotation",
- "$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/format-annotation": true
- },
- "$dynamicAnchor": "meta",
-
- "title": "Format vocabulary meta-schema for annotation results",
- "type": ["object", "boolean"],
- "properties": {
- "format": { "type": "string" }
- }
-}
diff --git a/jsonschema/schemas/draft2020-12/meta-data.json b/jsonschema/schemas/draft2020-12/meta-data.json
deleted file mode 100644
index 05cbc22..0000000
--- a/jsonschema/schemas/draft2020-12/meta-data.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://json-schema.org/draft/2020-12/meta/meta-data",
- "$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/meta-data": true
- },
- "$dynamicAnchor": "meta",
-
- "title": "Meta-data vocabulary meta-schema",
-
- "type": ["object", "boolean"],
- "properties": {
- "title": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "default": true,
- "deprecated": {
- "type": "boolean",
- "default": false
- },
- "readOnly": {
- "type": "boolean",
- "default": false
- },
- "writeOnly": {
- "type": "boolean",
- "default": false
- },
- "examples": {
- "type": "array",
- "items": true
- }
- }
-}
diff --git a/jsonschema/schemas/draft2020-12/unevaluated.json b/jsonschema/schemas/draft2020-12/unevaluated.json
deleted file mode 100644
index 5f62a3f..0000000
--- a/jsonschema/schemas/draft2020-12/unevaluated.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://json-schema.org/draft/2020-12/meta/unevaluated",
- "$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/unevaluated": true
- },
- "$dynamicAnchor": "meta",
-
- "title": "Unevaluated applicator vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "unevaluatedItems": { "$dynamicRef": "#meta" },
- "unevaluatedProperties": { "$dynamicRef": "#meta" }
- }
-}
diff --git a/jsonschema/schemas/draft2020-12/validation.json b/jsonschema/schemas/draft2020-12/validation.json
deleted file mode 100644
index 606b87b..0000000
--- a/jsonschema/schemas/draft2020-12/validation.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://json-schema.org/draft/2020-12/meta/validation",
- "$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/validation": true
- },
- "$dynamicAnchor": "meta",
-
- "title": "Validation vocabulary meta-schema",
- "type": ["object", "boolean"],
- "properties": {
- "type": {
- "anyOf": [
- { "$ref": "#/$defs/simpleTypes" },
- {
- "type": "array",
- "items": { "$ref": "#/$defs/simpleTypes" },
- "minItems": 1,
- "uniqueItems": true
- }
- ]
- },
- "const": true,
- "enum": {
- "type": "array",
- "items": true
- },
- "multipleOf": {
- "type": "number",
- "exclusiveMinimum": 0
- },
- "maximum": {
- "type": "number"
- },
- "exclusiveMaximum": {
- "type": "number"
- },
- "minimum": {
- "type": "number"
- },
- "exclusiveMinimum": {
- "type": "number"
- },
- "maxLength": { "$ref": "#/$defs/nonNegativeInteger" },
- "minLength": { "$ref": "#/$defs/nonNegativeIntegerDefault0" },
- "pattern": {
- "type": "string",
- "format": "regex"
- },
- "maxItems": { "$ref": "#/$defs/nonNegativeInteger" },
- "minItems": { "$ref": "#/$defs/nonNegativeIntegerDefault0" },
- "uniqueItems": {
- "type": "boolean",
- "default": false
- },
- "maxContains": { "$ref": "#/$defs/nonNegativeInteger" },
- "minContains": {
- "$ref": "#/$defs/nonNegativeInteger",
- "default": 1
- },
- "maxProperties": { "$ref": "#/$defs/nonNegativeInteger" },
- "minProperties": { "$ref": "#/$defs/nonNegativeIntegerDefault0" },
- "required": { "$ref": "#/$defs/stringArray" },
- "dependentRequired": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/$defs/stringArray"
- }
- }
- },
- "$defs": {
- "nonNegativeInteger": {
- "type": "integer",
- "minimum": 0
- },
- "nonNegativeIntegerDefault0": {
- "$ref": "#/$defs/nonNegativeInteger",
- "default": 0
- },
- "simpleTypes": {
- "enum": [
- "array",
- "boolean",
- "integer",
- "null",
- "number",
- "object",
- "string"
- ]
- },
- "stringArray": {
- "type": "array",
- "items": { "type": "string" },
- "uniqueItems": true,
- "default": []
- }
- }
-}
diff --git a/jsonschema/schemas/vocabularies.json b/jsonschema/schemas/vocabularies.json
new file mode 100644
index 0000000..bca1705
--- /dev/null
+++ b/jsonschema/schemas/vocabularies.json
@@ -0,0 +1 @@
+{"https://json-schema.org/draft/2020-12/meta/content": {"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://json-schema.org/draft/2020-12/meta/content", "$vocabulary": {"https://json-schema.org/draft/2020-12/vocab/content": true}, "$dynamicAnchor": "meta", "title": "Content vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"contentEncoding": {"type": "string"}, "contentMediaType": {"type": "string"}, "contentSchema": {"$dynamicRef": "#meta"}}}, "https://json-schema.org/draft/2020-12/meta/unevaluated": {"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://json-schema.org/draft/2020-12/meta/unevaluated", "$vocabulary": {"https://json-schema.org/draft/2020-12/vocab/unevaluated": true}, "$dynamicAnchor": "meta", "title": "Unevaluated applicator vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"unevaluatedItems": {"$dynamicRef": "#meta"}, "unevaluatedProperties": {"$dynamicRef": "#meta"}}}, "https://json-schema.org/draft/2020-12/meta/format-annotation": {"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://json-schema.org/draft/2020-12/meta/format-annotation", "$vocabulary": {"https://json-schema.org/draft/2020-12/vocab/format-annotation": true}, "$dynamicAnchor": "meta", "title": "Format vocabulary meta-schema for annotation results", "type": ["object", "boolean"], "properties": {"format": {"type": "string"}}}, "https://json-schema.org/draft/2020-12/meta/applicator": {"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://json-schema.org/draft/2020-12/meta/applicator", "$vocabulary": {"https://json-schema.org/draft/2020-12/vocab/applicator": true}, "$dynamicAnchor": "meta", "title": "Applicator vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"prefixItems": {"$ref": "#/$defs/schemaArray"}, "items": {"$dynamicRef": "#meta"}, "contains": {"$dynamicRef": "#meta"}, "additionalProperties": {"$dynamicRef": "#meta"}, "properties": {"type": "object", "additionalProperties": {"$dynamicRef": "#meta"}, "default": {}}, "patternProperties": {"type": "object", "additionalProperties": {"$dynamicRef": "#meta"}, "propertyNames": {"format": "regex"}, "default": {}}, "dependentSchemas": {"type": "object", "additionalProperties": {"$dynamicRef": "#meta"}, "default": {}}, "propertyNames": {"$dynamicRef": "#meta"}, "if": {"$dynamicRef": "#meta"}, "then": {"$dynamicRef": "#meta"}, "else": {"$dynamicRef": "#meta"}, "allOf": {"$ref": "#/$defs/schemaArray"}, "anyOf": {"$ref": "#/$defs/schemaArray"}, "oneOf": {"$ref": "#/$defs/schemaArray"}, "not": {"$dynamicRef": "#meta"}}, "$defs": {"schemaArray": {"type": "array", "minItems": 1, "items": {"$dynamicRef": "#meta"}}}}, "https://json-schema.org/draft/2020-12/meta/meta-data": {"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://json-schema.org/draft/2020-12/meta/meta-data", "$vocabulary": {"https://json-schema.org/draft/2020-12/vocab/meta-data": true}, "$dynamicAnchor": "meta", "title": "Meta-data vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"title": {"type": "string"}, "description": {"type": "string"}, "default": true, "deprecated": {"type": "boolean", "default": false}, "readOnly": {"type": "boolean", "default": false}, "writeOnly": {"type": "boolean", "default": false}, "examples": {"type": "array", "items": true}}}, "https://json-schema.org/draft/2020-12/meta/core": {"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://json-schema.org/draft/2020-12/meta/core", "$vocabulary": {"https://json-schema.org/draft/2020-12/vocab/core": true}, "$dynamicAnchor": "meta", "title": "Core vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"$id": {"$ref": "#/$defs/uriReferenceString", "$comment": "Non-empty fragments not allowed.", "pattern": "^[^#]*#?$"}, "$schema": {"$ref": "#/$defs/uriString"}, "$ref": {"$ref": "#/$defs/uriReferenceString"}, "$anchor": {"$ref": "#/$defs/anchorString"}, "$dynamicRef": {"$ref": "#/$defs/uriReferenceString"}, "$dynamicAnchor": {"$ref": "#/$defs/anchorString"}, "$vocabulary": {"type": "object", "propertyNames": {"$ref": "#/$defs/uriString"}, "additionalProperties": {"type": "boolean"}}, "$comment": {"type": "string"}, "$defs": {"type": "object", "additionalProperties": {"$dynamicRef": "#meta"}}}, "$defs": {"anchorString": {"type": "string", "pattern": "^[A-Za-z_][-A-Za-z0-9._]*$"}, "uriString": {"type": "string", "format": "uri"}, "uriReferenceString": {"type": "string", "format": "uri-reference"}}}, "https://json-schema.org/draft/2020-12/meta/validation": {"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://json-schema.org/draft/2020-12/meta/validation", "$vocabulary": {"https://json-schema.org/draft/2020-12/vocab/validation": true}, "$dynamicAnchor": "meta", "title": "Validation vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"type": {"anyOf": [{"$ref": "#/$defs/simpleTypes"}, {"type": "array", "items": {"$ref": "#/$defs/simpleTypes"}, "minItems": 1, "uniqueItems": true}]}, "const": true, "enum": {"type": "array", "items": true}, "multipleOf": {"type": "number", "exclusiveMinimum": 0}, "maximum": {"type": "number"}, "exclusiveMaximum": {"type": "number"}, "minimum": {"type": "number"}, "exclusiveMinimum": {"type": "number"}, "maxLength": {"$ref": "#/$defs/nonNegativeInteger"}, "minLength": {"$ref": "#/$defs/nonNegativeIntegerDefault0"}, "pattern": {"type": "string", "format": "regex"}, "maxItems": {"$ref": "#/$defs/nonNegativeInteger"}, "minItems": {"$ref": "#/$defs/nonNegativeIntegerDefault0"}, "uniqueItems": {"type": "boolean", "default": false}, "maxContains": {"$ref": "#/$defs/nonNegativeInteger"}, "minContains": {"$ref": "#/$defs/nonNegativeInteger", "default": 1}, "maxProperties": {"$ref": "#/$defs/nonNegativeInteger"}, "minProperties": {"$ref": "#/$defs/nonNegativeIntegerDefault0"}, "required": {"$ref": "#/$defs/stringArray"}, "dependentRequired": {"type": "object", "additionalProperties": {"$ref": "#/$defs/stringArray"}}}, "$defs": {"nonNegativeInteger": {"type": "integer", "minimum": 0}, "nonNegativeIntegerDefault0": {"$ref": "#/$defs/nonNegativeInteger", "default": 0}, "simpleTypes": {"enum": ["array", "boolean", "integer", "null", "number", "object", "string"]}, "stringArray": {"type": "array", "items": {"type": "string"}, "uniqueItems": true, "default": []}}}, "https://json-schema.org/draft/2019-09/meta/content": {"$schema": "https://json-schema.org/draft/2019-09/schema", "$id": "https://json-schema.org/draft/2019-09/meta/content", "$vocabulary": {"https://json-schema.org/draft/2019-09/vocab/content": true}, "$recursiveAnchor": true, "title": "Content vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"contentMediaType": {"type": "string"}, "contentEncoding": {"type": "string"}, "contentSchema": {"$recursiveRef": "#"}}}, "https://json-schema.org/draft/2019-09/meta/applicator": {"$schema": "https://json-schema.org/draft/2019-09/schema", "$id": "https://json-schema.org/draft/2019-09/meta/applicator", "$vocabulary": {"https://json-schema.org/draft/2019-09/vocab/applicator": true}, "$recursiveAnchor": true, "title": "Applicator vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"additionalItems": {"$recursiveRef": "#"}, "unevaluatedItems": {"$recursiveRef": "#"}, "items": {"anyOf": [{"$recursiveRef": "#"}, {"$ref": "#/$defs/schemaArray"}]}, "contains": {"$recursiveRef": "#"}, "additionalProperties": {"$recursiveRef": "#"}, "unevaluatedProperties": {"$recursiveRef": "#"}, "properties": {"type": "object", "additionalProperties": {"$recursiveRef": "#"}, "default": {}}, "patternProperties": {"type": "object", "additionalProperties": {"$recursiveRef": "#"}, "propertyNames": {"format": "regex"}, "default": {}}, "dependentSchemas": {"type": "object", "additionalProperties": {"$recursiveRef": "#"}}, "propertyNames": {"$recursiveRef": "#"}, "if": {"$recursiveRef": "#"}, "then": {"$recursiveRef": "#"}, "else": {"$recursiveRef": "#"}, "allOf": {"$ref": "#/$defs/schemaArray"}, "anyOf": {"$ref": "#/$defs/schemaArray"}, "oneOf": {"$ref": "#/$defs/schemaArray"}, "not": {"$recursiveRef": "#"}}, "$defs": {"schemaArray": {"type": "array", "minItems": 1, "items": {"$recursiveRef": "#"}}}}, "https://json-schema.org/draft/2019-09/meta/meta-data": {"$schema": "https://json-schema.org/draft/2019-09/schema", "$id": "https://json-schema.org/draft/2019-09/meta/meta-data", "$vocabulary": {"https://json-schema.org/draft/2019-09/vocab/meta-data": true}, "$recursiveAnchor": true, "title": "Meta-data vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"title": {"type": "string"}, "description": {"type": "string"}, "default": true, "deprecated": {"type": "boolean", "default": false}, "readOnly": {"type": "boolean", "default": false}, "writeOnly": {"type": "boolean", "default": false}, "examples": {"type": "array", "items": true}}}, "https://json-schema.org/draft/2019-09/meta/core": {"$schema": "https://json-schema.org/draft/2019-09/schema", "$id": "https://json-schema.org/draft/2019-09/meta/core", "$vocabulary": {"https://json-schema.org/draft/2019-09/vocab/core": true}, "$recursiveAnchor": true, "title": "Core vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"$id": {"type": "string", "format": "uri-reference", "$comment": "Non-empty fragments not allowed.", "pattern": "^[^#]*#?$"}, "$schema": {"type": "string", "format": "uri"}, "$anchor": {"type": "string", "pattern": "^[A-Za-z][-A-Za-z0-9.:_]*$"}, "$ref": {"type": "string", "format": "uri-reference"}, "$recursiveRef": {"type": "string", "format": "uri-reference"}, "$recursiveAnchor": {"type": "boolean", "default": false}, "$vocabulary": {"type": "object", "propertyNames": {"type": "string", "format": "uri"}, "additionalProperties": {"type": "boolean"}}, "$comment": {"type": "string"}, "$defs": {"type": "object", "additionalProperties": {"$recursiveRef": "#"}, "default": {}}}}, "https://json-schema.org/draft/2019-09/meta/validation": {"$schema": "https://json-schema.org/draft/2019-09/schema", "$id": "https://json-schema.org/draft/2019-09/meta/validation", "$vocabulary": {"https://json-schema.org/draft/2019-09/vocab/validation": true}, "$recursiveAnchor": true, "title": "Validation vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"multipleOf": {"type": "number", "exclusiveMinimum": 0}, "maximum": {"type": "number"}, "exclusiveMaximum": {"type": "number"}, "minimum": {"type": "number"}, "exclusiveMinimum": {"type": "number"}, "maxLength": {"$ref": "#/$defs/nonNegativeInteger"}, "minLength": {"$ref": "#/$defs/nonNegativeIntegerDefault0"}, "pattern": {"type": "string", "format": "regex"}, "maxItems": {"$ref": "#/$defs/nonNegativeInteger"}, "minItems": {"$ref": "#/$defs/nonNegativeIntegerDefault0"}, "uniqueItems": {"type": "boolean", "default": false}, "maxContains": {"$ref": "#/$defs/nonNegativeInteger"}, "minContains": {"$ref": "#/$defs/nonNegativeInteger", "default": 1}, "maxProperties": {"$ref": "#/$defs/nonNegativeInteger"}, "minProperties": {"$ref": "#/$defs/nonNegativeIntegerDefault0"}, "required": {"$ref": "#/$defs/stringArray"}, "dependentRequired": {"type": "object", "additionalProperties": {"$ref": "#/$defs/stringArray"}}, "const": true, "enum": {"type": "array", "items": true}, "type": {"anyOf": [{"$ref": "#/$defs/simpleTypes"}, {"type": "array", "items": {"$ref": "#/$defs/simpleTypes"}, "minItems": 1, "uniqueItems": true}]}}, "$defs": {"nonNegativeInteger": {"type": "integer", "minimum": 0}, "nonNegativeIntegerDefault0": {"$ref": "#/$defs/nonNegativeInteger", "default": 0}, "simpleTypes": {"enum": ["array", "boolean", "integer", "null", "number", "object", "string"]}, "stringArray": {"type": "array", "items": {"type": "string"}, "uniqueItems": true, "default": []}}}, "https://json-schema.org/draft/2019-09/meta/hyper-schema": {"$schema": "https://json-schema.org/draft/2019-09/hyper-schema", "$id": "https://json-schema.org/draft/2019-09/meta/hyper-schema", "$vocabulary": {"https://json-schema.org/draft/2019-09/vocab/hyper-schema": true}, "$recursiveAnchor": true, "title": "JSON Hyper-Schema Vocabulary Schema", "type": ["object", "boolean"], "properties": {"base": {"type": "string", "format": "uri-template"}, "links": {"type": "array", "items": {"$ref": "https://json-schema.org/draft/2019-09/links"}}}, "links": [{"rel": "self", "href": "{+%24id}"}]}, "https://json-schema.org/draft/2019-09/meta/format": {"$schema": "https://json-schema.org/draft/2019-09/schema", "$id": "https://json-schema.org/draft/2019-09/meta/format", "$vocabulary": {"https://json-schema.org/draft/2019-09/vocab/format": true}, "$recursiveAnchor": true, "title": "Format vocabulary meta-schema", "type": ["object", "boolean"], "properties": {"format": {"type": "string"}}}}
diff --git a/jsonschema/validators.py b/jsonschema/validators.py
index c35e7ef..4ab101c 100644
--- a/jsonschema/validators.py
+++ b/jsonschema/validators.py
@@ -24,7 +24,7 @@ from jsonschema import (
_VALIDATORS = {}
_META_SCHEMAS = _utils.URIDict()
-_VOCABULARIES = _utils.URIDict()
+_VOCABULARIES = []
def __getattr__(name):
@@ -77,32 +77,29 @@ def validates(version):
_VALIDATORS[version] = cls
meta_schema_id = cls.ID_OF(cls.META_SCHEMA)
_META_SCHEMAS[meta_schema_id] = cls
-
- for vocabulary in cls.VOCABULARY_SCHEMAS:
- vocabulary_id = cls.ID_OF(vocabulary)
- _VOCABULARIES[vocabulary_id] = vocabulary
-
return cls
return _validates
def _id_of(schema):
+ """
+ Return the ID of a schema for recent JSON Schema drafts.
+ """
if schema is True or schema is False:
return ""
return schema.get("$id", "")
def _store_schema_list():
+ if not _VOCABULARIES:
+ _VOCABULARIES.extend(_utils.load_schema("vocabularies").items())
return [
(id, validator.META_SCHEMA) for id, validator in _META_SCHEMAS.items()
- ] + [
- (id, schema) for id, schema in _VOCABULARIES.items()
- ]
+ ] + _VOCABULARIES
def create(
meta_schema,
- vocabulary_schemas=(),
validators=(),
version=None,
type_checker=_types.draft7_type_checker,
@@ -153,7 +150,7 @@ def create(
applicable_validators (collections.abc.Callable):
A function that given a schema, returns the list of applicable
- validators (names and callables) which will be called on to
+ validators (names and callables) which will be called to
validate the instance.
Returns:
@@ -166,7 +163,6 @@ def create(
VALIDATORS = dict(validators)
META_SCHEMA = dict(meta_schema)
- VOCABULARY_SCHEMAS = list(vocabulary_schemas)
TYPE_CHECKER = type_checker
ID_OF = staticmethod(id_of)
@@ -499,7 +495,6 @@ Draft7Validator = create(
Draft201909Validator = create(
meta_schema=_utils.load_schema("draft2019-09"),
- vocabulary_schemas=_utils.load_vocabulary("draft2019-09"),
validators={
"$recursiveRef": _legacy_validators.recursiveRef,
"$ref": _validators.ref,
@@ -544,7 +539,6 @@ Draft201909Validator = create(
Draft202012Validator = create(
meta_schema=_utils.load_schema("draft2020-12"),
- vocabulary_schemas=_utils.load_vocabulary("draft2020-12"),
validators={
"$dynamicRef": _validators.dynamicRef,
"$ref": _validators.ref,