Skip to content

Commit 9f180a9

Browse files
authored
Merge pull request #717 from python-openapi/fix/deprecated-spec-validator-fix
Deprecated spec validator fix
2 parents 1b688bb + 536fa8d commit 9f180a9

22 files changed

+346
-243
lines changed

Diff for: openapi_core/spec/paths.py

+19-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
import warnings
12
from typing import Any
23
from typing import Hashable
34
from typing import Mapping
45
from typing import Type
56
from typing import TypeVar
67

8+
from jsonschema.validators import _UNSET
79
from jsonschema_spec import SchemaPath
8-
from openapi_spec_validator.validation import openapi_spec_validator_proxy
10+
from openapi_spec_validator import validate
911

1012
TSpec = TypeVar("TSpec", bound="Spec")
1113

@@ -20,11 +22,22 @@ def from_dict(
2022
*args: Any,
2123
**kwargs: Any,
2224
) -> TSpec:
23-
validator = kwargs.pop("validator", openapi_spec_validator_proxy)
24-
if validator is not None:
25-
base_uri = kwargs.get("base_uri", "")
26-
spec_url = kwargs.get("spec_url")
27-
validator.validate(data, base_uri=base_uri, spec_url=spec_url)
25+
if "validator" in kwargs:
26+
warnings.warn(
27+
"validator parameter is deprecated. Use spec_validator_cls instead.",
28+
DeprecationWarning,
29+
)
30+
validator = kwargs.pop("validator", _UNSET)
31+
spec_validator_cls = kwargs.pop("spec_validator_cls", _UNSET)
32+
base_uri = kwargs.get("base_uri", "")
33+
spec_url = kwargs.get("spec_url")
34+
if spec_validator_cls is not None:
35+
if spec_validator_cls is not _UNSET:
36+
validate(data, base_uri=base_uri, cls=spec_validator_cls)
37+
elif validator is _UNSET:
38+
validate(data, base_uri=base_uri)
39+
elif validator is not None:
40+
validator.validate(data, base_uri=base_uri, spec_url=spec_url)
2841

2942
return super().from_dict(data, *args, **kwargs)
3043

Diff for: openapi_core/unmarshalling/schemas/unmarshallers.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def __call__(self, value: Any) -> Optional[List[Any]]:
4545
def items_unmarshaller(self) -> "SchemaUnmarshaller":
4646
# sometimes we don't have any schema i.e. free-form objects
4747
items_schema = self.schema.get(
48-
"items", Spec.from_dict({}, validator=None)
48+
"items", Spec.from_dict({}, spec_validator_cls=None)
4949
)
5050
return self.schema_unmarshaller.evolve(items_schema)
5151

@@ -120,7 +120,7 @@ def _unmarshal_properties(
120120
# free-form object
121121
if additional_properties is True:
122122
additional_prop_schema = Spec.from_dict(
123-
{"nullable": True}, validator=None
123+
{"nullable": True}, spec_validator_cls=None
124124
)
125125
# defined schema
126126
else:

Diff for: poetry.lock

+23-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ isodate = "*"
6868
more-itertools = "*"
6969
parse = "*"
7070
openapi-schema-validator = "^0.6.0"
71-
openapi-spec-validator = "^0.6.0"
71+
openapi-spec-validator = "^0.7.1"
7272
requests = {version = "*", optional = true}
7373
werkzeug = "*"
7474
jsonschema-spec = "^0.2.3"

Diff for: tests/integration/contrib/django/data/v3.0/djangoproject/settings.py

-2
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,6 @@
103103

104104
USE_I18N = True
105105

106-
USE_L10N = True
107-
108106
USE_TZ = True
109107

110108

Diff for: tests/integration/contrib/requests/test_requests_validation.py

-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ def test_response_validator_path_pattern(self, response_unmarshaller):
4040
"http://localhost/browse/12/?q=string",
4141
json={"data": "data"},
4242
status=200,
43-
match_querystring=True,
4443
headers={"X-Rate-Limit": "12"},
4544
)
4645
request = requests.Request(

Diff for: tests/integration/schema/test_spec.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from base64 import b64encode
22

33
import pytest
4-
from openapi_spec_validator import openapi_v30_spec_validator
5-
from openapi_spec_validator import openapi_v31_spec_validator
4+
from openapi_spec_validator import OpenAPIV30SpecValidator
5+
from openapi_spec_validator import OpenAPIV31SpecValidator
66

77
from openapi_core import Spec
88
from openapi_core import V30RequestValidator
@@ -32,7 +32,9 @@ def spec_dict(self, factory):
3232
@pytest.fixture
3333
def spec(self, spec_dict, base_uri):
3434
return Spec.from_dict(
35-
spec_dict, base_uri=base_uri, validator=openapi_v30_spec_validator
35+
spec_dict,
36+
base_uri=base_uri,
37+
spec_validator_cls=OpenAPIV30SpecValidator,
3638
)
3739

3840
@pytest.fixture
@@ -327,7 +329,7 @@ def spec(self, spec_dict, base_uri):
327329
return Spec.from_dict(
328330
spec_dict,
329331
base_uri=base_uri,
330-
validator=openapi_v31_spec_validator,
332+
spec_validator_cls=OpenAPIV31SpecValidator,
331333
)
332334

333335
@pytest.fixture

0 commit comments

Comments
 (0)