summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2013-05-20 11:02:22 -0400
committerJulian Berman <Julian@GrayVines.com>2013-05-20 11:02:22 -0400
commit04ca6d5c3114f2e681777f5a138f0b3357f5666e (patch)
tree57b44361252f20bb39e683b65873f3ea0362f62e
parent4d750d6845381092afca86e3d667671398e37943 (diff)
downloadjsonschema-04ca6d5c3114f2e681777f5a138f0b3357f5666e.tar.gz
Add version to create.
-rw-r--r--jsonschema/tests/test_validators.py14
-rw-r--r--jsonschema/validators.py10
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