pyopenapi-gen 0.8.7__py3-none-any.whl → 0.9.0__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 (30) hide show
  1. pyopenapi_gen/__init__.py +2 -2
  2. pyopenapi_gen/context/CLAUDE.md +284 -0
  3. pyopenapi_gen/context/import_collector.py +8 -8
  4. pyopenapi_gen/core/CLAUDE.md +224 -0
  5. pyopenapi_gen/core/loader/operations/parser.py +1 -1
  6. pyopenapi_gen/core/parsing/cycle_helpers.py +1 -1
  7. pyopenapi_gen/core/parsing/keywords/properties_parser.py +4 -4
  8. pyopenapi_gen/core/parsing/schema_parser.py +4 -4
  9. pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +1 -1
  10. pyopenapi_gen/core/writers/python_construct_renderer.py +2 -2
  11. pyopenapi_gen/emitters/CLAUDE.md +286 -0
  12. pyopenapi_gen/emitters/endpoints_emitter.py +1 -1
  13. pyopenapi_gen/generator/CLAUDE.md +352 -0
  14. pyopenapi_gen/helpers/CLAUDE.md +325 -0
  15. pyopenapi_gen/helpers/endpoint_utils.py +2 -2
  16. pyopenapi_gen/helpers/type_cleaner.py +1 -1
  17. pyopenapi_gen/helpers/type_resolution/composition_resolver.py +1 -1
  18. pyopenapi_gen/helpers/type_resolution/finalizer.py +1 -1
  19. pyopenapi_gen/types/CLAUDE.md +140 -0
  20. pyopenapi_gen/types/resolvers/schema_resolver.py +2 -2
  21. pyopenapi_gen/visit/CLAUDE.md +272 -0
  22. pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +1 -1
  23. pyopenapi_gen/visit/endpoint/generators/signature_generator.py +1 -1
  24. pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +1 -1
  25. {pyopenapi_gen-0.8.7.dist-info → pyopenapi_gen-0.9.0.dist-info}/METADATA +56 -40
  26. {pyopenapi_gen-0.8.7.dist-info → pyopenapi_gen-0.9.0.dist-info}/RECORD +49 -42
  27. {pyopenapi_gen-0.8.7.dist-info → pyopenapi_gen-0.9.0.dist-info}/WHEEL +1 -1
  28. pyopenapi_gen-0.9.0.dist-info/entry_points.txt +3 -0
  29. pyopenapi_gen-0.8.7.dist-info/entry_points.txt +0 -2
  30. {pyopenapi_gen-0.8.7.dist-info/licenses → pyopenapi_gen-0.9.0.dist-info}/LICENSE +0 -0
