summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2021-08-25 16:31:13 +0100
committerJulian Berman <Julian@GrayVines.com>2021-08-25 16:31:45 +0100
commit3cf1d13cf4245605bb9fe14c2b59c3cb18ccaf5a (patch)
treeea12974b8bbfc82fa352d0196c575fc3a7c24bab
parent211c5482af4066fb03463dac09c61042070a4cc1 (diff)
downloadjsonschema-3cf1d13cf4245605bb9fe14c2b59c3cb18ccaf5a.tar.gz
Set __qualname__ for validator classes.
Also switch to using attrs to instantiate / repr them.
-rw-r--r--jsonschema/tests/test_validators.py34
-rw-r--r--jsonschema/validators.py24
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