2
2
import string
3
3
4
4
from jsonschema .validators import RefResolver
5
- from jsonschema .exceptions import ValidationError
6
- from six import iteritems , raise_from
5
+ from six import iteritems
7
6
8
7
from openapi_spec_validator .exceptions import (
9
8
ParameterDuplicateError , ExtraParametersError , UnresolvableParameterError ,
10
9
OpenAPIValidationError
11
10
)
11
+ from openapi_spec_validator .decorators import ValidationErrorWrapper
12
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__ )
16
16
17
+ wraps_errors = ValidationErrorWrapper (OpenAPIValidationError )
18
+
17
19
18
20
def is_ref (spec ):
19
21
return isinstance (spec , dict ) and '$ref' in spec
@@ -43,12 +45,9 @@ def __init__(self, validator_factory, resolver_handlers):
43
45
44
46
def validate (self , spec , spec_url = '' ):
45
47
for err in self .iter_errors (spec , spec_url = spec_url ):
46
- if isinstance (err , ValidationError ):
47
- # wrap jsonschema exceptions with library specific version
48
- raise raise_from (OpenAPIValidationError .create_from (err ), err )
49
- else :
50
- raise err
48
+ raise err
51
49
50
+ @wraps_errors
52
51
def iter_errors (self , spec , spec_url = '' ):
53
52
spec_resolver = self ._get_resolver (spec_url , spec )
54
53
dereferencer = self ._get_dereferencer (spec_resolver )
@@ -87,6 +86,7 @@ class ComponentsValidator(object):
87
86
def __init__ (self , dereferencer ):
88
87
self .dereferencer = dereferencer
89
88
89
+ @wraps_errors
90
90
def iter_errors (self , components ):
91
91
components_deref = self .dereferencer .dereference (components )
92
92
@@ -103,6 +103,7 @@ class SchemasValidator(object):
103
103
def __init__ (self , dereferencer ):
104
104
self .dereferencer = dereferencer
105
105
106
+ @wraps_errors
106
107
def iter_errors (self , schemas ):
107
108
schemas_deref = self .dereferencer .dereference (schemas )
108
109
for name , schema in iteritems (schemas_deref ):
@@ -118,6 +119,7 @@ class SchemaValidator(object):
118
119
def __init__ (self , dereferencer ):
119
120
self .dereferencer = dereferencer
120
121
122
+ @wraps_errors
121
123
def iter_errors (self , schema , require_properties = True ):
122
124
schema_deref = self .dereferencer .dereference (schema )
123
125
@@ -158,6 +160,7 @@ class PathsValidator(object):
158
160
def __init__ (self , dereferencer ):
159
161
self .dereferencer = dereferencer
160
162
163
+ @wraps_errors
161
164
def iter_errors (self , paths ):
162
165
paths_deref = self .dereferencer .dereference (paths )
163
166
for url , path_item in iteritems (paths_deref ):
@@ -173,6 +176,7 @@ class PathValidator(object):
173
176
def __init__ (self , dereferencer ):
174
177
self .dereferencer = dereferencer
175
178
179
+ @wraps_errors
176
180
def iter_errors (self , url , path_item ):
177
181
path_item_deref = self .dereferencer .dereference (path_item )
178
182
@@ -192,6 +196,7 @@ class PathItemValidator(object):
192
196
def __init__ (self , dereferencer ):
193
197
self .dereferencer = dereferencer
194
198
199
+ @wraps_errors
195
200
def iter_errors (self , url , path_item ):
196
201
path_item_deref = self .dereferencer .dereference (path_item )
197
202
@@ -220,6 +225,7 @@ class OperationValidator(object):
220
225
def __init__ (self , dereferencer ):
221
226
self .dereferencer = dereferencer
222
227
228
+ @wraps_errors
223
229
def iter_errors (self , url , name , operation , path_parameters = None ):
224
230
path_parameters = path_parameters or []
225
231
operation_deref = self .dereferencer .dereference (operation )
@@ -261,6 +267,7 @@ class ParametersValidator(object):
261
267
def __init__ (self , dereferencer ):
262
268
self .dereferencer = dereferencer
263
269
270
+ @wraps_errors
264
271
def iter_errors (self , parameters ):
265
272
seen = set ()
266
273
for parameter in parameters :
@@ -284,6 +291,7 @@ class ParameterValidator(object):
284
291
def __init__ (self , dereferencer ):
285
292
self .dereferencer = dereferencer
286
293
294
+ @wraps_errors
287
295
def iter_errors (self , parameter ):
288
296
if 'schema' in parameter :
289
297
schema = parameter ['schema' ]
0 commit comments