Skip to content

Commit 30400b6

Browse files
committed
fix: Callbacks forward ref support.
1 parent 1955d8c commit 30400b6

File tree

3 files changed

+87
-47
lines changed

3 files changed

+87
-47
lines changed

openapi_pydantic/v3/v3_0_3/__init__.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,39 @@
66
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#table-of-contents
77
"""
88

9-
from .open_api import OpenAPI as OpenAPI
10-
from .info import Info as Info
11-
from .contact import Contact as Contact
12-
from .license import License as License
13-
from .server import Server as Server
14-
from .server_variable import ServerVariable as ServerVariable
9+
from .callback import Callback as Callback
1510
from .components import Components as Components
16-
from .paths import Paths as Paths
17-
from .path_item import PathItem as PathItem
18-
from .operation import Operation as Operation
19-
from .external_documentation import ExternalDocumentation as ExternalDocumentation
20-
from .parameter import Parameter as Parameter, ParameterLocation as ParameterLocation
21-
from .request_body import RequestBody as RequestBody
22-
from .media_type import MediaType as MediaType
11+
from .contact import Contact as Contact
12+
from .discriminator import Discriminator as Discriminator
2313
from .encoding import Encoding as Encoding
24-
from .responses import Responses as Responses
25-
from .response import Response as Response
26-
from .callback import Callback as Callback
2714
from .example import Example as Example
28-
from .link import Link as Link
15+
from .external_documentation import ExternalDocumentation as ExternalDocumentation
2916
from .header import Header as Header
30-
from .tag import Tag as Tag
17+
from .info import Info as Info
18+
from .license import License as License
19+
from .link import Link as Link
20+
from .media_type import MediaType as MediaType
21+
from .oauth_flow import OAuthFlow as OAuthFlow
22+
from .oauth_flows import OAuthFlows as OAuthFlows
23+
from .open_api import OpenAPI as OpenAPI
24+
from .operation import Operation as Operation
25+
from .parameter import Parameter as Parameter
26+
from .parameter import ParameterLocation as ParameterLocation
27+
from .path_item import PathItem as PathItem
28+
from .paths import Paths as Paths
3129
from .reference import Reference as Reference
30+
from .request_body import RequestBody as RequestBody
31+
from .response import Response as Response
32+
from .responses import Responses as Responses
3233
from .schema import Schema as Schema
33-
from .discriminator import Discriminator as Discriminator
34-
from .xml import XML as XML
35-
from .security_scheme import SecurityScheme as SecurityScheme
36-
from .oauth_flows import OAuthFlows as OAuthFlows
37-
from .oauth_flow import OAuthFlow as OAuthFlow
3834
from .security_requirement import SecurityRequirement as SecurityRequirement
39-
35+
from .security_scheme import SecurityScheme as SecurityScheme
36+
from .server import Server as Server
37+
from .server_variable import ServerVariable as ServerVariable
38+
from .tag import Tag as Tag
39+
from .xml import XML as XML
4040

4141
# resolve forward references
4242
Encoding.update_forward_refs(Header=Header)
4343
Schema.update_forward_refs()
44+
Operation.update_forward_refs(PathItem=PathItem)

openapi_pydantic/v3/v3_1_0/__init__.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,39 @@
66
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#table-of-contents
77
"""
88

9-
from .open_api import OpenAPI as OpenAPI
10-
from .info import Info as Info
11-
from .contact import Contact as Contact
12-
from .license import License as License
13-
from .server import Server as Server
14-
from .server_variable import ServerVariable as ServerVariable
9+
from .callback import Callback as Callback
1510
from .components import Components as Components
16-
from .paths import Paths as Paths
17-
from .path_item import PathItem as PathItem
18-
from .operation import Operation as Operation
19-
from .external_documentation import ExternalDocumentation as ExternalDocumentation
20-
from .parameter import Parameter as Parameter, ParameterLocation as ParameterLocation
21-
from .request_body import RequestBody as RequestBody
22-
from .media_type import MediaType as MediaType
11+
from .contact import Contact as Contact
12+
from .discriminator import Discriminator as Discriminator
2313
from .encoding import Encoding as Encoding
24-
from .responses import Responses as Responses
25-
from .response import Response as Response
26-
from .callback import Callback as Callback
2714
from .example import Example as Example
28-
from .link import Link as Link
15+
from .external_documentation import ExternalDocumentation as ExternalDocumentation
2916
from .header import Header as Header
30-
from .tag import Tag as Tag
17+
from .info import Info as Info
18+
from .license import License as License
19+
from .link import Link as Link
20+
from .media_type import MediaType as MediaType
21+
from .oauth_flow import OAuthFlow as OAuthFlow
22+
from .oauth_flows import OAuthFlows as OAuthFlows
23+
from .open_api import OpenAPI as OpenAPI
24+
from .operation import Operation as Operation
25+
from .parameter import Parameter as Parameter
26+
from .parameter import ParameterLocation as ParameterLocation
27+
from .path_item import PathItem as PathItem
28+
from .paths import Paths as Paths
3129
from .reference import Reference as Reference
30+
from .request_body import RequestBody as RequestBody
31+
from .response import Response as Response
32+
from .responses import Responses as Responses
3233
from .schema import Schema as Schema
33-
from .discriminator import Discriminator as Discriminator
34-
from .xml import XML as XML
35-
from .security_scheme import SecurityScheme as SecurityScheme
36-
from .oauth_flows import OAuthFlows as OAuthFlows
37-
from .oauth_flow import OAuthFlow as OAuthFlow
3834
from .security_requirement import SecurityRequirement as SecurityRequirement
35+
from .security_scheme import SecurityScheme as SecurityScheme
36+
from .server import Server as Server
37+
from .server_variable import ServerVariable as ServerVariable
38+
from .tag import Tag as Tag
39+
from .xml import XML as XML
3940

4041
# resolve forward references
4142
Encoding.update_forward_refs(Header=Header)
4243
Schema.update_forward_refs()
44+
Operation.update_forward_refs(PathItem=PathItem)

tests/test_openapi.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import pytest
2+
3+
from openapi_pydantic.v3 import v3_0_3, v3_1_0
4+
5+
6+
@pytest.mark.parametrize("version", ["3.0.3", "3.1.0"])
7+
def test_parse_with_callback(version: str) -> None:
8+
data = {
9+
"openapi": version,
10+
"info": {"title": "API with Callback", "version": ""},
11+
"paths": {
12+
"/create": {
13+
"post": {
14+
"responses": {"200": {"description": "Success"}},
15+
"callbacks": {
16+
"event": {
17+
"callback": {
18+
"post": {
19+
"responses": {"200": {"description": "Success"}}
20+
}
21+
}
22+
}
23+
},
24+
}
25+
}
26+
},
27+
}
28+
29+
if version == "3.0.3":
30+
module = v3_0_3
31+
else:
32+
module = v3_1_0
33+
34+
open_api = module.OpenAPI.parse_obj(data)
35+
create_endpoint = open_api.paths["/create"]
36+
assert "200" in create_endpoint.post.responses
37+
assert "200" in create_endpoint.post.callbacks["event"]["callback"].post.responses

0 commit comments

Comments
 (0)