diff --git a/openapi_spec_validator/validation/validators.py b/openapi_spec_validator/validation/validators.py index 796db96b..19016cb8 100644 --- a/openapi_spec_validator/validation/validators.py +++ b/openapi_spec_validator/validation/validators.py @@ -7,6 +7,8 @@ from functools import lru_cache from typing import cast +from referencing.exceptions import Unresolvable + from jsonschema.exceptions import ValidationError from jsonschema.protocols import Validator from jsonschema_path.handlers import default_handlers @@ -69,11 +71,17 @@ def __init__( ) def validate(self) -> None: - for err in self.iter_errors(): - raise err + try: + for err in self.iter_errors(): + raise err + except Unresolvable as exc: + raise ValidationError(str(exc)) from exc def is_valid(self) -> bool: - error = next(self.iter_errors(), None) + try: + error = next(self.iter_errors(), None) + except Unresolvable: + return False return error is None @property diff --git a/tests/integration/validation/test_validators.py b/tests/integration/validation/test_validators.py index 17a347d2..e6a6d59a 100644 --- a/tests/integration/validation/test_validators.py +++ b/tests/integration/validation/test_validators.py @@ -1,4 +1,5 @@ import pytest +from jsonschema.exceptions import ValidationError from jsonschema_path import SchemaPath from referencing.exceptions import Unresolvable @@ -65,7 +66,7 @@ def test_ref_failed(self, factory, spec_file): spec = factory.spec_from_file(spec_path) spec_url = factory.spec_file_url(spec_path) - with pytest.raises(Unresolvable): + with pytest.raises(ValidationError): OpenAPIV2SpecValidator(spec, base_uri=spec_url).validate() @@ -177,7 +178,7 @@ def test_ref_failed(self, factory, spec_file): spec = factory.spec_from_file(spec_path) spec_url = factory.spec_file_url(spec_path) - with pytest.raises(Unresolvable): + with pytest.raises(ValidationError): OpenAPIV30SpecValidator(spec, base_uri=spec_url).validate()