@@ -0,0 +1,272 @@
1
+ # visit/ - Code Generation Visitor Pattern
2
+
3
+ ## Why This Folder?
4
+ Transform IR objects into Python code strings using visitor pattern. Each visitor specializes in generating one aspect of the client (models, endpoints, exceptions, etc.).
5
+
6
+ ## Key Dependencies
7
+ - **Input**: `IRSpec`, `IRSchema`, `IROperation` from `../ir.py`
8
+ - **Output**: Python code strings for emitters
9
+ - **Services**: `UnifiedTypeService` from `../types/services/`
10
+ - **Context**: `RenderContext` from `../context/render_context.py`
11
+
12
+ ## Essential Architecture
13
+
14
+ ### 1. Visitor Pattern Hierarchy
15
+ ```python
16
+ # visitor.py - Base visitor
17
+ class Visitor(Generic[tNode, tRet]):
18
+ def visit(self, node: tNode, context: RenderContext) -> tRet:
19
+ # Dispatch to specific visit methods
20
+
21
+ # Concrete visitors
22
+ class ModelVisitor(Visitor[IRSchema, str]):
23
+ def visit_schema(self, schema: IRSchema, context: RenderContext) -> str:
24
+ # Generate dataclass/enum code
25
+ ```
26
+
27
+ ### 2. Generators vs Visitors
28
+ - **Visitors**: High-level orchestration, traverse IR structure
29
+ - **Generators**: Low-level code generation, create specific code blocks
30
+
31
+ ```python
32
+ # endpoint/endpoint_visitor.py
33
+ class EndpointVisitor:
34
+ def __init__(self):
35
+ self.signature_generator = SignatureGenerator()
36
+ self.request_generator = RequestGenerator()
37
+ self.response_generator = ResponseHandlerGenerator()
38
+ ```
39
+
40
+ ## Critical Components
41
+
42
+ ### model/model_visitor.py
43
+ **Purpose**: Generate dataclass and enum code from schemas
44
+ ```python
45
+ def visit_schema(self, schema: IRSchema, context: RenderContext) -> str:
46
+ if schema.enum:
47
+ return self.enum_generator.generate_enum(schema, context)
48
+ elif schema.type == "object":
49
+ return self.dataclass_generator.generate_dataclass(schema, context)
50
+ else:
51
+ return self.alias_generator.generate_alias(schema, context)
52
+ ```
53
+
54
+ ### endpoint/endpoint_visitor.py
55
+ **Purpose**: Generate async method code from operations
56
+ ```python
57
+ def visit_operation(self, operation: IROperation, context: RenderContext) -> str:
58
+ # 1. Generate method signature
59
+ signature = self.signature_generator.generate(operation, context)
60
+
61
+ # 2. Generate request construction
62
+ request_code = self.request_generator.generate(operation, context)
63
+
64
+ # 3. Generate response handling
65
+ response_code = self.response_generator.generate(operation, context)
66
+
67
+ # 4. Combine into complete method
68
+ return self.combine_method_parts(signature, request_code, response_code)
69
+ ```
70
+
71
+ ### client_visitor.py
72
+ **Purpose**: Generate main client class with tag-grouped methods
73
+ ```python
74
+ def visit_spec(self, spec: IRSpec, context: RenderContext) -> str:
75
+ # 1. Group operations by tag
76
+ operations_by_tag = self.group_operations_by_tag(spec.operations)
77
+
78
+ # 2. Generate client class
79
+ # 3. Generate tag-based property methods
80
+ # 4. Generate context manager methods
81
+ ```
82
+
83
+ ## Code Generation Patterns
84
+
85
+ ### 1. Template-Based Generation
86
+ ```python
87
+ # Use string templates for consistent formatting
88
+ METHOD_TEMPLATE = '''
89
+ async def {method_name}(self, {parameters}) -> {return_type}:
90
+ """
91
+ {docstring}
92
+ """
93
+ {body}
94
+ '''
95
+
96
+ # Fill template with generated content
97
+ method_code = METHOD_TEMPLATE.format(
98
+ method_name=operation.operation_id,
99
+ parameters=self.signature_generator.generate_parameters(operation),
100
+ return_type=self.get_return_type(operation),
101
+ docstring=self.docstring_generator.generate(operation),
102
+ body=self.generate_method_body(operation)
103
+ )
104
+ ```
105
+
106
+ ### 2. Type Resolution Integration
107
+ ```python
108
+ # endpoint/generators/signature_generator.py
109
+ def generate_parameters(self, operation: IROperation, context: RenderContext) -> str:
110
+ params = []
111
+ for param in operation.parameters:
112
+ # Use unified type service for parameter types
113
+ param_type = self.type_service.resolve_schema_type(
114
+ param.schema, context, required=param.required
115
+ )
116
+ params.append(f"{param.name}: {param_type}")
117
+ return ", ".join(params)
118
+ ```
119
+
120
+ ### 3. Import Management
121
+ ```python
122
+ # Always register imports when using complex types
123
+ def generate_dataclass(self, schema: IRSchema, context: RenderContext) -> str:
124
+ imports = []
125
+
126
+ for prop_name, prop_schema in schema.properties.items():
127
+ prop_type = self.type_service.resolve_schema_type(prop_schema, context)
128
+
129
+ # Type service handles import registration
130
+ # context.add_import() called internally
131
+
132
+ return dataclass_code
133
+ ```
134
+
135
+ ## Specialized Generators
136
+
137
+ ### endpoint/generators/
138
+ **Purpose**: Generate specific parts of endpoint methods
139
+
140
+ #### docstring_generator.py
141
+ ```python
142
+ def generate_docstring(self, operation: IROperation, context: RenderContext) -> str:
143
+ # Generate Google-style docstrings
144
+ # Include parameter descriptions
145
+ # Include return type information
146
+ # Include raises information
147
+ ```
148
+
149
+ #### request_generator.py
150
+ ```python
151
+ def generate_request_construction(self, operation: IROperation, context: RenderContext) -> str:
152
+ # Generate httpx.Request construction
153
+ # Handle query parameters, headers, body
154
+ # Apply authentication
155
+ ```
156
+
157
+ #### response_handler_generator.py
158
+ ```python
159
+ def generate_response_handling(self, operation: IROperation, context: RenderContext) -> str:
160
+ # Generate match/case for status codes
161
+ # Handle response deserialization
162
+ # Generate exception raising
163
+ ```
164
+
165
+ ## Dependencies on Other Systems
166
+
167
+ ### From types/
168
+ - `UnifiedTypeService` for all type resolution
169
+ - Response unwrapping detection
170
+ - Forward reference handling
171
+
172
+ ### From context/
173
+ - `RenderContext` for import management
174
+ - Template rendering utilities
175
+ - Path resolution
176
+
177
+ ### To emitters/
178
+ - Visitors produce code strings
179
+ - Emitters organize code into files
180
+
181
+ ## Testing Requirements
182
+
183
+ ### Visitor Tests
184
+ ```python
185
+ def test_model_visitor__dataclass_schema__generates_correct_code():
186
+ # Arrange
187
+ schema = IRSchema(type="object", properties={"name": {"type": "string"}})
188
+ context = RenderContext()
189
+ visitor = ModelVisitor()
190
+
191
+ # Act
192
+ code = visitor.visit_schema(schema, context)
193
+
194
+ # Assert
195
+ assert "@dataclass" in code
196
+ assert "name: str" in code
197
+ ```
198
+
199
+ ### Generator Tests
200
+ ```python
201
+ def test_signature_generator__operation_with_params__generates_correct_signature():
202
+ # Test specific code generation components
203
+ operation = IROperation(parameters=[...])
204
+ generator = SignatureGenerator()
205
+
206
+ signature = generator.generate(operation, context)
207
+
208
+ # Verify parameter types, defaults, etc.
209
+ ```
210
+
211
+ ## Extension Points
212
+
213
+ ### Adding New Visitors
214
+ ```python
215
+ # Create new visitor for new code aspects
216
+ class CustomVisitor(Visitor[IRCustomNode, str]):
217
+ def visit_custom_node(self, node: IRCustomNode, context: RenderContext) -> str:
218
+ # Custom code generation logic
219
+ pass
220
+ ```
221
+
222
+ ### Adding New Generators
223
+ ```python
224
+ # endpoint/generators/custom_generator.py
225
+ class CustomGenerator:
226
+ def __init__(self, type_service: UnifiedTypeService):
227
+ self.type_service = type_service
228
+
229
+ def generate(self, operation: IROperation, context: RenderContext) -> str:
230
+ # Custom code generation logic
231
+ pass
232
+ ```
233
+
234
+ ## Critical Implementation Details
235
+
236
+ ### Error Handling in Visitors
237
+ ```python
238
+ def visit_schema(self, schema: IRSchema, context: RenderContext) -> str:
239
+ try:
240
+ return self.generate_code(schema, context)
241
+ except Exception as e:
242
+ # Add context to errors
243
+ raise CodeGenerationError(f"Failed to generate code for schema {schema.name}: {e}")
244
+ ```
245
+
246
+ ### Context Management
247
+ ```python
248
+ # Always use context for imports and state
249
+ def generate_method(self, operation: IROperation, context: RenderContext) -> str:
250
+ # Register imports
251
+ context.add_import("from typing import Optional")
252
+
253
+ # Use context for type resolution
254
+ return_type = self.type_service.resolve_operation_response_type(operation, context)
255
+
256
+ # Return code string
257
+ return method_code
258
+ ```
259
+
260
+ ### Code Formatting
261
+ ```python
262
+ # Use consistent indentation and formatting
263
+ def format_method_body(self, lines: List[str]) -> str:
264
+ # Ensure proper indentation
265
+ formatted_lines = []
266
+ for line in lines:
267
+ if line.strip():
268
+ formatted_lines.append(f" {line}") # 4-space indent
269
+ else:
270
+ formatted_lines.append("")
271
+ return "\n".join(formatted_lines)
272
+ ```
@@ -99,7 +99,7 @@ class EndpointDocstringGenerator:
99
99
  for resp in error_codes:
100
100
  # Using a generic HTTPError, specific error classes could be mapped later
101
101
  code_to_raise = "HTTPError"
102
- desc = f"{resp.status_code}: {resp.description.strip() if resp.description else "HTTP error."}"
102
+ desc = f"{resp.status_code}: {resp.description.strip() if resp.description else 'HTTP error.'}"
103
103
  raises.append((code_to_raise, desc))
104
104
  else:
105
105
  raises.append(("HTTPError", "If the server returns a non-2xx HTTP response."))
@@ -66,7 +66,7 @@ class EndpointMethodSignatureGenerator:
66
66
  args = ["self"]
67
67
  for p_orig in ordered_params:
68
68
  p = p_orig.copy() # Work with a copy
