Skip to content

Commit 75b2048

Browse files
committed
Merge remote-tracking branch 'manycoding/regex_value_validation'
* manycoding/regex_value_validation: Set format_checker to None for draft3 and 4 Move test_invalid_pattern under Draft6 and 7 Enable invalid regex tests Move regex patternProperty to InvalidRegexMixin Add propertyNames to Draft6 patternProperties, do not skip patternProperties test Pass draft7_format_checker to meta schema, set default Validator format_checker to None Revert style changes and test_it_does_not_validate_formats_by_default Fix test_it_validates_formats_by_default Add quotes back to False schema does not allow Fix test_False_schema Update test_it_validates_formats_by_default Ignore test_invalid_patternProperty Add invalid_patternProperty test Add invalid pattern tests Pass format_checker to validator in check_schema Pass format_checkers to meta schemas Fix regex output msg Return regex pattern error if regex failed to compile
2 parents 8f4c225 + 6731bcc commit 75b2048

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

jsonschema/tests/test_validators.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,26 @@ def test_enum_allows_non_unique_items(self):
11241124
self.Validator.check_schema({"enum": [12, 12]})
11251125

11261126

1127+
class InvalidRegexMixin(object):
1128+
def test_invalid_patternProperty(self):
1129+
with self.assertRaises(exceptions.SchemaError):
1130+
self.Validator.check_schema(
1131+
{"patternProperties":{"\q": {"type": "number"}}},
1132+
)
1133+
1134+
def test_invalid_pattern(self):
1135+
with self.assertRaises(exceptions.SchemaError):
1136+
self.Validator.check_schema({"pattern": "\q"})
1137+
1138+
1139+
class TestDraft6InvalidRegex(InvalidRegexMixin, TestCase):
1140+
Validator = validators.Draft6Validator
1141+
1142+
1143+
class TestDraft7InvalidRegex(InvalidRegexMixin, TestCase):
1144+
Validator = validators.Draft7Validator
1145+
1146+
11271147
class ValidatorTestMixin(MetaSchemaTestsMixin, object):
11281148
def test_valid_instances_are_valid(self):
11291149
schema, instance = self.valid

jsonschema/validators.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
urlsplit,
2828
)
2929

30+
from jsonschema._format import (
31+
draft6_format_checker,
32+
draft7_format_checker,
33+
)
34+
3035
# Sigh. https://gitlab.com/pycqa/flake8/issues/280
3136
# https://github.com/pyga/ebb-lint/issues/7
3237
# Imported for backwards compatibility.
@@ -158,6 +163,7 @@ def create(
158163
default_types=None,
159164
type_checker=None,
160165
id_of=_id_of,
166+
format_checker=None
161167
):
162168
"""
163169
Create a new validator class.
@@ -284,8 +290,9 @@ def __init__(
284290
self.schema = schema
285291

286292
@classmethod
287-
def check_schema(cls, schema):
288-
for error in cls(cls.META_SCHEMA).iter_errors(schema):
293+
def check_schema(cls, schema, format_checker=format_checker):
294+
validator = cls(cls.META_SCHEMA, format_checker=format_checker)
295+
for error in validator.iter_errors(schema):
289296
raise exceptions.SchemaError.create_from(error)
290297

291298
def iter_errors(self, instance, _schema=None):
@@ -465,6 +472,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
465472
type_checker=_types.draft3_type_checker,
466473
version="draft3",
467474
id_of=lambda schema: schema.get(u"id", ""),
475+
format_checker=None,
468476
)
469477

470478
Draft4Validator = create(
@@ -500,6 +508,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
500508
type_checker=_types.draft4_type_checker,
501509
version="draft4",
502510
id_of=lambda schema: schema.get(u"id", ""),
511+
format_checker=None,
503512
)
504513

505514
Draft6Validator = create(
@@ -539,6 +548,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
539548
},
540549
type_checker=_types.draft6_type_checker,
541550
version="draft6",
551+
format_checker=draft6_format_checker,
542552
)
543553

544554
Draft7Validator = create(
@@ -579,6 +589,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
579589
},
580590
type_checker=_types.draft7_type_checker,
581591
version="draft7",
592+
format_checker=draft7_format_checker,
582593
)
583594

584595
_LATEST_VERSION = Draft7Validator

0 commit comments

Comments
 (0)