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.
Files changed (26) hide show
  1. openapi_python_generator/__init__.py +2 -1
  2. openapi_python_generator/__main__.py +21 -6
  3. openapi_python_generator/common.py +15 -0
  4. openapi_python_generator/generate_data.py +112 -65
  5. openapi_python_generator/language_converters/python/api_config_generator.py +12 -6
  6. openapi_python_generator/language_converters/python/generator.py +8 -4
  7. openapi_python_generator/language_converters/python/model_generator.py +191 -54
  8. openapi_python_generator/language_converters/python/service_generator.py +159 -62
  9. openapi_python_generator/language_converters/python/templates/aiohttp.jinja2 +10 -9
  10. openapi_python_generator/language_converters/python/templates/httpx.jinja2 +8 -5
  11. openapi_python_generator/language_converters/python/templates/models.jinja2 +5 -3
  12. openapi_python_generator/language_converters/python/templates/models_pydantic_2.jinja2 +5 -3
  13. openapi_python_generator/language_converters/python/templates/requests.jinja2 +8 -5
  14. openapi_python_generator/language_converters/python/templates/service.jinja2 +2 -1
  15. openapi_python_generator/models.py +16 -2
  16. openapi_python_generator/parsers/__init__.py +13 -0
  17. openapi_python_generator/parsers/openapi_30.py +65 -0
  18. openapi_python_generator/parsers/openapi_31.py +65 -0
  19. openapi_python_generator/py.typed +0 -0
  20. openapi_python_generator/version_detector.py +70 -0
  21. {openapi_python_generator-1.1.2.dev1734089718.dist-info → openapi_python_generator-1.2.1.dev1757310194.dist-info}/METADATA +3 -3
  22. openapi_python_generator-1.2.1.dev1757310194.dist-info/RECORD +32 -0
  23. openapi_python_generator-1.1.2.dev1734089718.dist-info/RECORD +0 -27
  24. {openapi_python_generator-1.1.2.dev1734089718.dist-info → openapi_python_generator-1.2.1.dev1757310194.dist-info}/LICENSE +0 -0
  25. {openapi_python_generator-1.1.2.dev1734089718.dist-info → openapi_python_generator-1.2.1.dev1757310194.dist-info}/WHEEL +0 -0
  26. {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.2.dev1734089718
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.23.0,<0.24.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.0,<0.6.0)
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,,