69
- arg_str = f"{NameSanitizer.sanitize_method_name(p["name"])}: {p["type"]}" # Ensure param name is sanitized
69
+ arg_str = f"{NameSanitizer.sanitize_method_name(p['name'])}: {p['type']}" # Ensure param name is sanitized
70
70
  if not p.get("required", False):
71
71
  # Default value handling: if default is None, it should be ' = None'
72
72
  # If default is a string, it should be ' = "default_value"'
@@ -123,7 +123,7 @@ class EndpointParameterProcessor:
123
123
  param_details_map[body_specific_param_info["name"]] = body_specific_param_info
124
124
  else:
125
125
  logger.warning(
126
- f"Request body parameter name '{body_specific_param_info["name"]}' "
126
+ f"Request body parameter name '{body_specific_param_info['name']}' "
127
127
  f"for operation '{op.operation_id}'"
128
128
  f"collides with an existing path/query/header parameter. Check OpenAPI spec."
129
129
  )
@@ -1,19 +1,14 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.3
2
2
  Name: pyopenapi-gen
3
- Version: 0.8.7
3
+ Version: 0.9.0
4
4
  Summary: Modern, async-first Python client generator for OpenAPI specifications with advanced cycle detection and unified type resolution
5
- Project-URL: Homepage, https://github.com/your-org/pyopenapi-gen
6
- Project-URL: Documentation, https://github.com/your-org/pyopenapi-gen/blob/main/README.md
7
- Project-URL: Repository, https://github.com/your-org/pyopenapi-gen
8
- Project-URL: Issues, https://github.com/your-org/pyopenapi-gen/issues
9
- Project-URL: Changelog, https://github.com/your-org/pyopenapi-gen/blob/main/CHANGELOG.md
10
- Project-URL: Bug Reports, https://github.com/your-org/pyopenapi-gen/issues
11
- Project-URL: Source Code, https://github.com/your-org/pyopenapi-gen
12
- Author-email: Mindhive Oy <contact@mindhive.fi>
13
- Maintainer-email: Ville Venäläinen | Mindhive Oy <ville@mindhive.fi>
14
5
  License: MIT
15
- License-File: LICENSE
16
- Keywords: api,async,client,code-generation,enterprise,generator,http,openapi,python,rest,swagger,type-safe
6
+ Keywords: openapi,swagger,client,generator,async,python,api,http,rest,type-safe,code-generation,enterprise
7
+ Author: Mindhive Oy
8
+ Author-email: contact@mindhive.fi
9
+ Maintainer: Ville Venäläinen | Mindhive Oy
10
+ Maintainer-email: ville@mindhive.fi
11
+ Requires-Python: >=3.12,<4.0.0
17
12
  Classifier: Development Status :: 4 - Beta
18
13
  Classifier: Environment :: Console
19
14
  Classifier: Framework :: AsyncIO
@@ -21,39 +16,45 @@ Classifier: Intended Audience :: Developers
21
16
  Classifier: License :: OSI Approved :: MIT License
22
17
  Classifier: Natural Language :: English
23
18
  Classifier: Operating System :: MacOS
24
- Classifier: Operating System :: Microsoft :: Windows
25
19
  Classifier: Operating System :: POSIX :: Linux
20
+ Classifier: Operating System :: Microsoft :: Windows
26
21
  Classifier: Programming Language :: Python :: 3
27
- Classifier: Programming Language :: Python :: 3 :: Only
28
22
  Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3 :: Only
29
24
  Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
30
25
  Classifier: Topic :: Software Development :: Code Generators
31
26
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
32
27
  Classifier: Topic :: System :: Networking
33
28
  Classifier: Typing :: Typed
34
- Requires-Python: <4.0.0,>=3.12
35
- Requires-Dist: click<9.0.0,>=8.0.0
36
- Requires-Dist: dataclass-wizard>=0.22.0
37
- Requires-Dist: httpx>=0.24.0
38
- Requires-Dist: openapi-core>=0.19
39
- Requires-Dist: openapi-spec-validator>=0.7
40
- Requires-Dist: pyyaml>=6.0
41
- Requires-Dist: typer<0.14.0,>=0.12.0
42
29
  Provides-Extra: dev
43
- Requires-Dist: bandit[toml]>=1.7.0; extra == 'dev'
44
- Requires-Dist: black>=23.0; extra == 'dev'
45
- Requires-Dist: dataclass-wizard>=0.22.0; extra == 'dev'
46
- Requires-Dist: httpx>=0.24.0; extra == 'dev'
47
- Requires-Dist: mypy>=1.7; extra == 'dev'
48
- Requires-Dist: pytest-asyncio>=0.20.0; extra == 'dev'
49
- Requires-Dist: pytest-cov>=4.0; extra == 'dev'
50
- Requires-Dist: pytest-timeout>=2.1.0; extra == 'dev'
51
- Requires-Dist: pytest-xdist>=3.0.0; extra == 'dev'
52
- Requires-Dist: pytest>=7.0; extra == 'dev'
53
- Requires-Dist: ruff>=0.4; extra == 'dev'
54
- Requires-Dist: safety>=2.0.0; extra == 'dev'
55
- Requires-Dist: types-pyyaml>=6.0.12; extra == 'dev'
56
- Requires-Dist: types-toml>=0.10.8; extra == 'dev'
30
+ Requires-Dist: PyYAML (>=6.0)
31
+ Requires-Dist: bandit[toml] (>=1.7.0) ; extra == "dev"
32
+ Requires-Dist: black (>=23.0) ; extra == "dev"
33
+ Requires-Dist: click (>=8.0.0,<9.0.0)
34
+ Requires-Dist: dataclass-wizard (>=0.22.0)
35
+ Requires-Dist: dataclass-wizard (>=0.22.0) ; extra == "dev"
36
+ Requires-Dist: httpx (>=0.24.0)
37
+ Requires-Dist: httpx (>=0.24.0) ; extra == "dev"
38
+ Requires-Dist: mypy (>=1.7) ; extra == "dev"
39
+ Requires-Dist: openapi-core (>=0.19)
40
+ Requires-Dist: openapi-spec-validator (>=0.7)
41
+ Requires-Dist: pytest (>=7.0) ; extra == "dev"
42
+ Requires-Dist: pytest-asyncio (>=0.20.0) ; extra == "dev"
43
+ Requires-Dist: pytest-cov (>=4.0) ; extra == "dev"
44
+ Requires-Dist: pytest-timeout (>=2.1.0) ; extra == "dev"
45
+ Requires-Dist: pytest-xdist (>=3.0.0) ; extra == "dev"
46
+ Requires-Dist: ruff (>=0.4) ; extra == "dev"
47
+ Requires-Dist: safety (>=2.0.0) ; extra == "dev"
48
+ Requires-Dist: typer (>=0.12.0,<0.14.0)
49
+ Requires-Dist: types-pyyaml (>=6.0.12) ; extra == "dev"
50
+ Requires-Dist: types-toml (>=0.10.8) ; extra == "dev"
51
+ Project-URL: Bug Reports, https://github.com/your-org/pyopenapi-gen/issues
52
+ Project-URL: Changelog, https://github.com/your-org/pyopenapi-gen/blob/main/CHANGELOG.md
53
+ Project-URL: Documentation, https://github.com/your-org/pyopenapi-gen/blob/main/README.md
54
+ Project-URL: Homepage, https://github.com/your-org/pyopenapi-gen
55
+ Project-URL: Issues, https://github.com/your-org/pyopenapi-gen/issues
56
+ Project-URL: Repository, https://github.com/your-org/pyopenapi-gen
57
+ Project-URL: Source Code, https://github.com/your-org/pyopenapi-gen
57
58
  Description-Content-Type: text/markdown
