Skip to content

Commit 3b9dffe

Browse files
committed
Fix for correct forward reference handling
1 parent a0ef768 commit 3b9dffe

File tree

8 files changed

+95
-16
lines changed

8 files changed

+95
-16
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Added
66
- Add `v3.v3_0_3.util` for users who still wants to use v3.0.3 OpenAPI with `PydanticSchema`
7+
- Fix for correct forward reference handling
78

89

910
## v1.2.0 - 2021-06-28

openapi_schema_pydantic/v3/v3_0_3/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,8 @@
3636
from .oauth_flows import OAuthFlows
3737
from .oauth_flow import OAuthFlow
3838
from .security_requirement import SecurityRequirement
39+
40+
41+
# resolve forward references
42+
Encoding.update_forward_refs(Header=Header)
43+
Schema.update_forward_refs()

openapi_schema_pydantic/v3/v3_0_3/schema.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,3 @@ class Config:
554554
},
555555
]
556556
}
557-
558-
559-
Schema.update_forward_refs()

openapi_schema_pydantic/v3/v3_1_0/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@
3636
from .oauth_flows import OAuthFlows
3737
from .oauth_flow import OAuthFlow
3838
from .security_requirement import SecurityRequirement
39+
40+
# resolve forward references
41+
Encoding.update_forward_refs(Header=Header)
42+
Schema.update_forward_refs()

openapi_schema_pydantic/v3/v3_1_0/schema.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -914,6 +914,3 @@ class Config:
914914
},
915915
]
916916
}
917-
918-
919-
Schema.update_forward_refs()

requirements.txt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# project dependencies
2-
pydantic==1.6.2
3-
4-
# code formatting
5-
black==21.6b0
6-
7-
# test tool
8-
pytest==6.2.4
2+
pydantic==1.8.2
93

104
# PyPi
11-
twine==3.4.1
5+
twine==3.4.2
6+
7+
# dev dependencies
8+
# black
9+
# pytest

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55

66
setuptools.setup(
77
name="openapi-schema-pydantic",
8-
version="1.2.0",
8+
version="1.2.1",
99
author="Kuimono",
1010
description="OpenAPI (v3) specification schema as pydantic class",
1111
long_description=long_description,
1212
long_description_content_type="text/markdown",
1313
url="https://github.com/kuimono/openapi-schema-pydantic",
1414
packages=setuptools.find_packages(exclude=["tests"]),
15-
install_requires=["pydantic>=1.5.1"],
15+
install_requires=["pydantic>=1.8.2"],
1616
tests_require=["pytest"],
1717
classifiers=[
1818
"Programming Language :: Python :: 3",
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from openapi_schema_pydantic.v3.v3_0_3 import (
2+
OpenAPI,
3+
Info,
4+
Contact,
5+
License,
6+
Server,
7+
ServerVariable,
8+
Components,
9+
Paths,
10+
PathItem,
11+
Operation,
12+
ExternalDocumentation,
13+
Parameter,
14+
RequestBody,
15+
MediaType,
16+
Encoding,
17+
Responses,
18+
Response,
19+
Callback,
20+
Example,
21+
Link,
22+
Header,
23+
Tag,
24+
Reference,
25+
Schema,
26+
Discriminator,
27+
XML,
28+
SecurityScheme,
29+
OAuthFlows,
30+
OAuthFlow,
31+
SecurityRequirement,
32+
)
33+
34+
35+
def test_config_example():
36+
all_types = [
37+
OpenAPI,
38+
Info,
39+
Contact,
40+
License,
41+
Server,
42+
ServerVariable,
43+
Components,
44+
Paths,
45+
PathItem,
46+
Operation,
47+
ExternalDocumentation,
48+
Parameter,
49+
RequestBody,
50+
MediaType,
51+
Encoding,
52+
Responses,
53+
Response,
54+
Callback,
55+
Example,
56+
Link,
57+
Header,
58+
Tag,
59+
Reference,
60+
Schema,
61+
Discriminator,
62+
XML,
63+
SecurityScheme,
64+
OAuthFlows,
65+
OAuthFlow,
66+
SecurityRequirement,
67+
]
68+
for schema_type in all_types:
69+
_assert_config_examples(schema_type)
70+
71+
72+
def _assert_config_examples(schema_type):
73+
if getattr(schema_type, "Config", None) and getattr(schema_type.Config, "schema_extra", None):
74+
examples = schema_type.Config.schema_extra.get("examples")
75+
for example_dict in examples:
76+
obj = schema_type(**example_dict)
77+
assert obj.__fields_set__

0 commit comments

Comments
 (0)