diff options
Diffstat (limited to 'jsonschema')
-rw-r--r-- | jsonschema/tests/test_validators.py | 34 | ||||
-rw-r--r-- | jsonschema/validators.py | 24 |
2 files changed, 48 insertions, 10 deletions
diff --git a/jsonschema/tests/test_validators.py b/jsonschema/tests/test_validators.py index 12276e6..020b7e8 100644 --- a/jsonschema/tests/test_validators.py +++ b/jsonschema/tests/test_validators.py @@ -83,6 +83,38 @@ class TestCreateAndExtend(SynchronousTestCase): ) self.addCleanup(validators.meta_schemas.pop, "something") self.assertEqual(Validator.__name__, "MyVersionValidator") + self.assertEqual(Validator.__qualname__, "MyVersionValidator") + + def test_repr(self): + Validator = validators.create( + meta_schema={"$id": "something"}, + version="my version", + ) + self.addCleanup(validators.meta_schemas.pop, "something") + self.assertEqual( + repr(Validator({})), + "MyVersionValidator(schema={}, format_checker=None)", + ) + + def test_long_repr(self): + Validator = validators.create( + meta_schema={"$id": "something"}, + version="my version", + ) + self.addCleanup(validators.meta_schemas.pop, "something") + self.assertEqual( + repr(Validator({"a": list(range(1000))})), ( + "MyVersionValidator(schema={'a': [0, 1, 2, 3, 4, 5, ...]}, " + "format_checker=None)" + ), + ) + + def test_repr_no_version(self): + Validator = validators.create(meta_schema={}) + self.assertEqual( + repr(Validator({})), + "Validator(schema={}, format_checker=None)", + ) def test_dashes_are_stripped_from_validator_names(self): Validator = validators.create( @@ -90,7 +122,7 @@ class TestCreateAndExtend(SynchronousTestCase): version="foo-bar", ) self.addCleanup(validators.meta_schemas.pop, "something") - self.assertEqual(Validator.__name__, "FooBarValidator") + self.assertEqual(Validator.__qualname__, "FooBarValidator") def test_if_a_version_is_not_provided_it_is_not_registered(self): original = dict(validators.meta_schemas) diff --git a/jsonschema/validators.py b/jsonschema/validators.py index 3ecf607..9338fb7 100644 --- a/jsonschema/validators.py +++ b/jsonschema/validators.py @@ -9,8 +9,11 @@ from urllib.request import urlopen from warnings import warn import contextlib import json +import reprlib import warnings +import attr + from jsonschema import ( _legacy_validators, _types, @@ -144,6 +147,7 @@ def create( a new `jsonschema.IValidator` class """ + @attr.s class Validator: VALIDATORS = dict(validators) @@ -152,13 +156,16 @@ def create( TYPE_CHECKER = type_checker ID_OF = staticmethod(id_of) - def __init__(self, schema, resolver=None, format_checker=None): - if resolver is None: - resolver = RefResolver.from_schema(schema, id_of=id_of) + schema = attr.ib(repr=reprlib.repr) + resolver = attr.ib(default=None, repr=False) + format_checker = attr.ib(default=None) - self.resolver = resolver - self.format_checker = format_checker - self.schema = schema + def __attrs_post_init__(self): + if self.resolver is None: + self.resolver = RefResolver.from_schema( + self.schema, + id_of=id_of, + ) @classmethod def check_schema(cls, schema): @@ -229,10 +236,9 @@ def create( return error is None if version is not None: + safe = version.title().replace(" ", "").replace("-", "") + Validator.__name__ = Validator.__qualname__ = f"{safe}Validator" Validator = validates(version)(Validator) - Validator.__name__ = ( - version.title().replace(" ", "").replace("-", "") + "Validator" - ) return Validator |