58
59
 
59
60
  # PyOpenAPI Generator
@@ -99,7 +100,7 @@ poetry add pyopenapi-gen
99
100
 
100
101
  ### 1. Generate Your First Client
101
102
  ```bash
102
- pyopenapi-gen gen openapi.yaml \
103
+ pyopenapi-gen openapi.yaml \
103
104
  --project-root . \
104
105
  --output-package my_api_client
105
106
  ```
@@ -127,7 +128,7 @@ asyncio.run(main())
127
128
 
128
129
  ### Standalone Client (Default)
129
130
  ```bash
130
- pyopenapi-gen gen openapi.yaml \
131
+ pyopenapi-gen openapi.yaml \
131
132
  --project-root . \
132
133
  --output-package my_api_client
133
134
  ```
@@ -135,7 +136,7 @@ Creates self-contained client with embedded core dependencies.
135
136
 
136
137
  ### Shared Core (Multiple Clients)
137
138
  ```bash
138
- pyopenapi-gen gen openapi.yaml \
139
+ pyopenapi-gen openapi.yaml \
139
140
  --project-root . \
140
141
  --output-package clients.api_client \
141
142
  --core-package clients.core
@@ -358,6 +359,20 @@ make typecheck # Type checking with mypy
358
359
  make security # Security scanning with Bandit
359
360
  ```
360
361
 
