|
2 | 2 | import string
|
3 | 3 |
|
4 | 4 | from jsonschema.validators import RefResolver
|
| 5 | +from openapi_schema_validator import OAS30Validator, oas30_format_checker |
5 | 6 | from six import iteritems
|
6 | 7 |
|
7 | 8 | from openapi_spec_validator.exceptions import (
|
8 | 9 | ParameterDuplicateError, ExtraParametersError, UnresolvableParameterError,
|
9 | 10 | OpenAPIValidationError, DuplicateOperationIDError,
|
10 | 11 | )
|
11 | 12 | from openapi_spec_validator.decorators import ValidationErrorWrapper
|
12 |
| -from openapi_spec_validator.factories import Draft4ExtendedValidatorFactory |
13 | 13 | from openapi_spec_validator.managers import ResolverManager
|
14 | 14 |
|
15 | 15 | log = logging.getLogger(__name__)
|
@@ -149,10 +149,7 @@ def iter_errors(self, schema, require_properties=True):
|
149 | 149 | yield err
|
150 | 150 |
|
151 | 151 | def _iter_value_errors(self, schema, value):
|
152 |
| - resolver = RefResolver.from_schema(schema) |
153 |
| - validator = Draft4ExtendedValidatorFactory.from_resolver(resolver) |
154 |
| - for err in validator(schema, resolver=resolver).iter_errors(value): |
155 |
| - yield err |
| 152 | + return ValueValidator(self.dereferencer).iter_errors(schema, value) |
156 | 153 |
|
157 | 154 |
|
158 | 155 | class PathsValidator(object):
|
@@ -327,10 +324,23 @@ def iter_errors(self, parameter):
|
327 | 324 | yield err
|
328 | 325 |
|
329 | 326 | def _iter_value_errors(self, schema, value):
|
330 |
| - resolver = RefResolver.from_schema(schema) |
331 |
| - validator = Draft4ExtendedValidatorFactory.from_resolver(resolver) |
332 |
| - for err in validator(schema, resolver=resolver).iter_errors(value): |
333 |
| - yield err |
| 327 | + return ValueValidator(self.dereferencer).iter_errors(schema, value) |
334 | 328 |
|
335 | 329 | def _iter_schema_errors(self, schema):
|
336 | 330 | return SchemaValidator(self.dereferencer).iter_errors(schema)
|
| 331 | + |
| 332 | + |
| 333 | +class ValueValidator(object): |
| 334 | + |
| 335 | + def __init__(self, dereferencer): |
| 336 | + self.dereferencer = dereferencer |
| 337 | + |
| 338 | + @wraps_errors |
| 339 | + def iter_errors(self, schema, value): |
| 340 | + validator = OAS30Validator( |
| 341 | + schema, |
| 342 | + resolver=self.dereferencer.resolver_manager.resolver, |
| 343 | + format_checker=oas30_format_checker, |
| 344 | + ) |
| 345 | + for err in validator.iter_errors(value): |
| 346 | + yield err |
0 commit comments