openapi-python-generator 1.1.2.dev1734089718__py3-none-any.whl → 1.2.1.dev1757310194__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openapi_python_generator/__init__.py +2 -1
- openapi_python_generator/__main__.py +21 -6
- openapi_python_generator/common.py +15 -0
- openapi_python_generator/generate_data.py +112 -65
- openapi_python_generator/language_converters/python/api_config_generator.py +12 -6
- openapi_python_generator/language_converters/python/generator.py +8 -4
- openapi_python_generator/language_converters/python/model_generator.py +191 -54
- openapi_python_generator/language_converters/python/service_generator.py +159 -62
- openapi_python_generator/language_converters/python/templates/aiohttp.jinja2 +10 -9
- openapi_python_generator/language_converters/python/templates/httpx.jinja2 +8 -5
- openapi_python_generator/language_converters/python/templates/models.jinja2 +5 -3
- openapi_python_generator/language_converters/python/templates/models_pydantic_2.jinja2 +5 -3
- openapi_python_generator/language_converters/python/templates/requests.jinja2 +8 -5
- openapi_python_generator/language_converters/python/templates/service.jinja2 +2 -1
- openapi_python_generator/models.py +16 -2
- openapi_python_generator/parsers/__init__.py +13 -0
- openapi_python_generator/parsers/openapi_30.py +65 -0
- openapi_python_generator/parsers/openapi_31.py +65 -0
- openapi_python_generator/py.typed +0 -0
- openapi_python_generator/version_detector.py +70 -0
- {openapi_python_generator-1.1.2.dev1734089718.dist-info → openapi_python_generator-1.2.1.dev1757310194.dist-info}/METADATA +3 -3
- openapi_python_generator-1.2.1.dev1757310194.dist-info/RECORD +32 -0
- openapi_python_generator-1.1.2.dev1734089718.dist-info/RECORD +0 -27
- {openapi_python_generator-1.1.2.dev1734089718.dist-info → openapi_python_generator-1.2.1.dev1757310194.dist-info}/LICENSE +0 -0
- {openapi_python_generator-1.1.2.dev1734089718.dist-info → openapi_python_generator-1.2.1.dev1757310194.dist-info}/WHEEL +0 -0
- {openapi_python_generator-1.1.2.dev1734089718.dist-info → openapi_python_generator-1.2.1.dev1757310194.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
OpenAPI version detection utilities.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Dict, Any, Literal
|
|
6
|
+
|
|
7
|
+
OpenAPIVersion = Literal["3.0", "3.1"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def detect_openapi_version(spec_data: Dict[str, Any]) -> OpenAPIVersion:
|
|
11
|
+
"""
|
|
12
|
+
Detect the OpenAPI version from specification data.
|
|
13
|
+
|
|
14
|
+
Performs basic validation to ensure the specification is well-formed enough
|
|
15
|
+
to route to the appropriate parser. The actual parser will handle detailed
|
|
16
|
+
validation of the specification content.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
spec_data: Dictionary containing OpenAPI specification
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
OpenAPIVersion: Either "3.0" or "3.1"
|
|
23
|
+
|
|
24
|
+
Raises:
|
|
25
|
+
ValueError: If the specification is malformed or has unsupported version
|
|
26
|
+
"""
|
|
27
|
+
# Basic validation: must be a dictionary
|
|
28
|
+
if not isinstance(spec_data, dict):
|
|
29
|
+
raise ValueError("OpenAPI specification must be a dictionary/object")
|
|
30
|
+
|
|
31
|
+
# Basic validation: must have openapi field
|
|
32
|
+
if "openapi" not in spec_data:
|
|
33
|
+
raise ValueError("Missing required 'openapi' field in specification")
|
|
34
|
+
|
|
35
|
+
openapi_version = spec_data.get("openapi")
|
|
36
|
+
|
|
37
|
+
# Basic validation: openapi field must be a string
|
|
38
|
+
if not isinstance(openapi_version, str):
|
|
39
|
+
raise ValueError("'openapi' field must be a string")
|
|
40
|
+
|
|
41
|
+
# Basic validation: must not be empty
|
|
42
|
+
if not openapi_version.strip():
|
|
43
|
+
raise ValueError("'openapi' field cannot be empty")
|
|
44
|
+
|
|
45
|
+
# Version detection
|
|
46
|
+
if openapi_version.startswith("3.0"):
|
|
47
|
+
return "3.0"
|
|
48
|
+
elif openapi_version.startswith("3.1"):
|
|
49
|
+
return "3.1"
|
|
50
|
+
else:
|
|
51
|
+
raise ValueError(
|
|
52
|
+
f"Unsupported OpenAPI version: {openapi_version}. "
|
|
53
|
+
f"Only OpenAPI 3.0.x and 3.1.x are supported."
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def is_openapi_30(spec_data: Dict[str, Any]) -> bool:
|
|
58
|
+
"""Check if the specification is OpenAPI 3.0.x"""
|
|
59
|
+
try:
|
|
60
|
+
return detect_openapi_version(spec_data) == "3.0"
|
|
61
|
+
except ValueError:
|
|
62
|
+
return False
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def is_openapi_31(spec_data: Dict[str, Any]) -> bool:
|
|
66
|
+
"""Check if the specification is OpenAPI 3.1.x"""
|
|
67
|
+
try:
|
|
68
|
+
return detect_openapi_version(spec_data) == "3.1"
|
|
69
|
+
except ValueError:
|
|
70
|
+
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: openapi-python-generator
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.2.1.dev1757310194
|
|
4
4
|
Summary: Openapi Python Generator
|
|
5
5
|
Home-page: https://github.com/MarcoMuellner/openapi-python-generator
|
|
6
6
|
License: MIT
|
|
@@ -18,9 +18,9 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
18
18
|
Requires-Dist: Jinja2 (>=3.1.2,<4.0.0)
|
|
19
19
|
Requires-Dist: black (>=21.10b0)
|
|
20
20
|
Requires-Dist: click (>=8.1.3,<9.0.0)
|
|
21
|
-
Requires-Dist: httpx[all] (>=0.
|
|
21
|
+
Requires-Dist: httpx[all] (>=0.28.0,<0.29.0)
|
|
22
22
|
Requires-Dist: isort (>=5.10.1)
|
|
23
|
-
Requires-Dist: openapi-pydantic (>=0.5.
|
|
23
|
+
Requires-Dist: openapi-pydantic (>=0.5.1,<0.6.0)
|
|
24
24
|
Requires-Dist: orjson (>=3.9.15,<4.0.0)
|
|
25
25
|
Requires-Dist: pydantic (>=2.10.2,<3.0.0)
|
|
26
26
|
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
openapi_python_generator/__init__.py,sha256=2c_kCv_u-hAn0cokNP8H5iBBqvLxJiZdyxytoj057ss,478
|
|
2
|
+
openapi_python_generator/__main__.py,sha256=K3dIu92AsNu6u8GSzW772ZT5FcK4TJs8jSTzR0deTDk,2445
|
|
3
|
+
openapi_python_generator/common.py,sha256=JSpvogxMJ9remGpR64hiesMtc2yeIYzbXPagxnXypAs,1236
|
|
4
|
+
openapi_python_generator/generate_data.py,sha256=HryFq0ZaUxGGt0gn49Sumt5juRKk3s3T35dXi-a2n5c,8127
|
|
5
|
+
openapi_python_generator/language_converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
openapi_python_generator/language_converters/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
openapi_python_generator/language_converters/python/api_config_generator.py,sha256=Ig3PnOkGuATagIM6OQNZN1ZFtH6MvYXrEhFENK7Qah0,1101
|
|
8
|
+
openapi_python_generator/language_converters/python/common.py,sha256=EnHbqFCK2DjYSc8TyWRlRc-9aP9Z85o7M_lV5UVRdAw,1465
|
|
9
|
+
openapi_python_generator/language_converters/python/generator.py,sha256=3IeLKa6DU13rtMIAUU4rmYSs0oSM4fhYL-ZbObL2bDY,1724
|
|
10
|
+
openapi_python_generator/language_converters/python/jinja_config.py,sha256=Vr_BGdWlFMUvdojSdaHKqEX8U52mU42qKW3UaeXLW5w,977
|
|
11
|
+
openapi_python_generator/language_converters/python/model_generator.py,sha256=mYT-5I-tgfNjvtKmcaLlBLvRzxE3r5Leus1g8lf2h9w,19337
|
|
12
|
+
openapi_python_generator/language_converters/python/service_generator.py,sha256=Xenwatmu8q3-7istLUdXFFl5enn51-UuLONa9gbWFkI,17372
|
|
13
|
+
openapi_python_generator/language_converters/python/templates/aiohttp.jinja2,sha256=Ym3-KX8JH9-V75GqkfcXVgh7rnqlkOQU5DLaNd1Wma0,2135
|
|
14
|
+
openapi_python_generator/language_converters/python/templates/apiconfig.jinja2,sha256=bvYMJV6YB2NZLLcqwozISdS86XLH8J6D8o3ZpfgJCjc,1256
|
|
15
|
+
openapi_python_generator/language_converters/python/templates/apiconfig_pydantic_2.jinja2,sha256=_MzcHYEq9aoqSUEhZ-5SLbO80zgBeJnx5d7q3Q_usSo,1319
|
|
16
|
+
openapi_python_generator/language_converters/python/templates/enum.jinja2,sha256=9R9Nv1g8GykflCWm9HgxCmSWvIJ9FTNkXlXOZSBaZvw,242
|
|
17
|
+
openapi_python_generator/language_converters/python/templates/httpx.jinja2,sha256=mg4QjPOAJwQY9BSxOsY1MRkvnaeU8_nbxTRCSGGU0Bk,2300
|
|
18
|
+
openapi_python_generator/language_converters/python/templates/models.jinja2,sha256=5nKSOjbqGkK91wTR6AaSFQMDW0P4hR6fV-7oaVCPfwc,810
|
|
19
|
+
openapi_python_generator/language_converters/python/templates/models_pydantic_2.jinja2,sha256=-cX_OvwItvrDVk9dssgZ2BowMFMNu3YfKEcA9XU0_bM,916
|
|
20
|
+
openapi_python_generator/language_converters/python/templates/requests.jinja2,sha256=8R3S5M26vQol-rXHuNVYuG4qc_skC9-G8x-6AZlqTXg,2043
|
|
21
|
+
openapi_python_generator/language_converters/python/templates/service.jinja2,sha256=tt0Iu_JLaAlMPU73KTM7yntQjnkdvve53ShjgAGcmqY,213
|
|
22
|
+
openapi_python_generator/models.py,sha256=N3FW2VWqUOZB-S5dr0BagvvGB7uSoWBUB9qHZHVzZjM,2028
|
|
23
|
+
openapi_python_generator/parsers/__init__.py,sha256=LjJ_WKJxx3vWBdFuKMYXoU1u2pTLTRcu0qA99EW0Jjs,300
|
|
24
|
+
openapi_python_generator/parsers/openapi_30.py,sha256=ABQ4X7xUQ1mhoZ2y--csDlr_az8N4htMU64AnwTAO5M,1861
|
|
25
|
+
openapi_python_generator/parsers/openapi_31.py,sha256=fnR84jjcr2OHSsESdr4Ct7_v8ce4HiSkeXMByyJG39Q,1861
|
|
26
|
+
openapi_python_generator/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
openapi_python_generator/version_detector.py,sha256=qAfMboMACBqL8DzpEnUKCpC0aklejP0nblg7kKHw2FU,2142
|
|
28
|
+
openapi_python_generator-1.2.1.dev1757310194.dist-info/METADATA,sha256=L0vJM3ZAi2qngRchpkbzP1xsfQgrLUiUFU9WY67JZ8Y,5440
|
|
29
|
+
openapi_python_generator-1.2.1.dev1757310194.dist-info/LICENSE,sha256=0myanGwJ2vUOZN12aN95o0My6XEysnnVlbKikYw3pHg,1070
|
|
30
|
+
openapi_python_generator-1.2.1.dev1757310194.dist-info/entry_points.txt,sha256=hqE8T8yX5Pkeb2g__7yQrEazkBPwNgTbEHmoOkaYh80,83
|
|
31
|
+
openapi_python_generator-1.2.1.dev1757310194.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
|
32
|
+
openapi_python_generator-1.2.1.dev1757310194.dist-info/RECORD,,
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
openapi_python_generator/__init__.py,sha256=E5l6Eqmc06BB1tUF2J7GP_0OARgPdRAjAXR-sQJ6CrI,476
|
|
2
|
-
openapi_python_generator/__main__.py,sha256=-iKn5RQ1L71F2LvfVIirlxmd93gmJ4q7Gs2DgCiolnQ,2153
|
|
3
|
-
openapi_python_generator/common.py,sha256=BlIkBfSVvlMR6wwAsmbye6-MBR27-mquLpjs51gw3QE,1022
|
|
4
|
-
openapi_python_generator/generate_data.py,sha256=BEhDiN_kEasJIfFplF0nQS3FW_DlP3kedxaNdzRaZl8,6332
|
|
5
|
-
openapi_python_generator/language_converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
openapi_python_generator/language_converters/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
openapi_python_generator/language_converters/python/api_config_generator.py,sha256=0RPEjW08dGV6yTyIGoXr38mTrIdrV_9h5W_7z2VYVW0,1068
|
|
8
|
-
openapi_python_generator/language_converters/python/common.py,sha256=EnHbqFCK2DjYSc8TyWRlRc-9aP9Z85o7M_lV5UVRdAw,1465
|
|
9
|
-
openapi_python_generator/language_converters/python/generator.py,sha256=KY5BtoVmon33d6FeYF_azGpX7n8IdqJvO5nzSJ8Q5Yw,1559
|
|
10
|
-
openapi_python_generator/language_converters/python/jinja_config.py,sha256=Vr_BGdWlFMUvdojSdaHKqEX8U52mU42qKW3UaeXLW5w,977
|
|
11
|
-
openapi_python_generator/language_converters/python/model_generator.py,sha256=yO7hLIkLpjDHbLPBd_Td865nSkJpjCg5kmBffgH1ics,12998
|
|
12
|
-
openapi_python_generator/language_converters/python/service_generator.py,sha256=rOeg-KzGGK5Fv17wLY1YJEJuIZbglDyUhAXM6k07WL0,13294
|
|
13
|
-
openapi_python_generator/language_converters/python/templates/aiohttp.jinja2,sha256=IUCQ3GaVBRPSpsC90AYEFnrT7EUPcZMUR5rpy0t9HSg,1977
|
|
14
|
-
openapi_python_generator/language_converters/python/templates/apiconfig.jinja2,sha256=bvYMJV6YB2NZLLcqwozISdS86XLH8J6D8o3ZpfgJCjc,1256
|
|
15
|
-
openapi_python_generator/language_converters/python/templates/apiconfig_pydantic_2.jinja2,sha256=_MzcHYEq9aoqSUEhZ-5SLbO80zgBeJnx5d7q3Q_usSo,1319
|
|
16
|
-
openapi_python_generator/language_converters/python/templates/enum.jinja2,sha256=9R9Nv1g8GykflCWm9HgxCmSWvIJ9FTNkXlXOZSBaZvw,242
|
|
17
|
-
openapi_python_generator/language_converters/python/templates/httpx.jinja2,sha256=s6ly6q_STumPucrAERWGgWaIpRAYWQnyfa_0t6hqqow,2131
|
|
18
|
-
openapi_python_generator/language_converters/python/templates/models.jinja2,sha256=bGJo2P9D_xzKPbs5k-Un0CLZItlWgl--bWmDxVzPzrU,691
|
|
19
|
-
openapi_python_generator/language_converters/python/templates/models_pydantic_2.jinja2,sha256=-GR4xFkclQ5fncRNtMk-mDB7Dql5qxGAlzh28wQwfac,797
|
|
20
|
-
openapi_python_generator/language_converters/python/templates/requests.jinja2,sha256=TXHNCbzR1LD-HhXNguLc69T3QRUFK_cDK3NrEb7Eg8Q,1874
|
|
21
|
-
openapi_python_generator/language_converters/python/templates/service.jinja2,sha256=D8zuW-e8ir44px7qqZtiA3kxRP4OzI-5I60YFQdCHLQ,202
|
|
22
|
-
openapi_python_generator/models.py,sha256=ebmUT9Z1-I1L6M16ydH7HtUZ4O-k_j0bnD-ws-RaJaw,1657
|
|
23
|
-
openapi_python_generator-1.1.2.dev1734089718.dist-info/LICENSE,sha256=0myanGwJ2vUOZN12aN95o0My6XEysnnVlbKikYw3pHg,1070
|
|
24
|
-
openapi_python_generator-1.1.2.dev1734089718.dist-info/entry_points.txt,sha256=hqE8T8yX5Pkeb2g__7yQrEazkBPwNgTbEHmoOkaYh80,83
|
|
25
|
-
openapi_python_generator-1.1.2.dev1734089718.dist-info/METADATA,sha256=s__1YzJj8YUk4HR40ttHNHTLZOE9n9j8EJwZ8_qFdJc,5440
|
|
26
|
-
openapi_python_generator-1.1.2.dev1734089718.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
|
27
|
-
openapi_python_generator-1.1.2.dev1734089718.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|