summaryrefslogtreecommitdiff
path: root/jsonschema
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2013-05-20 20:27:18 -0400
committerJulian Berman <Julian@GrayVines.com>2013-05-20 20:27:18 -0400
commit85739b63ec438f6aa50b6ec128115310997a00dc (patch)
tree0b797b3c539e9d873b5edede323a17ff8a270357 /jsonschema
parent0a7fe815301dcc64abd22e567e0045ec6715d46b (diff)
downloadjsonschema-85739b63ec438f6aa50b6ec128115310997a00dc.tar.gz
Add jsonschema.validators.extend
Diffstat (limited to 'jsonschema')
-rw-r--r--jsonschema/tests/test_validators.py15
-rw-r--r--jsonschema/validators.py11
2 files changed, 24 insertions, 2 deletions
diff --git a/jsonschema/tests/test_validators.py b/jsonschema/tests/test_validators.py
index 1457be5..5162f6f 100644
--- a/jsonschema/tests/test_validators.py
+++ b/jsonschema/tests/test_validators.py
@@ -9,11 +9,11 @@ from jsonschema.compat import PY3
from jsonschema.tests.compat import mock, unittest
from jsonschema.validators import (
RefResolutionError, UnknownType, ErrorTree, Draft3Validator,
- Draft4Validator, RefResolver, ValidatorMixin, create, validate,
+ Draft4Validator, RefResolver, ValidatorMixin, create, extend, validate,
)
-class TestCreate(unittest.TestCase):
+class TestCreateAndExtend(unittest.TestCase):
def setUp(self):
self.meta_schema = {"properties" : {"smelly" : {}}}
self.smelly = mock.MagicMock()
@@ -63,6 +63,17 @@ class TestCreate(unittest.TestCase):
create(meta_schema={"id" : "id"})
self.assertFalse(validates.called)
+ def test_extend(self):
+ validators = dict(self.Validator.VALIDATORS)
+ new = mock.Mock()
+
+ Extended = extend(self.Validator, validators={"a new one" : new})
+
+ validators.update([("a new one", new)])
+ self.assertEqual(Extended.VALIDATORS, validators)
+ self.assertEqual(Extended.META_SCHEMA, self.Validator.META_SCHEMA)
+ self.assertEqual(Extended.DEFAULT_TYPES, self.Validator.DEFAULT_TYPES)
+
class TestIterErrors(unittest.TestCase):
def setUp(self):
diff --git a/jsonschema/validators.py b/jsonschema/validators.py
index 3db7ce9..c8ee8d8 100644
--- a/jsonschema/validators.py
+++ b/jsonschema/validators.py
@@ -146,6 +146,17 @@ def create(meta_schema, validators=(), version=None, default_types=None): # noq
return Validator
+def extend(validator, validators, version=None):
+ all_validators = validator.VALIDATORS
+ all_validators.update(validators)
+ return create(
+ meta_schema=validator.META_SCHEMA,
+ validators=all_validators,
+ version=version,
+ default_types=validator.DEFAULT_TYPES,
+ )
+
+
class ValidatorMixin(create(meta_schema={})):
def __init__(self, *args, **kwargs):
super(ValidatorMixin, self).__init__(*args, **kwargs)