Skip to content

Commit 44de9c4

Browse files
committed
Validation schema errors iter fix
1 parent 57cc70a commit 44de9c4

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

openapi_core/schema/schemas/exceptions.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,19 @@ def __str__(self):
4848
class InvalidSchemaValue(ValidateError):
4949
value = attr.ib()
5050
type = attr.ib()
51-
schema_errors = attr.ib()
51+
_schema_errors = attr.ib(default=None)
52+
_schema_errors_iter = attr.ib(factory=list)
53+
54+
@property
55+
def schema_errors(self):
56+
if self._schema_errors is None:
57+
self._schema_errors = list(self._schema_errors_iter)
58+
return self._schema_errors
5259

5360
def __str__(self):
54-
errors = list(self.schema_errors)
5561
return (
5662
"Value {value} not valid for schema of type {type}: {errors}"
57-
).format(value=self.value, type=self.type, errors=errors)
63+
).format(value=self.value, type=self.type, errors=self.schema_errors)
5864

5965

6066
class UnmarshallerError(UnmarshalError):

openapi_core/schema/schemas/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,8 @@ def validate(self, value, resolver=None):
194194
return validator.validate(value)
195195
except ValidationError:
196196
errors_iter = validator.iter_errors(value)
197-
raise InvalidSchemaValue(value, self.type, errors_iter)
197+
raise InvalidSchemaValue(
198+
value, self.type, schema_errors_iter=errors_iter)
198199

199200
def unmarshal(self, value, custom_formatters=None, strict=True):
200201
"""Unmarshal parameter from the value."""

tests/integration/validation/test_petstore.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,14 @@ def test_get_pets_invalid_response(self, spec, response_validator):
175175

176176
response_result = response_validator.validate(request, response)
177177

178-
errors = response_result.errors[0].original_exception.schema_errors
178+
original_exc = response_result.errors[0].original_exception
179179
assert response_result.errors == [
180180
InvalidMediaTypeValue(
181181
original_exception=InvalidSchemaValue(
182182
type=SchemaType.OBJECT,
183183
value=data_json,
184-
schema_errors=errors,
184+
schema_errors=original_exc.schema_errors,
185+
schema_errors_iter=original_exc._schema_errors_iter,
185186
),
186187
),
187188
]

0 commit comments

Comments
 (0)