Skip to content

Commit 000a15d

Browse files
committed
shortcuts refactor and validators explicit usage
1 parent 1ed28ff commit 000a15d

File tree

5 files changed

+31
-80
lines changed

5 files changed

+31
-80
lines changed

README.rst

+9-15
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,6 @@ By default, OpenAPI spec version is detected. To validate spec:
9090
...
9191
OpenAPIValidationError: 'info' is a required property
9292
93-
In order to explicitly validate a:
94-
95-
* Swagger / OpenAPI 2.0 spec, import ``validate_v2_spec``
96-
* OpenAPI 3.0 spec, import ``validate_v30_spec``
97-
* OpenAPI 3.1 spec, import ``validate_v31_spec``
98-
99-
instead of ``validate_spec``.
100-
101-
You can also explicitly import ``validate_v3_spec`` which is a shortcut to the latest v3 release.
102-
10393
Add ``spec_url`` to validate spec with relative files:
10494

10595
.. code:: python
@@ -117,13 +107,17 @@ You can also validate spec from url:
117107
118108
In order to explicitly validate a:
119109

120-
* Swagger / OpenAPI 2.0 spec url, import ``validate_v2_spec_url``
121-
* OpenAPI 3.0 spec url, import ``validate_v30_spec_url``
122-
* OpenAPI 3.1 spec url, import ``validate_v31_spec_url``
110+
* Swagger / OpenAPI 2.0 spec, import ``openapi_v2_spec_validator``
111+
* OpenAPI 3.0 spec, import ``openapi_v30_spec_validator``
112+
* OpenAPI 3.1 spec, import ``openapi_v31_spec_validator``
113+
114+
and pass the validator to ``validate_spec`` or ``validate_spec_url`` function:
115+
116+
.. code:: python
123117
124-
instead of ``validate_spec_url``.
118+
validate_spec(spec_dict, validator=openapi_v31_spec_validator)
125119
126-
You can also explicitly import ``validate_v3_spec_url`` which is a shortcut to the latest v3 release.
120+
You can also explicitly import ``openapi_v3_spec_validator`` which is a shortcut to the latest v3 release.
127121

128122
If you want to iterate through validation errors:
129123

openapi_spec_validator/__init__.py

+2-28
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from jsonschema_spec.handlers import default_handlers
22

3-
from openapi_spec_validator.shortcuts import validate_spec_factory
4-
from openapi_spec_validator.shortcuts import validate_spec_url_factory
5-
from openapi_spec_validator.validation import openapi_spec_validator_proxy
3+
from openapi_spec_validator.shortcuts import validate_spec
4+
from openapi_spec_validator.shortcuts import validate_spec_url
65
from openapi_spec_validator.validation import openapi_v2_spec_validator
76
from openapi_spec_validator.validation import openapi_v3_spec_validator
87
from openapi_spec_validator.validation import openapi_v30_spec_validator
@@ -19,31 +18,6 @@
1918
"openapi_v3_spec_validator",
2019
"openapi_v30_spec_validator",
2120
"openapi_v31_spec_validator",
22-
"validate_v2_spec",
23-
"validate_v3_spec",
24-
"validate_v30_spec",
25-
"validate_v31_spec",
2621
"validate_spec",
27-
"validate_v2_spec_url",
28-
"validate_v3_spec_url",
29-
"validate_v30_spec_url",
30-
"validate_v31_spec_url",
3122
"validate_spec_url",
3223
]
33-
34-
# shortcuts
35-
validate_v2_spec = validate_spec_factory(openapi_v2_spec_validator)
36-
validate_v2_spec_url = validate_spec_url_factory(openapi_v2_spec_validator)
37-
38-
validate_v30_spec = validate_spec_factory(openapi_v30_spec_validator)
39-
validate_v30_spec_url = validate_spec_url_factory(openapi_v30_spec_validator)
40-
41-
validate_v31_spec = validate_spec_factory(openapi_v31_spec_validator)
42-
validate_v31_spec_url = validate_spec_url_factory(openapi_v31_spec_validator)
43-
44-
validate_spec = validate_spec_factory(openapi_spec_validator_proxy)
45-
validate_spec_url = validate_spec_url_factory(openapi_spec_validator_proxy)
46-
47-
# aliases to the latest v3 version
48-
validate_v3_spec = validate_v31_spec
49-
validate_v3_spec_url = validate_v31_spec_url

openapi_spec_validator/shortcuts.py

+13-16
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
"""OpenAPI spec validator shortcuts module."""
22
from typing import Any
3-
from typing import Callable
43
from typing import Hashable
54
from typing import Mapping
65

76
from jsonschema_spec.handlers import all_urls_handler
87

8+
from openapi_spec_validator.validation import openapi_spec_validator_proxy
99
from openapi_spec_validator.validation.protocols import SupportsValidation
1010

1111

