|
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