|
7 | 7 | from functools import lru_cache
|
8 | 8 | from numbers import Integral
|
9 | 9 |
|
10 |
| -import attr |
11 | 10 | import numpy as np
|
12 | 11 | import yaml
|
13 | 12 | from jsonschema import validators as mvalidators
|
@@ -253,15 +252,25 @@ def _create_validator(validators=YAML_VALIDATORS, visit_repeat_nodes=False):
|
253 | 252 | }
|
254 | 253 | )
|
255 | 254 | id_of = mvalidators.Draft4Validator.ID_OF
|
256 |
| - base_cls = mvalidators.create( |
| 255 | + ASDFValidator = mvalidators.create( |
257 | 256 | meta_schema=meta_schema, validators=validators, type_checker=type_checker, id_of=id_of
|
258 | 257 | )
|
259 | 258 |
|
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() |
265 | 274 |
|
266 | 275 | def iter_errors(self, instance, *args, **kwargs):
|
267 | 276 | # We can't validate anything that looks like an external reference,
|
@@ -308,7 +317,12 @@ def iter_errors(self, instance, *args, **kwargs):
|
308 | 317 | for val in instance:
|
309 | 318 | yield from self.iter_errors(val)
|
310 | 319 | 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) |
312 | 326 |
|
313 | 327 | return ASDFValidator
|
314 | 328 |
|
|
0 commit comments