362
+ ### Release Process
363
+ The project uses **automated semantic versioning** with conventional commits:
364
+
365
+ ```bash
366
+ # Conventional commit format triggers automatic releases
367
+ git commit -m "feat(auth): add OAuth2 support" # → Minor version bump
368
+ git commit -m "fix(parser): resolve memory leak" # → Patch version bump
369
+
370
+ # Push to main triggers automatic PyPI release
371
+ git push origin main
372
+ ```
373
+
374
+ All releases are automatically published to PyPI with generated changelogs. See [Release Management](CLAUDE.md#release-management--semantic-versioning) for complete details.
375
+
361
376
  See our [Contributing Guide](CONTRIBUTING.md) for detailed information on:
362
377
  - 📋 Development setup and workflow
363
378
  - 🧪 Testing guidelines and standards
@@ -381,3 +396,4 @@ Generated clients are self-contained and can be distributed under any license co
381
396
  ---
382
397
 
383
398
  **Made with ❤️ for the Python community**
399
+
@@ -1,28 +1,20 @@
1
- pyopenapi_gen/__init__.py,sha256=YHJFfK7_we3-eCQ1foq2FcLP7IjwmKUM4_hNN_JhikQ,2998
1
+ pyopenapi_gen/__init__.py,sha256=9DJOZ8R4qQ3tHN0XxuSOK0PWXBtbpjaNEJAgzfUVTeE,3016
2
2
  pyopenapi_gen/__main__.py,sha256=4-SCaCNhBd7rtyRK58uoDbdl93J0KhUeajP_b0CPpLE,110
3
3
  pyopenapi_gen/cli.py,sha256=_ewksNDaA5st3TJJMZJWgCZdBGOQp__tkMVqr_6U3vs,2339
4
- pyopenapi_gen/http_types.py,sha256=EMMYZBt8PNVZKPFu77TQija-JI-nOKyXvpiQP9-VSWE,467
5
- pyopenapi_gen/ir.py,sha256=OWQk53_iVi9JZxVeKRjagF0nhw57skkNPd-4jDsyD7M,7354
6
- pyopenapi_gen/py.typed,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
4
+ pyopenapi_gen/context/CLAUDE.md,sha256=eUPvSY2ADQK21i52bWfzyBcDPVvvepErMiQrq6ndwlU,9004
7
5
  pyopenapi_gen/context/file_manager.py,sha256=vpbRByO5SH6COdjb6C-pXkdSIRu7QFqrXxi69VLKBnM,1691
8
- pyopenapi_gen/context/import_collector.py,sha256=xTbgJD71ZtJgOSp0ScZjCxwbtHvk_qlM2RukggNMGJ4,15262
6
+ pyopenapi_gen/context/import_collector.py,sha256=rnOgR5-GsHs_oS1iUVbOF3tagcH5namNWvp7k44kugw,15262
9
7
  pyopenapi_gen/context/render_context.py,sha256=AS08ha9WVjgRUsM1LFPjMCgrsHbczHH7c60Z5PbojhY,30320
8
+ pyopenapi_gen/core/CLAUDE.md,sha256=bz48K-PSrhxCq5ScmiLiU9kfpVVzSWRKOA9RdKk_pbg,6482
10
9
  pyopenapi_gen/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- pyopenapi_gen/core/exceptions.py,sha256=KemyLDXl8pBgzxxV6ZhsGi7WjwKGooKU6Idy63eC2ko,553
12
- pyopenapi_gen/core/http_transport.py,sha256=77ZOTyl0_CLuDtSCOVDQoxHDQBnclJgz6f3Hs6cy7hY,9675
13
- pyopenapi_gen/core/pagination.py,sha256=aeDOKo-Lu8mcSDqv0TlPXV9Ul-Nca76ZuKhQHKlsMUs,2301
14
- pyopenapi_gen/core/postprocess_manager.py,sha256=ky27ijbq6zEo43aqe-odz9CR3vFD_3XHhQR35XgMZo0,6879
15
- pyopenapi_gen/core/schemas.py,sha256=FOE2e1vIl0vif_C34AehVznJG2W1hampPtJEfL80AxI,5535
16
- pyopenapi_gen/core/streaming_helpers.py,sha256=XToNnm-EDAqiKh9ZS4GRxyastFkfSyNR0av-NDTZMPg,2706
17
- pyopenapi_gen/core/telemetry.py,sha256=l6z972882MRzNOXU2leAvtnlYFLMSKKQ_oHz4qU5_n0,2225
18
- pyopenapi_gen/core/utils.py,sha256=-J4lWP_X5jvPTYWkMvgIw4KGt6IKw29eHUAb_C89na4,14163
19
- pyopenapi_gen/core/warning_collector.py,sha256=DYl9D7eZYs04mDU84KeonS-5-d0aM7hNqraXTex31ss,2799
20
10
  pyopenapi_gen/core/auth/base.py,sha256=E2KUerA_mYv9D7xulUm-lenIxqZHqanjA4oRKpof2ZE,792
21
11
  pyopenapi_gen/core/auth/plugins.py,sha256=bDWx4MTRFsCKp1i__BsQtZEvQPGU-NKI137-zoxmrgs,3465
12
+ pyopenapi_gen/core/exceptions.py,sha256=KemyLDXl8pBgzxxV6ZhsGi7WjwKGooKU6Idy63eC2ko,553
13
+ pyopenapi_gen/core/http_transport.py,sha256=77ZOTyl0_CLuDtSCOVDQoxHDQBnclJgz6f3Hs6cy7hY,9675
22
14
  pyopenapi_gen/core/loader/__init__.py,sha256=bt-MQ35fbq-f1YnCcopPg53TuXCI9_7wcMzQZoWVpjU,391
23
15
  pyopenapi_gen/core/loader/loader.py,sha256=bogAgDr2XvJWmMAFE006b3K_5AmC8eg2uj_TpYtLAfg,5591
24
16
  pyopenapi_gen/core/loader/operations/__init__.py,sha256=7se21D-BOy7Qw6C9auJ9v6D3NCuRiDpRlhqxGq11fJs,366
25
- pyopenapi_gen/core/loader/operations/parser.py,sha256=RcxpYVRzqreE6jJPyVZjfCWuBJeen7KD12yZ6etxZFI,6896
17
+ pyopenapi_gen/core/loader/operations/parser.py,sha256=ai5iZZA2nicouC77iEvo8jKGXbHKbX_NcTy44lkwOVQ,6896
26
18
  pyopenapi_gen/core/loader/operations/post_processor.py,sha256=3FZ5o59J2bSpZP-tNIec0A2hw095cC27GKqkhGrgHZA,2437
27
19
  pyopenapi_gen/core/loader/operations/request_body.py,sha256=qz-wh014ejb1SGTuVRNODSXc95_iOLAjw05aDRhbXoo,3099
28
20
  pyopenapi_gen/core/loader/parameters/__init__.py,sha256=p13oSibCRC5RCfsP6w7yD9MYs5TXcdI4WwPv7oGUYKk,284
@@ -31,16 +23,10 @@ pyopenapi_gen/core/loader/responses/__init__.py,sha256=6APWoH3IdNkgVmI0KsgZoZ6kn
31
23
  pyopenapi_gen/core/loader/responses/parser.py,sha256=T0QXH_3c-Y6_S6DvveKHPfV_tID7qhBoX0nFtdLCa0A,3896
32
24
  pyopenapi_gen/core/loader/schemas/__init__.py,sha256=rlhujYfw_IzWgzhVhYMJ3eIhE6C5Vi1Ylba-BHEVqOg,296
33
25
  pyopenapi_gen/core/loader/schemas/extractor.py,sha256=7-lpDhs9W9wVhG1OCASdyft_V1kUH7NdP8D4x-raGjk,8364
26
+ pyopenapi_gen/core/pagination.py,sha256=aeDOKo-Lu8mcSDqv0TlPXV9Ul-Nca76ZuKhQHKlsMUs,2301
34
27
  pyopenapi_gen/core/parsing/__init__.py,sha256=RJsIR6cHaNoI4tBcpMlAa0JsY64vsHb9sPxPg6rd8FQ,486
35
- pyopenapi_gen/core/parsing/context.py,sha256=crn5oTkzEvnSzYdPuHBA_s72kmq0RKzXpyaqNh67k68,7947
36
- pyopenapi_gen/core/parsing/cycle_helpers.py,sha256=SOviksYKXme5u7ULMXZNcTHSEPF6_Rs3nRbTuuNWVVs,5939
37
- pyopenapi_gen/core/parsing/schema_finalizer.py,sha256=fsyuOenLJA3TndzYVETqKkSlo2Qz3TsD1YDtlbyOATQ,6839
38
- pyopenapi_gen/core/parsing/schema_parser.py,sha256=kbh4YTSv9KVxyl4yR8EdOa-oLyE1QbOZWoP5liMC-8A,30502
39
- pyopenapi_gen/core/parsing/unified_cycle_detection.py,sha256=3nplaCVh2dFwBPbmDc2kiU0SzTPXXktdQ5Rc0Q9Uu9s,10873
40
28
  pyopenapi_gen/core/parsing/common/__init__.py,sha256=U3sHMO-l6S3Cm04CVOYmBCpqLEZvCylUI7yQfcTwxYU,27
41
- pyopenapi_gen/core/parsing/common/type_parser.py,sha256=cK7xtxhoD43K2WjLP9TGip3As3akYeYW7L2XztXCecg,2562
42
29
  pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py,sha256=BZOSPQo8bongKYgA4w-KGNBCjfNKoe1mm91CrqNIaTk,150
43
- pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py,sha256=y2RBVA0Kk1Vd23NBnKRdggn0tYADbTfaW3v0Ji5K5aE,3636
44
30
  pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
31
  pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py,sha256=tsHnIdyznAxXz_yA9Ub1ONxi2GSYcVJwKogBkTm95jU,2160
46
32
  pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py,sha256=UoqD9I7s-WwI50PlgwFmLhFQd3ai8YIJycfkQhq6QlI,1145
@@ -49,41 +35,61 @@ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py,sha256
49
35
  pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py,sha256=BsyO6eCNO9NDRmj-aWyQZ4DaXsqRtkc7KdIzUEyNKQ4,1843
50
36
  pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py,sha256=MTaxiyqoPEaNFqF7tQHii3IH41M05wPKt6lBQi1SCDU,1625
51
37
  pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py,sha256=ukKU64ozHINPiVlHE9YBDz1Nq2i6Xh64jhoWSEqbK5c,1774
38
+ pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py,sha256=y2RBVA0Kk1Vd23NBnKRdggn0tYADbTfaW3v0Ji5K5aE,3636
39
+ pyopenapi_gen/core/parsing/common/type_parser.py,sha256=cK7xtxhoD43K2WjLP9TGip3As3akYeYW7L2XztXCecg,2562
40
+ pyopenapi_gen/core/parsing/context.py,sha256=crn5oTkzEvnSzYdPuHBA_s72kmq0RKzXpyaqNh67k68,7947
41
+ pyopenapi_gen/core/parsing/cycle_helpers.py,sha256=nG5ysNavL_6lpnHWFUZR9qraBxqOzuNfI6NgSEa8a5M,5939
52
42
  pyopenapi_gen/core/parsing/keywords/__init__.py,sha256=enTLacWXGXLIOjSJ3j7KNUDzU27Kq3Ww79sFElz02cM,27
53
43
  pyopenapi_gen/core/parsing/keywords/all_of_parser.py,sha256=s0aav49R4LYAwfEimWa0ZuFwbNWkYpRAJmcmSVDsO-s,3594
54
44
  pyopenapi_gen/core/parsing/keywords/any_of_parser.py,sha256=r9_0opPM75p0rPgdcRTBmae7Td3jPkJouuL_ksuFWtM,2856
55
45
  pyopenapi_gen/core/parsing/keywords/array_items_parser.py,sha256=dIb3_VsEkqsR9W4rwXoTT9IW313TnH66sQzJL4K7EQQ,2645
56
46
  pyopenapi_gen/core/parsing/keywords/one_of_parser.py,sha256=82SUPd0hk0QF4-hMr0QJmRSFa9nnJL8ncYmvgkIKKXs,2601
57
- pyopenapi_gen/core/parsing/keywords/properties_parser.py,sha256=2XOUzUNzJ6VNlLSskMh2K9BxPD45uBdvbish6Old6oQ,4426
47
+ pyopenapi_gen/core/parsing/keywords/properties_parser.py,sha256=bm248ApsNskFPQF4fXq7mT5oJf6FF9yAcdVLmK6el3E,4426
48
+ pyopenapi_gen/core/parsing/schema_finalizer.py,sha256=fsyuOenLJA3TndzYVETqKkSlo2Qz3TsD1YDtlbyOATQ,6839
49
+ pyopenapi_gen/core/parsing/schema_parser.py,sha256=qFdan2djgdRBtzVCLiDBooVqXgcuWy_JbzDGLTJpPeE,30502
58
50
  pyopenapi_gen/core/parsing/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py,sha256=S--hQpaZdoz9863NDL8zfmtKalUp87EisDyR1ZmyvrE,13461
51
+ pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py,sha256=hXuht-t0Syi5vPO8qn9GcjEpyDcZnfFVHVIlwfMa8L0,13461
60
52
  pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py,sha256=4njv5raMVtspL6DoU9mxabU3yhgXHLTEhR8KmI9YMoA,5083
53
+ pyopenapi_gen/core/parsing/unified_cycle_detection.py,sha256=3nplaCVh2dFwBPbmDc2kiU0SzTPXXktdQ5Rc0Q9Uu9s,10873
54
+ pyopenapi_gen/core/postprocess_manager.py,sha256=ky27ijbq6zEo43aqe-odz9CR3vFD_3XHhQR35XgMZo0,6879
55
+ pyopenapi_gen/core/schemas.py,sha256=FOE2e1vIl0vif_C34AehVznJG2W1hampPtJEfL80AxI,5535
56
+ pyopenapi_gen/core/streaming_helpers.py,sha256=XToNnm-EDAqiKh9ZS4GRxyastFkfSyNR0av-NDTZMPg,2706
57
+ pyopenapi_gen/core/telemetry.py,sha256=l6z972882MRzNOXU2leAvtnlYFLMSKKQ_oHz4qU5_n0,2225
58
+ pyopenapi_gen/core/utils.py,sha256=-J4lWP_X5jvPTYWkMvgIw4KGt6IKw29eHUAb_C89na4,14163
59
+ pyopenapi_gen/core/warning_collector.py,sha256=DYl9D7eZYs04mDU84KeonS-5-d0aM7hNqraXTex31ss,2799
61
60
  pyopenapi_gen/core/writers/code_writer.py,sha256=uWH5tRFIdT3RHsRV1haWQxESwhwMoM2G_CxnKB8uP88,4776
62
61
  pyopenapi_gen/core/writers/documentation_writer.py,sha256=Vce-_kD4XDm3HfZb_ibSEKAu2fbTZCzzdojn9TPgFhU,8706
63
62
  pyopenapi_gen/core/writers/line_writer.py,sha256=uhysxO6bh_9POUQHhoqYI4_savfAgjH4EcwBdNrVtPc,7759
64
- pyopenapi_gen/core/writers/python_construct_renderer.py,sha256=4RsyqjO0rTrsXGTjyTVHtVkgdjTfUGSNC5KbOybhq_w,12602
63
+ pyopenapi_gen/core/writers/python_construct_renderer.py,sha256=H2-dbUoc0wgI5Ll2OiRIRkfaDVBG_rFB4j44NXvF7Fk,12602
65
64
  pyopenapi_gen/core_package_template/README.md,sha256=8YP-MS0KxphRbCGBf7kV3dYIFLU9piOJ3IMm3K_0hcI,1488
66
65
  pyopenapi_gen/emit/models_emitter.py,sha256=Ty5yHGzvBDYa_qQwbyPNRLWPnHaWR_KLh6pYxT7uePY,7193
66
+ pyopenapi_gen/emitters/CLAUDE.md,sha256=iZYEZq1a1h033rxuh97cMpsKUElv72ysvTm3-QQUvrs,9323
67
67
  pyopenapi_gen/emitters/client_emitter.py,sha256=kmMVnG-wAOJm7TUm0xOQ5YnSJfYxz1SwtpiyoUCbcCA,1939
68
68
  pyopenapi_gen/emitters/core_emitter.py,sha256=RcBsAYQ3ZKcWwtkzQmyHkL7VtDQjbIObFLXD9M_GdpI,8020
69
69
  pyopenapi_gen/emitters/docs_emitter.py,sha256=aouKqhRdtVvYfGVsye_uqM80nONRy0SqN06cr1l3OgA,1137
70
- pyopenapi_gen/emitters/endpoints_emitter.py,sha256=JDdNg1GIShJfYUXklFTxsuqBoxu6GsBWRGrJgk0NcYg,9558
70
+ pyopenapi_gen/emitters/endpoints_emitter.py,sha256=2VuJJF0hpzyN-TqY9XVLQtTJ-QgedZe5Vj8ITBGsJYE,9558
71
71
  pyopenapi_gen/emitters/exceptions_emitter.py,sha256=qPTIPXDyqSUtpmBIp-V4ap1uMHUPmYziCSN62t7qcAE,1918
72
72
  pyopenapi_gen/emitters/models_emitter.py,sha256=I3IKwtKVocD3UVrI7cINXI8NjLwUZqHuGgvS3hjWUJ8,22192
73
+ pyopenapi_gen/generator/CLAUDE.md,sha256=BS9KkmLvk2WD-Io-_apoWjGNeMU4q4LKy4UOxYF9WxM,10870
73
74
  pyopenapi_gen/generator/client_generator.py,sha256=avYz5GCp7t6vRAFJCvXw0ipLQGX2QfgWtfOwr3QlOqY,28880
75
+ pyopenapi_gen/helpers/CLAUDE.md,sha256=GyIJ0grp4SkD3plAUzyycW4nTUZf9ewtvvsdAGkmIZw,10609
74
76
  pyopenapi_gen/helpers/__init__.py,sha256=m4jSQ1sDH6CesIcqIl_kox4LcDFabGxBpSIWVwbHK0M,39
75
- pyopenapi_gen/helpers/endpoint_utils.py,sha256=Uu1dN9qQAQFGUVjR_Zo8drjOIHzq1QOcZJcXUl-HTUg,22198
76
- pyopenapi_gen/helpers/type_cleaner.py,sha256=ztWlUNkAAIT4xHPG1iDBb_OP1FrvWmUf_NcnHB-GbdQ,13613
77
+ pyopenapi_gen/helpers/endpoint_utils.py,sha256=bkRu6YddIPQQD3rZLbB8L5WYzG-2Bd_JgMbxMUYY2wY,22198
78
+ pyopenapi_gen/helpers/type_cleaner.py,sha256=PRBqeEUPyEKHwedB4RZPrEDxUJ6q_h5ANains0WHIwg,13613
77
79
  pyopenapi_gen/helpers/type_helper.py,sha256=uWLmJ25FHnqPf0-Pqakk4-lJ4xr5VBOF6gQP26KBAms,4276
78
- pyopenapi_gen/helpers/url_utils.py,sha256=IflBiOcCzLrOvC5P25y12pk88Zu3X071hq4bCeDDxK0,340
79
80
  pyopenapi_gen/helpers/type_resolution/__init__.py,sha256=TbaQZp7jvBiYgmuzuG8Wp56xZq32xEKtpunHqZVG1VA,85
80
81
  pyopenapi_gen/helpers/type_resolution/array_resolver.py,sha256=dFppBtA6CxmiWAMR6rwGnQPv4AibL3nxtzw1LbeXVn4,2023
81
- pyopenapi_gen/helpers/type_resolution/composition_resolver.py,sha256=GV3N_dw3Q2--D20YP-naWoo7l5Z0P3uu8_PNOAOvaYU,3015
82
- pyopenapi_gen/helpers/type_resolution/finalizer.py,sha256=YdI0E9d1hDCEP6wad6zbooRm7bCRpi9UlHVABEGokMM,4332
82
+ pyopenapi_gen/helpers/type_resolution/composition_resolver.py,sha256=wq6CRGxGgOKK470ln5Tpk9SzHtMuwB22TXHsRLtUFyw,3015
83
+ pyopenapi_gen/helpers/type_resolution/finalizer.py,sha256=_BcOBmOvadhBTUAvIc0Ak8FNxFw1uYL4rkKWtU68_m4,4332
83
84
  pyopenapi_gen/helpers/type_resolution/named_resolver.py,sha256=akHVthcD7cp9lHI-TCeABMacwQ2Z1gGp8zMGNsI_b5A,9403
84
85
  pyopenapi_gen/helpers/type_resolution/object_resolver.py,sha256=jayEjBr4evzIVMMAPc7g_gKb6BShFbAXG1oHMgskOcI,12373
85
86
  pyopenapi_gen/helpers/type_resolution/primitive_resolver.py,sha256=qTshZaye5ohibVfcJYCzh4v3CAshguMGWPt2FgvQeNM,1960
86
87
  pyopenapi_gen/helpers/type_resolution/resolver.py,sha256=qQY6wAitBluA-tofiyJ67Gxx8ol1W528zDWd9izYN5s,1982
88
+ pyopenapi_gen/helpers/url_utils.py,sha256=IflBiOcCzLrOvC5P25y12pk88Zu3X071hq4bCeDDxK0,340
89
+ pyopenapi_gen/http_types.py,sha256=EMMYZBt8PNVZKPFu77TQija-JI-nOKyXvpiQP9-VSWE,467
90
+ pyopenapi_gen/ir.py,sha256=OWQk53_iVi9JZxVeKRjagF0nhw57skkNPd-4jDsyD7M,7354
91
+ pyopenapi_gen/py.typed,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
92
+ pyopenapi_gen/types/CLAUDE.md,sha256=xRYlHdLhw3QGIfIlWqPt9pewRs736H1YCzwmslKtzZc,4255
87
93
  pyopenapi_gen/types/__init__.py,sha256=Tv4xouOXp1CeOcnhDdh_wWF9PBHAeZmCeVPSm71kouI,359
88
94
  pyopenapi_gen/types/contracts/__init__.py,sha256=qf5kJbbZ8TuH79UQSHBvjE1odKfNJrt5NrBEmurFlSU,358
89
95
  pyopenapi_gen/types/contracts/protocols.py,sha256=eyjsrvHQv1viNON9itrHO5TA-PtWUZERdK3aPO_3uXM,2887
@@ -91,34 +97,35 @@ pyopenapi_gen/types/contracts/types.py,sha256=-Qvbx3N_14AaN-1BeyocrvsjiwXPn_eWQh
91
97
  pyopenapi_gen/types/resolvers/__init__.py,sha256=_5kA49RvyOTyXgt0GbbOfHJcdQw2zHxvU9af8GGyNWc,295
92
98
  pyopenapi_gen/types/resolvers/reference_resolver.py,sha256=qnaZeLmtyh4_NBMcKib58s6o5ycUJaattYt8F38_qIo,2053
93
99
  pyopenapi_gen/types/resolvers/response_resolver.py,sha256=Kb1a2803lyoukoZy06ztPBlUw-A1lHiZ6NlJmsixxA8,6500
94
- pyopenapi_gen/types/resolvers/schema_resolver.py,sha256=sZTa9MV3f45SPXu-P32NHF_zbm4liuZq4hsV-xcG4ms,16898
100
+ pyopenapi_gen/types/resolvers/schema_resolver.py,sha256=R0N03MDLVzaFBQcrFOOTre1zqIg6APiWdHAT96ldgQ0,16898
95
101
  pyopenapi_gen/types/services/__init__.py,sha256=inSUKmY_Vnuym6tC-AhvjCTj16GbkfxCGLESRr_uQPE,123
96
102
  pyopenapi_gen/types/services/type_service.py,sha256=-LQj7oSx1mxb10Zi6DpawS8uyoUrUbnYhmUA0GuKZTc,4402
97
103
  pyopenapi_gen/types/strategies/__init__.py,sha256=bju8_KEPNIow1-woMO-zJCgK_E0M6JnFq0NFsK1R4Ss,171
98
104
  pyopenapi_gen/types/strategies/response_strategy.py,sha256=Y6E3O5xvCrJ2Y6IGn4BWlaGiQCC8Uk1a7BRJxfBkqrM,7387
105
+ pyopenapi_gen/visit/CLAUDE.md,sha256=Rq2e4S74TXv0ua2ZcCrO6cwCCccf3Yph44oVdj1yFPY,8297
99
106
  pyopenapi_gen/visit/client_visitor.py,sha256=vpLCGF353XtBjfS7W69-1b1d79opTb1i6qBue6vSz5g,11152
100
107
  pyopenapi_gen/visit/docs_visitor.py,sha256=hqgd4DAoy7T5Bap4mpH4R-nIZSyAWwFYmrIuNHM03Rg,1644
101
- pyopenapi_gen/visit/exception_visitor.py,sha256=6gWkjEWMYM35_rBNCgB-xdE0RvYwbj49wytAorLHK9k,2097
102
- pyopenapi_gen/visit/visitor.py,sha256=PANoV9zXMUrefr0pBLXIKkDOaTIjQ2hyL82cidVBCLU,3645
103
108
  pyopenapi_gen/visit/endpoint/__init__.py,sha256=DftIZSWp6Z8jKWoJE2VGKL4G_5cqwFXe9v-PALMmsGk,73
104
109
  pyopenapi_gen/visit/endpoint/endpoint_visitor.py,sha256=1aS0i2D_Y-979_7aBd0W6IS2UVO6wMujsMMw8Qt8PRE,3574
105
110
  pyopenapi_gen/visit/endpoint/generators/__init__.py,sha256=-X-GYnJZ9twiEBr_U0obW8VuSoY6IJmYaxinn-seMzA,50
106
- pyopenapi_gen/visit/endpoint/generators/docstring_generator.py,sha256=zHuWVIuonyY2IuLDbcVLt5MP2Ty7rcycLj496IQHwt0,5913
111
+ pyopenapi_gen/visit/endpoint/generators/docstring_generator.py,sha256=U02qvuYtFElQNEtOHuTNXFl2NxUriIiuZMkmUsapOg4,5913
107
112
  pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py,sha256=wUJ4_gaA1gRrFCHYFCObBIankxGQu0MNqiOSoZOZmoA,4352
108
113
  pyopenapi_gen/visit/endpoint/generators/request_generator.py,sha256=OnkrkRk39_BrK9ZDvyWqJYLz1mocD2zY7j70yIpS0J4,5374
109
114
  pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py,sha256=VuyYpUUQ3hIOwM0X_hrMk9qmQTC0P6xRQdC2HTTIyQw,22828
110
- pyopenapi_gen/visit/endpoint/generators/signature_generator.py,sha256=tozUJwfpO6r8Bx8ph4C92hJ2rOsuuc4SIloIFNXJB5Y,4390
115
+ pyopenapi_gen/visit/endpoint/generators/signature_generator.py,sha256=VC9Q_exZMpUh46hn1JXaDRlgVm3Gb-D2v36h9SDF10k,4390
111
116
  pyopenapi_gen/visit/endpoint/generators/url_args_generator.py,sha256=EsmNuVSkGfUqrmV7-1GiLPzdN86V5UqLfs1SVY0jsf0,9590
112
117
  pyopenapi_gen/visit/endpoint/processors/__init__.py,sha256=_6RqpOdDuDheArqDBi3ykhsaetACny88WUuuAJvr_ME,29
113
118
  pyopenapi_gen/visit/endpoint/processors/import_analyzer.py,sha256=tNmhgWwt-CjLE774TC8sPVH1-yaTKKm6JmfgBT2-iRk,3386
114
- pyopenapi_gen/visit/endpoint/processors/parameter_processor.py,sha256=0ste9M99jltzTjIm-b4oT8YOA0D7kHOuKHh36v7V9Ds,7700
119
+ pyopenapi_gen/visit/endpoint/processors/parameter_processor.py,sha256=BygP8yzSTrxfvNpEQIHERjd2NpEXDiwpCtmMseJKRq0,7700
120
+ pyopenapi_gen/visit/exception_visitor.py,sha256=6gWkjEWMYM35_rBNCgB-xdE0RvYwbj49wytAorLHK9k,2097
115
121
  pyopenapi_gen/visit/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
122
  pyopenapi_gen/visit/model/alias_generator.py,sha256=3iPFDjCXU0Vm59Hfp64jTDfHoUL8ouXTTfoEwiOVm4Q,3558
117
123
  pyopenapi_gen/visit/model/dataclass_generator.py,sha256=WtcQNx6l2sxVyTlH1MdQ-UFYWVMsxQk5nyJr1Mk02iM,9999
118
124
  pyopenapi_gen/visit/model/enum_generator.py,sha256=QWsD-IAxGOxKQuC6LLNUvbT8Ot3NWrLFsaYT0DI16DU,9670
119
125
  pyopenapi_gen/visit/model/model_visitor.py,sha256=PZeQd7-dlxZf5gY10BW-DhswmAGF903NccV6L56mjoE,9439
120
- pyopenapi_gen-0.8.7.dist-info/METADATA,sha256=uVLIdsrt5sobCtWIennE0snRYQWwM4QHknfXboDOKnI,13488
121
- pyopenapi_gen-0.8.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
122
- pyopenapi_gen-0.8.7.dist-info/entry_points.txt,sha256=gxSlNiwom50T3OEZnlocA6qRjGdV0bn6hN_Xr-Ub5wA,56
123
- pyopenapi_gen-0.8.7.dist-info/licenses/LICENSE,sha256=UFAyTWKa4w10-QerlJaHJeep7G2gcwpf-JmvI2dS2Gc,1088
124
- pyopenapi_gen-0.8.7.dist-info/RECORD,,
126
+ pyopenapi_gen/visit/visitor.py,sha256=PANoV9zXMUrefr0pBLXIKkDOaTIjQ2hyL82cidVBCLU,3645
127
+ pyopenapi_gen-0.9.0.dist-info/LICENSE,sha256=UFAyTWKa4w10-QerlJaHJeep7G2gcwpf-JmvI2dS2Gc,1088
128
+ pyopenapi_gen-0.9.0.dist-info/METADATA,sha256=lEdvMAFw_H1a1rB4UWpJCbkODI-X1gugSlur1RyDiGY,14111
129
+ pyopenapi_gen-0.9.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
130
+ pyopenapi_gen-0.9.0.dist-info/entry_points.txt,sha256=yVJYlAQOD_pt6_tBmBPE9UiaSPiXtzzBDcS6lfKoKSo,55
131
+ pyopenapi_gen-0.9.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: poetry-core 2.0.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ pyopenapi-gen=pyopenapi_gen.cli:app
3
+
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- pyopenapi-gen = pyopenapi_gen.cli:app