12-
def validate_spec_factory(
13-
validator: SupportsValidation,
14-
) -> Callable[[Mapping[Hashable, Any], str], None]:
15-
def validate(spec: Mapping[Hashable, Any], spec_url: str = "") -> None:
16-
return validator.validate(spec, spec_url=spec_url)
12+
def validate_spec(
13+
spec: Mapping[Hashable, Any],
14+
spec_url: str = "",
15+
validator: SupportsValidation = openapi_spec_validator_proxy,
16+
) -> None:
17+
return validator.validate(spec, spec_url=spec_url)
1718

18-
return validate
1919

20-
21-
def validate_spec_url_factory(
22-
validator: SupportsValidation,
23-
) -> Callable[[str], None]:
24-
def validate(spec_url: str) -> None:
25-
spec = all_urls_handler(spec_url)
26-
return validator.validate(spec, spec_url=spec_url)
27-
28-
return validate
20+
def validate_spec_url(
21+
spec_url: str,
22+
validator: SupportsValidation = openapi_spec_validator_proxy,
23+
) -> None:
24+
spec = all_urls_handler(spec_url)
25+
return validator.validate(spec, spec_url=spec_url)

openapi_spec_validator/validation/proxies.py

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212

1313
class DetectValidatorProxy:
14-
1514
def __init__(self, choices: Mapping[Tuple[str, str], SpecValidator]):
1615
self.choices = choices
1716

tests/integration/test_shortcuts.py

+7-20
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@
33
from openapi_spec_validator import openapi_v2_spec_validator
44
from openapi_spec_validator import openapi_v30_spec_validator
55
from openapi_spec_validator import validate_spec
6-
from openapi_spec_validator import validate_spec_factory
76
from openapi_spec_validator import validate_spec_url
8-
from openapi_spec_validator import validate_spec_url_factory
9-
from openapi_spec_validator import validate_v2_spec
10-
from openapi_spec_validator import validate_v2_spec_url
11-
from openapi_spec_validator import validate_v30_spec
12-
from openapi_spec_validator import validate_v30_spec_url
137
from openapi_spec_validator.validation.exceptions import OpenAPIValidationError
148
from openapi_spec_validator.validation.exceptions import ValidatorDetectError
159

@@ -50,9 +44,7 @@ def test_valid(self, factory, spec_file):
5044
spec_url = factory.spec_file_url(spec_path)
5145

5246
validate_spec(spec)
53-
validate_v2_spec(spec)
54-
55-
validate_spec_factory(openapi_v2_spec_validator)(spec, spec_url)
47+
validate_spec(spec, validator=openapi_v2_spec_validator)
5648

5749
@pytest.mark.parametrize(
5850
"spec_file",
@@ -65,7 +57,7 @@ def test_falied(self, factory, spec_file):
6557
spec = factory.spec_from_file(spec_path)
6658

6759
with pytest.raises(OpenAPIValidationError):
68-
validate_v2_spec(spec)
60+
validate_spec(spec, validator=openapi_v2_spec_validator)
6961

7062

7163
class TestLocalValidatev30Spec:
@@ -87,9 +79,8 @@ def test_valid(self, factory, spec_file):
8779
spec_url = factory.spec_file_url(spec_path)
8880

8981
validate_spec(spec)
90-
validate_v30_spec(spec)
91-
92-
validate_spec_factory(openapi_v30_spec_validator)(spec, spec_url)
82+
validate_spec(spec, spec_url=spec_url)
83+
validate_spec(spec, validator=openapi_v30_spec_validator)
9384

9485
@pytest.mark.parametrize(
9586
"spec_file",
@@ -102,7 +93,7 @@ def test_falied(self, factory, spec_file):
10293
spec = factory.spec_from_file(spec_path)
10394

10495
with pytest.raises(OpenAPIValidationError):
105-
validate_v30_spec(spec)
96+
validate_spec(spec, validator=openapi_v30_spec_validator)
10697

10798

10899
@pytest.mark.network
@@ -130,9 +121,7 @@ def test_valid(self, spec_file):
130121
spec_url = self.remote_test_suite_file_path(spec_file)
131122

132123
validate_spec_url(spec_url)
133-
validate_v2_spec_url(spec_url)
134-
135-
validate_spec_url_factory(openapi_v2_spec_validator)(spec_url)
124+
validate_spec_url(spec_url, validator=openapi_v2_spec_validator)
136125

137126

138127
@pytest.mark.network
@@ -160,6 +149,4 @@ def test_valid(self, spec_file):
160149
spec_url = self.remote_test_suite_file_path(spec_file)
161150

162151
validate_spec_url(spec_url)
163-
validate_v30_spec_url(spec_url)
164-
165-
validate_spec_url_factory(openapi_v30_spec_validator)(spec_url)
152+
validate_spec_url(spec_url, validator=openapi_v30_spec_validator)

0 commit comments

Comments
 (0)