Skip to content

Commit fe37888

Browse files
committed
Default value validation with OAS30Validator
1 parent c7fc21c commit fe37888

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

openapi_spec_validator/validators.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
import string
33

44
from jsonschema.validators import RefResolver
5+
from openapi_schema_validator import OAS30Validator, oas30_format_checker
56
from six import iteritems
67

78
from openapi_spec_validator.exceptions import (
89
ParameterDuplicateError, ExtraParametersError, UnresolvableParameterError,
910
OpenAPIValidationError, DuplicateOperationIDError,
1011
)
1112
from openapi_spec_validator.decorators import ValidationErrorWrapper
12-
from openapi_spec_validator.factories import Draft4ExtendedValidatorFactory
1313
from openapi_spec_validator.managers import ResolverManager
1414

1515
log = logging.getLogger(__name__)
@@ -149,10 +149,7 @@ def iter_errors(self, schema, require_properties=True):
149149
yield err
150150

151151
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)
156153

157154

158155
class PathsValidator(object):
@@ -327,10 +324,23 @@ def iter_errors(self, parameter):
327324
yield err
328325

329326
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)
334328

335329
def _iter_schema_errors(self, schema):
336330
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

tests/integration/test_validators.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -322,12 +322,7 @@ def test_parameter_default_value_with_reference(self, validator):
322322
'paths': {
323323
'/test/': {
324324
'get': {
325-
'responses': {
326-
'200': {
327-
'description': 'OK',
328-
'schema': {'type': 'object'},
329-
},
330-
},
325+
'responses': {},
331326
'parameters': [
332327
{
333328
'name': 'param1',

0 commit comments

Comments
 (0)