Skip to content

Commit 7df693c

Browse files
committed
Preserve the old behavior of defining default types.
This preserves backwards compatibility, even if it makes more sense to start from scratch. One can still get a fresh set of types by passing a different value in for type_checker. Closes: #509.
1 parent c2077cb commit 7df693c

File tree

2 files changed

+34
-13
lines changed

2 files changed

+34
-13
lines changed

jsonschema/tests/test_validators.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,23 @@ def test_validates_registers_meta_schema_draft6_id(self):
121121

122122
self.assertIn(meta_schema_key, validators.meta_schemas)
123123

124+
def test_create_default_types(self):
125+
Validator = validators.create(meta_schema={}, validators=())
126+
self.assertTrue(
127+
all(
128+
Validator({}).is_type(instance=instance, type=type)
129+
for type, instance in [
130+
(u"array", []),
131+
(u"boolean", True),
132+
(u"integer", 12),
133+
(u"null", None),
134+
(u"number", 12.0),
135+
(u"object", {}),
136+
(u"string", u"foo"),
137+
]
138+
),
139+
)
140+
124141
def test_extend(self):
125142
original = dict(self.Validator.VALIDATORS)
126143
new = object()
@@ -153,17 +170,19 @@ def test_extend(self):
153170

154171

155172
class TestLegacyTypeChecking(SynchronousTestCase):
156-
@unittest.skip("This logic is actually incorrect.")
157-
def test_default_types_used_if_no_type_checker_given(self):
158-
Validator = validators.create(
159-
meta_schema=self.meta_schema,
160-
validators=self.validators,
173+
def test_create_default_types(self):
174+
Validator = validators.create(meta_schema={}, validators=())
175+
self.assertEqual(
176+
set(Validator.DEFAULT_TYPES), {
177+
u"array",
178+
u"boolean",
179+
u"integer",
180+
u"null",
181+
u"number",
182+
u"object", u"string",
183+
},
161184
)
162-
163-
expected_types = {u"array", u"boolean", u"integer", u"null", u"number",
164-
u"object", u"string"}
165-
166-
self.assertEqual(set(Validator.DEFAULT_TYPES), expected_types)
185+
self.flushWarnings()
167186

168187
def test_types_redefines_the_validators_type_checker(self):
169188
schema = {"type": "string"}

jsonschema/validators.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,8 @@ def create(
173173
174174
a type checker, used when applying the :validator:`type` validator.
175175
176-
If unprovided, an empty `jsonschema.TypeChecker` will created with
177-
no known default types.
176+
If unprovided, a `jsonschema.TypeChecker` will be created with
177+
a set of default types typical of JSON Schema drafts.
178178
179179
default_types (collections.Mapping):
180180
@@ -216,7 +216,9 @@ def create(
216216
default_types = _DEPRECATED_DEFAULT_TYPES
217217
_created_with_default_types = False
218218
if type_checker is None:
219-
type_checker = _types.TypeChecker()
219+
type_checker = _types.TypeChecker(
220+
type_checkers=_generate_legacy_type_checks(default_types),
221+
)
220222

221223
@add_metaclass(_DefaultTypesDeprecatingMetaClass)
222224
class Validator(object):

0 commit comments

Comments
 (0)