Skip to content

Commit ee83878

Browse files
Fix subclass using a patch
1 parent f8efb2a commit ee83878

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

asdf/schema.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from functools import lru_cache
88
from numbers import Integral
99

10-
import attr
1110
import numpy as np
1211
import yaml
1312
from jsonschema import validators as mvalidators
@@ -253,15 +252,25 @@ def _create_validator(validators=YAML_VALIDATORS, visit_repeat_nodes=False):
253252
}
254253
)
255254
id_of = mvalidators.Draft4Validator.ID_OF
256-
base_cls = mvalidators.create(
255+
ASDFValidator = mvalidators.create(
257256
meta_schema=meta_schema, validators=validators, type_checker=type_checker, id_of=id_of
258257
)
259258

260-
@attr.s
261-
class ASDFValidator(base_cls):
262-
_context = attr.ib(factory=lambda: _ValidationContext())
263-
ctx = attr.ib(default=None)
264-
serialization_context = attr.ib(default=None)
259+
def _patch_init(cls):
260+
original_init = cls.__init__
261+
262+
def __init__(self, *args, **kwargs):
263+
self.ctx = kwargs.pop("ctx", None)
264+
self.serialization_context = kwargs.pop("serialization_context", None)
265+
266+
original_init(self, *args, **kwargs)
267+
268+
cls.__init__ = __init__
269+
270+
def _patch_iter_errors(cls):
271+
original_iter_errors = cls.iter_errors
272+
273+
cls._context = _ValidationContext()
265274

266275
def iter_errors(self, instance, *args, **kwargs):
267276
# We can't validate anything that looks like an external reference,
@@ -308,7 +317,12 @@ def iter_errors(self, instance, *args, **kwargs):
308317
for val in instance:
309318
yield from self.iter_errors(val)
310319
else:
311-
yield from super().iter_errors(instance)
320+
yield from original_iter_errors(self, instance)
321+
322+
cls.iter_errors = iter_errors
323+
324+
_patch_init(ASDFValidator)
325+
_patch_iter_errors(ASDFValidator)
312326

313327
return ASDFValidator
314328

0 commit comments

Comments
 (0)