diff options
author | Julian Berman <Julian@GrayVines.com> | 2013-05-20 11:02:22 -0400 |
---|---|---|
committer | Julian Berman <Julian@GrayVines.com> | 2013-05-20 11:02:22 -0400 |
commit | 04ca6d5c3114f2e681777f5a138f0b3357f5666e (patch) | |
tree | 57b44361252f20bb39e683b65873f3ea0362f62e | |
parent | 4d750d6845381092afca86e3d667671398e37943 (diff) | |
download | jsonschema-04ca6d5c3114f2e681777f5a138f0b3357f5666e.tar.gz |
Add version to create.
-rw-r--r-- | jsonschema/tests/test_validators.py | 14 | ||||
-rw-r--r-- | jsonschema/validators.py | 10 |
2 files changed, 22 insertions, 2 deletions
diff --git a/jsonschema/tests/test_validators.py b/jsonschema/tests/test_validators.py index 219404a..1db6c64 100644 --- a/jsonschema/tests/test_validators.py +++ b/jsonschema/tests/test_validators.py @@ -10,7 +10,7 @@ from jsonschema.tests.compat import mock, unittest from jsonschema.validators import ( RefResolutionError, UnknownType, ValidationError, ErrorTree, Draft3Validator, Draft4Validator, RefResolver, ValidatorMixin, - create, validate, + meta_schemas, create, validate, ) @@ -52,6 +52,18 @@ class TestCreate(unittest.TestCase): self.validator_value, instance, self.schema, ) + def test_if_a_version_is_provided_it_is_registered(self): + with mock.patch("jsonschema.validators.validates") as validates: + validates.side_effect = lambda version : lambda cls : cls + Validator = create(meta_schema={"id" : "id"}, version="my version") + validates.assert_called_once_with("my version") + self.assertEqual(Validator.__name__, "MyVersionValidator") + + def test_if_a_version_is_not_provided_it_is_not_registered(self): + with mock.patch("jsonschema.validators.validates") as validates: + Validator = create(meta_schema={"id" : "id"}) + self.assertFalse(validates.called) + class TestIterErrors(unittest.TestCase): def setUp(self): diff --git a/jsonschema/validators.py b/jsonschema/validators.py index e513aa3..582f53b 100644 --- a/jsonschema/validators.py +++ b/jsonschema/validators.py @@ -136,7 +136,7 @@ def validates(version): return _validates -def create(meta_schema, validators=(), default_types=None): # noqa +def create(meta_schema, validators=(), version=None, default_types=None): # noqa if default_types is None: default_types = { "array" : list, "boolean" : bool, "integer" : int_types, @@ -227,6 +227,14 @@ def create(meta_schema, validators=(), default_types=None): # noqa error = next(self.iter_errors(instance, _schema), None) return error is None + if version is not None: + Validator = validates(version)(Validator) + + name = "{0}Validator".format(version.title().replace(" ", "")) + if not PY3 and isinstance(name, unicode): + name = name.encode("utf-8") + Validator.__name__ = name + return Validator |