pyopenapi-gen 0.14.0__py3-none-any.whl → 0.14.2__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 (80) hide show
  1. pyopenapi_gen/cli.py +3 -3
  2. pyopenapi_gen/context/import_collector.py +10 -10
  3. pyopenapi_gen/context/render_context.py +13 -13
  4. pyopenapi_gen/core/auth/plugins.py +7 -7
  5. pyopenapi_gen/core/http_status_codes.py +2 -4
  6. pyopenapi_gen/core/http_transport.py +19 -19
  7. pyopenapi_gen/core/loader/operations/parser.py +2 -2
  8. pyopenapi_gen/core/loader/operations/request_body.py +3 -3
  9. pyopenapi_gen/core/loader/parameters/parser.py +3 -3
  10. pyopenapi_gen/core/loader/responses/parser.py +2 -2
  11. pyopenapi_gen/core/loader/schemas/extractor.py +4 -4
  12. pyopenapi_gen/core/pagination.py +3 -3
  13. pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +3 -3
  14. pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +2 -2
  15. pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +3 -3
  16. pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +3 -3
  17. pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +2 -2
  18. pyopenapi_gen/core/parsing/common/type_parser.py +2 -3
  19. pyopenapi_gen/core/parsing/context.py +10 -10
  20. pyopenapi_gen/core/parsing/cycle_helpers.py +5 -2
  21. pyopenapi_gen/core/parsing/keywords/all_of_parser.py +5 -5
  22. pyopenapi_gen/core/parsing/keywords/any_of_parser.py +4 -4
  23. pyopenapi_gen/core/parsing/keywords/array_items_parser.py +4 -4
  24. pyopenapi_gen/core/parsing/keywords/one_of_parser.py +4 -4
  25. pyopenapi_gen/core/parsing/keywords/properties_parser.py +5 -5
  26. pyopenapi_gen/core/parsing/schema_finalizer.py +15 -15
  27. pyopenapi_gen/core/parsing/schema_parser.py +44 -25
  28. pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +4 -4
  29. pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +7 -4
  30. pyopenapi_gen/core/parsing/unified_cycle_detection.py +10 -10
  31. pyopenapi_gen/core/schemas.py +10 -10
  32. pyopenapi_gen/core/streaming_helpers.py +5 -7
  33. pyopenapi_gen/core/telemetry.py +4 -4
  34. pyopenapi_gen/core/utils.py +7 -7
  35. pyopenapi_gen/core/writers/code_writer.py +2 -2
  36. pyopenapi_gen/core/writers/documentation_writer.py +18 -18
  37. pyopenapi_gen/core/writers/line_writer.py +3 -3
  38. pyopenapi_gen/core/writers/python_construct_renderer.py +10 -10
  39. pyopenapi_gen/emit/models_emitter.py +2 -2
  40. pyopenapi_gen/emitters/core_emitter.py +3 -5
  41. pyopenapi_gen/emitters/endpoints_emitter.py +24 -16
  42. pyopenapi_gen/emitters/exceptions_emitter.py +4 -3
  43. pyopenapi_gen/emitters/models_emitter.py +6 -6
  44. pyopenapi_gen/generator/client_generator.py +6 -6
  45. pyopenapi_gen/helpers/endpoint_utils.py +16 -18
  46. pyopenapi_gen/helpers/type_cleaner.py +66 -53
  47. pyopenapi_gen/helpers/type_helper.py +7 -7
  48. pyopenapi_gen/helpers/type_resolution/array_resolver.py +4 -4
  49. pyopenapi_gen/helpers/type_resolution/composition_resolver.py +5 -5
  50. pyopenapi_gen/helpers/type_resolution/finalizer.py +38 -22
  51. pyopenapi_gen/helpers/type_resolution/named_resolver.py +4 -5
  52. pyopenapi_gen/helpers/type_resolution/object_resolver.py +11 -11
  53. pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +1 -2
  54. pyopenapi_gen/helpers/type_resolution/resolver.py +2 -3
  55. pyopenapi_gen/ir.py +32 -34
  56. pyopenapi_gen/types/contracts/protocols.py +5 -5
  57. pyopenapi_gen/types/contracts/types.py +2 -3
  58. pyopenapi_gen/types/resolvers/reference_resolver.py +4 -4
  59. pyopenapi_gen/types/resolvers/response_resolver.py +6 -4
  60. pyopenapi_gen/types/resolvers/schema_resolver.py +32 -16
  61. pyopenapi_gen/types/services/type_service.py +55 -9
  62. pyopenapi_gen/types/strategies/response_strategy.py +6 -7
  63. pyopenapi_gen/visit/client_visitor.py +5 -7
  64. pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +7 -7
  65. pyopenapi_gen/visit/endpoint/generators/request_generator.py +5 -5
  66. pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +38 -17
  67. pyopenapi_gen/visit/endpoint/generators/signature_generator.py +4 -4
  68. pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +17 -17
  69. pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +8 -8
  70. pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +13 -13
  71. pyopenapi_gen/visit/model/alias_generator.py +1 -4
  72. pyopenapi_gen/visit/model/dataclass_generator.py +139 -10
  73. pyopenapi_gen/visit/model/model_visitor.py +2 -3
  74. pyopenapi_gen/visit/visitor.py +3 -3
  75. {pyopenapi_gen-0.14.0.dist-info → pyopenapi_gen-0.14.2.dist-info}/METADATA +1 -1
  76. pyopenapi_gen-0.14.2.dist-info/RECORD +132 -0
  77. pyopenapi_gen-0.14.0.dist-info/RECORD +0 -132
  78. {pyopenapi_gen-0.14.0.dist-info → pyopenapi_gen-0.14.2.dist-info}/WHEEL +0 -0
  79. {pyopenapi_gen-0.14.0.dist-info → pyopenapi_gen-0.14.2.dist-info}/entry_points.txt +0 -0
  80. {pyopenapi_gen-0.14.0.dist-info → pyopenapi_gen-0.14.2.dist-info}/licenses/LICENSE +0 -0
@@ -4,7 +4,7 @@ Generates Python code for dataclasses from IRSchema objects.
4
4
 
5
5
  import json
6
6
  import logging
7
- from typing import Any, Dict, List, Optional, Tuple
7
+ from typing import Any, List, Tuple
8
8
 
9
9
  from pyopenapi_gen import IRSchema
10
10
  from pyopenapi_gen.context.render_context import RenderContext
@@ -22,7 +22,7 @@ class DataclassGenerator:
22
22
  def __init__(
23
23
  self,
24
24
  renderer: PythonConstructRenderer,
25
- all_schemas: Optional[Dict[str, IRSchema]],
25
+ all_schemas: dict[str, IRSchema] | None,
26
26
  ):
27
27
  """
28
28
  Initialize a new DataclassGenerator.
@@ -37,7 +37,130 @@ class DataclassGenerator:
37
37
  self.all_schemas = all_schemas if all_schemas is not None else {}
38
38
  self.type_service = UnifiedTypeService(self.all_schemas)
39
39
 
40
- def _get_field_default(self, ps: IRSchema, context: RenderContext) -> Optional[str]:
40
+ def _is_arbitrary_json_object(self, schema: IRSchema) -> bool:
41
+ """
42
+ Check if schema represents an arbitrary JSON object (additionalProperties but no properties).
43
+
44
+ Args:
45
+ schema: The schema to check.
46
+
47
+ Returns:
48
+ True if this is an arbitrary JSON object that should use wrapper class.
49
+ """
50
+ return (
51
+ schema.type == "object"
52
+ and not schema.properties # No defined properties
53
+ and (
54
+ schema.additional_properties is True # Explicit true
55
+ or isinstance(schema.additional_properties, IRSchema) # Schema for additional props
56
+ )
57
+ )
58
+
59
+ def _generate_json_wrapper_class(
60
+ self,
61
+ class_name: str,
62
+ schema: IRSchema,
63
+ context: RenderContext,
64
+ ) -> str:
65
+ """
66
+ Generate a wrapper class for arbitrary JSON objects.
67
+
68
+ This wrapper class preserves all JSON data and provides dict-like access,
69
+ preventing data loss when deserializing API responses with arbitrary properties.
70
+
71
+ Args:
72
+ class_name: Name of the wrapper class.
73
+ schema: The schema (should have additionalProperties but no properties).
74
+ context: Render context for imports.
75
+
76
+ Returns:
77
+ Python code for the wrapper class.
78
+ """
79
+ # Register required imports
80
+ context.add_import("dataclasses", "dataclass")
81
+ context.add_import("dataclasses", "field")
82
+ context.add_import("typing", "Any")
83
+ context.add_import("..core.schemas", "BaseSchema")
84
+
85
+ description = schema.description or "Generic JSON value object that preserves arbitrary data."
86
+
87
+ # Generate the wrapper class code
88
+ code = f'''__all__ = ["{class_name}"]
89
+
90
+ @dataclass
91
+ class {class_name}(BaseSchema):
92
+ """
93
+ {description}
94
+
95
+ This class wraps arbitrary JSON objects with no defined schema,
96
+ preserving all data during serialization/deserialization.
97
+ """
98
+
99
+ _data: dict[str, Any] = field(default_factory=dict, repr=False)
100
+
101
+ @classmethod
102
+ def from_dict(cls, data: dict[str, Any]) -> '{class_name}':
103
+ """
104
+ Create {class_name} from dictionary, preserving all data.
105
+
106
+ Args:
107
+ data: Dictionary with arbitrary keys and values.
108
+
109
+ Returns:
110
+ {class_name} instance containing the data.
111
+ """
112
+ instance = cls(_data=data)
113
+ return instance
114
+
115
+ def to_dict(self, exclude_none: bool = False) -> dict[str, Any]:
116
+ """
117
+ Convert back to dictionary.
118
+
119
+ Args:
120
+ exclude_none: If True, exclude None values from output.
121
+
122
+ Returns:
123
+ Dictionary representation of the data.
124
+ """
125
+ if exclude_none:
126
+ return {{k: v for k, v in self._data.items() if v is not None}}
127
+ return self._data.copy()
128
+
129
+ def get(self, key: str, default: Any = None) -> Any:
130
+ """Dict-like get method for backward compatibility."""
131
+ return self._data.get(key, default)
132
+
133
+ def __getitem__(self, key: str) -> Any:
134
+ """Dict-like item access."""
135
+ return self._data[key]
136
+
137
+ def __setitem__(self, key: str, value: Any) -> None:
138
+ """Dict-like item setting."""
139
+ self._data[key] = value
140
+
141
+ def __contains__(self, key: str) -> bool:
142
+ """Dict-like 'in' operator."""
143
+ return key in self._data
144
+
145
+ def __bool__(self) -> bool:
146
+ """Truthy if contains data."""
147
+ return bool(self._data)
148
+
149
+ def keys(self) -> Any:
150
+ """Return dictionary keys."""
151
+ return self._data.keys()
152
+
153
+ def values(self) -> Any:
154
+ """Return dictionary values."""
155
+ return self._data.values()
156
+
157
+ def items(self) -> Any:
158
+ """Return dictionary items."""
159
+ return self._data.items()
160
+ '''
161
+ return code
162
+
163
+ def _get_field_default(self, ps: IRSchema, context: RenderContext) -> str | None:
41
164
  """
42
165
  Determines the default value expression string for a dataclass field.
43
166
  This method is called for fields determined to be optional.
@@ -88,7 +211,7 @@ class DataclassGenerator:
88
211
  """Check if field mapping is required between API and Python field names."""
89
212
  return api_field != python_field
90
213
 
91
- def _generate_field_mappings(self, properties: Dict[str, Any], sanitized_names: Dict[str, str]) -> Dict[str, str]:
214
+ def _generate_field_mappings(self, properties: dict[str, Any], sanitized_names: dict[str, str]) -> dict[str, str]:
92
215
  """Generate field mappings for BaseSchema configuration."""
93
216
  mappings = {}
94
217
  for api_name, python_name in sanitized_names.items():
@@ -96,7 +219,7 @@ class DataclassGenerator:
96
219
  mappings[api_name] = python_name
97
220
  return mappings
98
221
 
99
- def _has_any_mappings(self, properties: Dict[str, Any], sanitized_names: Dict[str, str]) -> bool:
222
+ def _has_any_mappings(self, properties: dict[str, Any], sanitized_names: dict[str, str]) -> bool:
100
223
  """Check if any field mappings are needed."""
101
224
  return bool(self._generate_field_mappings(properties, sanitized_names))
102
225
 
@@ -137,9 +260,17 @@ class DataclassGenerator:
137
260
  raise ValueError("RenderContext cannot be None.")
138
261
  # Additional check for schema type might be too strict here, as ModelVisitor decides eligibility.
139
262
 
263
+ # Check if this is an arbitrary JSON object that needs wrapper class
264
+ if self._is_arbitrary_json_object(schema):
265
+ logger.info(
266
+ f"DataclassGenerator: Schema '{base_name}' is an arbitrary JSON object. "
267
+ "Generating wrapper class to preserve data."
268
+ )
269
+ return self._generate_json_wrapper_class(base_name, schema, context)
270
+
140
271
  class_name = base_name
141
- fields_data: List[Tuple[str, str, Optional[str], Optional[str]]] = []
142
- field_mappings: Dict[str, str] = {}
272
+ fields_data: List[Tuple[str, str, str | None, str | None]] = []
273
+ field_mappings: dict[str, str] = {}
143
274
 
144
275
  if schema.type == "array" and schema.items:
145
276
  field_name_for_array_content = "items"
@@ -147,7 +278,6 @@ class DataclassGenerator:
147
278
  raise ValueError("Schema items must be present for array type dataclass field.")
148
279
 
149
280
  list_item_py_type = self.type_service.resolve_schema_type(schema.items, context, required=True)
150
- list_item_py_type = TypeFinalizer(context)._clean_type(list_item_py_type)
151
281
  field_type_str = f"List[{list_item_py_type}]"
152
282
 
153
283
  final_field_type_str = TypeFinalizer(context).finalize(
@@ -191,9 +321,8 @@ class DataclassGenerator:
191
321
  field_mappings[prop_name] = field_name
192
322
 
193
323
  py_type = self.type_service.resolve_schema_type(prop_schema, context, required=is_required)
194
- py_type = TypeFinalizer(context)._clean_type(py_type)
195
324
 
196
- default_expr: Optional[str] = None
325
+ default_expr: str | None = None
197
326
  if not is_required:
198
327
  default_expr = self._get_field_default(prop_schema, context)
199
328
 
@@ -6,7 +6,6 @@ defined in OpenAPI specifications, supporting type aliases, enums, and dataclass
6
6
  """
7
7
 
8
8
  import logging
9
- from typing import Dict, Optional
10
9
 
11
10
  from pyopenapi_gen import IRSchema
12
11
  from pyopenapi_gen.context.render_context import RenderContext
@@ -36,7 +35,7 @@ class ModelVisitor(Visitor[IRSchema, str]):
36
35
  - All necessary imports for the generated model are registered in the context.
37
36
  """
38
37
 
39
- def __init__(self, schemas: Optional[Dict[str, IRSchema]] = None) -> None:
38
+ def __init__(self, schemas: dict[str, IRSchema] | None = None) -> None:
40
39
  """
41
40
  Initialize a new ModelVisitor.
42
41
 
@@ -156,7 +155,7 @@ class ModelVisitor(Visitor[IRSchema, str]):
156
155
 
157
156
  return self.formatter.format(rendered_code)
158
157
 
159
- def _get_field_default(self, ps: IRSchema, context: RenderContext) -> Optional[str]:
158
+ def _get_field_default(self, ps: IRSchema, context: RenderContext) -> str | None:
160
159
  """
161
160
  Determines the default value expression string for a dataclass field.
162
161
  This method is called for fields determined to be optional.
@@ -7,7 +7,7 @@ the base Visitor class that all specific visitors inherit from, and a Registry c
7
7
  managing visitor method registration.
8
8
  """
9
9
 
10
- from typing import Callable, Dict, Generic, Optional, Type, TypeVar
10
+ from typing import Callable, Generic, Type, TypeVar
11
11
 
12
12
  from ..context.render_context import RenderContext
13
13
 
@@ -72,7 +72,7 @@ class Registry(Generic[tNode, tRet]):
72
72
 
73
73
  def __init__(self) -> None:
74
74
  """Initialize an empty visitor registry."""
75
- self._registry: Dict[Type[tNode], Callable[[tNode, "RenderContext"], tRet]] = {}
75
+ self._registry: dict[Type[tNode], Callable[[tNode, "RenderContext"], tRet]] = {}
76
76
 
77
77
  def register(self, node_type: Type[tNode], visitor: Callable[[tNode, "RenderContext"], tRet]) -> None:
78
78
  """
@@ -84,7 +84,7 @@ class Registry(Generic[tNode, tRet]):
84
84
  """
85
85
  self._registry[node_type] = visitor
86
86
 
87
- def get_visitor(self, node_type: Type[tNode]) -> Optional[Callable[[tNode, "RenderContext"], tRet]]:
87
+ def get_visitor(self, node_type: Type[tNode]) -> Callable[[tNode, "RenderContext"], tRet] | None:
88
88
  """
89
89
  Retrieve the visitor function for a specific node type.
90
90
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyopenapi-gen
3
- Version: 0.14.0
3
+ Version: 0.14.2
4
4
  Summary: Modern, async-first Python client generator for OpenAPI specifications with advanced cycle detection and unified type resolution
5
5
  Project-URL: Homepage, https://github.com/your-org/pyopenapi-gen
6
6
  Project-URL: Documentation, https://github.com/your-org/pyopenapi-gen/blob/main/README.md
@@ -0,0 +1,132 @@
1
+ pyopenapi_gen/__init__.py,sha256=jU5GYbWa4MBDeDzOzwUHl_8eLGtotxRGLj42d2yskUo,3017
2
+ pyopenapi_gen/__main__.py,sha256=4-SCaCNhBd7rtyRK58uoDbdl93J0KhUeajP_b0CPpLE,110
3
+ pyopenapi_gen/cli.py,sha256=9T_XF3-ih_JlM_BOkmHft-HoMCGOqL5UrnAHBJ0fb5w,2320
4
+ pyopenapi_gen/http_types.py,sha256=EMMYZBt8PNVZKPFu77TQija-JI-nOKyXvpiQP9-VSWE,467
5
+ pyopenapi_gen/ir.py,sha256=lGrn5VzU5gXHc_Tkjfte2AeMMsTyzAci4dy0bi5aG1E,7243
6
+ pyopenapi_gen/py.typed,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
7
+ pyopenapi_gen/context/CLAUDE.md,sha256=eUPvSY2ADQK21i52bWfzyBcDPVvvepErMiQrq6ndwlU,9004
8
+ pyopenapi_gen/context/file_manager.py,sha256=vpbRByO5SH6COdjb6C-pXkdSIRu7QFqrXxi69VLKBnM,1691
9
+ pyopenapi_gen/context/import_collector.py,sha256=5WzQ5fXxARHJFZmYZ_GjPG5YjjzRLZTdN7jO2cbbk88,15225
10
+ pyopenapi_gen/context/render_context.py,sha256=07oINhHWi78qhcf-FNSOtojUrshmw0ZOTEgPpzBptbU,30271
11
+ pyopenapi_gen/core/CLAUDE.md,sha256=bz48K-PSrhxCq5ScmiLiU9kfpVVzSWRKOA9RdKk_pbg,6482
12
+ pyopenapi_gen/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ pyopenapi_gen/core/exceptions.py,sha256=HYFiYdmzsZUl46vB8M3B6Vpp6m8iqjUcKDWdL4yEKHo,498
14
+ pyopenapi_gen/core/http_status_codes.py,sha256=nn8QdXmkv5BQA9C-HTn9wmAVWyEyB9bAHpHve6EZX4M,6249
15
+ pyopenapi_gen/core/http_transport.py,sha256=Ssyh5a4wWWZlvxG1jhTmynZUTBe5rtVgyDK5FIUXyos,9617
16
+ pyopenapi_gen/core/pagination.py,sha256=mXSOyfVblWF0jc8dnqXIi0Vgj2UxC_uO_WuvdRIBzs4,2295
17
+ pyopenapi_gen/core/postprocess_manager.py,sha256=cia8FbDXbulk44ElT1CTlypu1oFjNM41y1gWy8-HSug,9362
18
+ pyopenapi_gen/core/schemas.py,sha256=Ngehd-Aj4Drs_5i7eL0L5Eu1B_kfT4qxL94TJ_H_I7w,5523
19
+ pyopenapi_gen/core/streaming_helpers.py,sha256=5fkzH9xsgzZWOTKFrZpmje07S7n7CcOpjteb5dig7ds,2664
20
+ pyopenapi_gen/core/telemetry.py,sha256=vZ8PqNctndrmII9I1EHCyvp2bVGofBuHjm7II0tIqps,2203
21
+ pyopenapi_gen/core/utils.py,sha256=rgKNyoOXRleGueUFItM5fpxUxwNMJOGISC_XxSPCPLg,14141
22
+ pyopenapi_gen/core/warning_collector.py,sha256=DYl9D7eZYs04mDU84KeonS-5-d0aM7hNqraXTex31ss,2799
23
+ pyopenapi_gen/core/auth/base.py,sha256=E2KUerA_mYv9D7xulUm-lenIxqZHqanjA4oRKpof2ZE,792
24
+ pyopenapi_gen/core/auth/plugins.py,sha256=u4GZTykoxGwGaWAQyFeTdPKi-pSK7Dp0DCeg5RsrSw4,3446
25
+ pyopenapi_gen/core/loader/__init__.py,sha256=bt-MQ35fbq-f1YnCcopPg53TuXCI9_7wcMzQZoWVpjU,391
26
+ pyopenapi_gen/core/loader/loader.py,sha256=fjRw6ZrG6hRS2RBWJY5IOv9e1ULc6tnxVGagqXhMmpk,6374
27
+ pyopenapi_gen/core/loader/operations/__init__.py,sha256=7se21D-BOy7Qw6C9auJ9v6D3NCuRiDpRlhqxGq11fJs,366
28
+ pyopenapi_gen/core/loader/operations/parser.py,sha256=E53NCTdTp9a6VKxhSx_6r-jP3BaSz-XtJKnJmwKcYzc,7033
29
+ pyopenapi_gen/core/loader/operations/post_processor.py,sha256=Rzb3GSiLyJk-0hTBZ6s6iWAj4KqE4Rfo3w-q2wm_R7w,2487
30
+ pyopenapi_gen/core/loader/operations/request_body.py,sha256=A6kX2oyNh3Ag_h-Flk8gDzZjiUl3lq8F6jGb3o-UhFg,3205
31
+ pyopenapi_gen/core/loader/parameters/__init__.py,sha256=p13oSibCRC5RCfsP6w7yD9MYs5TXcdI4WwPv7oGUYKk,284
32
+ pyopenapi_gen/core/loader/parameters/parser.py,sha256=0qGFcbnyWXacrnbxDPicw59JVwl3B3f4NP4tXVJBS9E,8033
33
+ pyopenapi_gen/core/loader/responses/__init__.py,sha256=6APWoH3IdNkgVmI0KsgZoZ6knDaG-S-pnUCa6gkzT8E,216
34
+ pyopenapi_gen/core/loader/responses/parser.py,sha256=6dZ86WvyBxPq68UQjF_F8F2FtmGtMm5ZB8UjKXZTu9Y,4063
35
+ pyopenapi_gen/core/loader/schemas/__init__.py,sha256=rlhujYfw_IzWgzhVhYMJ3eIhE6C5Vi1Ylba-BHEVqOg,296
36
+ pyopenapi_gen/core/loader/schemas/extractor.py,sha256=vhdVAdhnBYcK-97oYDbMwUjINuJDks8RMA03B_LwWBs,9883
37
+ pyopenapi_gen/core/parsing/__init__.py,sha256=RJsIR6cHaNoI4tBcpMlAa0JsY64vsHb9sPxPg6rd8FQ,486
38
+ pyopenapi_gen/core/parsing/context.py,sha256=oahabtftjYiyeKNHwc3fWjSGrIoCeNnKN-KhWofiOmk,7968
39
+ pyopenapi_gen/core/parsing/cycle_helpers.py,sha256=HyVQBWU78PbypyppHq34yxr6BG4W5Bt4ev5kkGUyvkg,5969
40
+ pyopenapi_gen/core/parsing/schema_finalizer.py,sha256=BMx7nlg5tECbKDfv6XEwumNNPkzkL5qRPdYrRI8qrxo,6856
41
+ pyopenapi_gen/core/parsing/schema_parser.py,sha256=1c2pPyFLDNnvfJ0YxPvIdcJWbGk7SG-k2bxGfYF5I7Y,34239
42
+ pyopenapi_gen/core/parsing/unified_cycle_detection.py,sha256=MXghh1Ip6P1etfjuzPiRiDHBdFdQUb9nFUQqhexcvfc,10836
43
+ pyopenapi_gen/core/parsing/common/__init__.py,sha256=U3sHMO-l6S3Cm04CVOYmBCpqLEZvCylUI7yQfcTwxYU,27
44
+ pyopenapi_gen/core/parsing/common/type_parser.py,sha256=h9pg0KWFezjNYvo-A1Dx_ADA7dp4THeMb_JKmZRJk1Q,2542
45
+ pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py,sha256=BZOSPQo8bongKYgA4w-KGNBCjfNKoe1mm91CrqNIaTk,150
46
+ pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py,sha256=BC2t838RAMQknUDIVz6F0QN0avxq4kDL4ie7GgjRSQA,3620
47
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py,sha256=tsHnIdyznAxXz_yA9Ub1ONxi2GSYcVJwKogBkTm95jU,2160
49
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py,sha256=UoqD9I7s-WwI50PlgwFmLhFQd3ai8YIJycfkQhq6QlI,1145
50
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py,sha256=mgHopKN9ZB2maLrPRNubrSavq0oLYjeJQac60IMRj1Q,627
51
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py,sha256=3e90a0u06LIYnXj2TM7aWGfr_DB0L9sLk1HBX2nxy68,1782
52
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py,sha256=LM5GJwpkl9jND5LCoxWDnnsoSNKWNT6vf-rYuKG6pk0,1827
53
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py,sha256=sEYJrcI1s8TdYei6GP1jcJeiF2zPFyTOIUjnUy6PBTs,1603
54
+ pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py,sha256=AONISSQB4mFnSlCnHPFAECjB1bAeytIXuqswIUiMmGM,1755
55
+ pyopenapi_gen/core/parsing/keywords/__init__.py,sha256=enTLacWXGXLIOjSJ3j7KNUDzU27Kq3Ww79sFElz02cM,27
56
+ pyopenapi_gen/core/parsing/keywords/all_of_parser.py,sha256=RYP5MZTCPMJ-yrRqt2tLT6-5MYIB1azFJq3BpBEUMlg,3671
57
+ pyopenapi_gen/core/parsing/keywords/any_of_parser.py,sha256=qZHhzv3AvXjU2xRFRkQE-bBYBrf2RKhUOUOUkyksj1Q,2957
58
+ pyopenapi_gen/core/parsing/keywords/array_items_parser.py,sha256=raGsT0V__KX_CvMnIUGlRHvpAuGcPLMNth8PYHP9IEo,2701
59
+ pyopenapi_gen/core/parsing/keywords/one_of_parser.py,sha256=2X7JW242xnSQUpftjcyLUUXTzfaElBdjMsUQsM956tw,2702
60
+ pyopenapi_gen/core/parsing/keywords/properties_parser.py,sha256=Wg8sCRrnnjI0kC8clchom4xSH_C_JVNQUpgiUz9oJps,4398
61
+ pyopenapi_gen/core/parsing/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py,sha256=lVzzQkKb28l1pTc2Zev3zKid8FcTDNjRLTWEdwt72OM,13442
63
+ pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py,sha256=d9DZ1CVd6ZFxeyBRJXRJYS_irDL7gcrTGnKzjyhhON8,5107
64
+ pyopenapi_gen/core/writers/code_writer.py,sha256=5rWMPRdj5dWu3NRER6do4NEJEIa9qL68Hc7zhJ8jSdg,4763
65
+ pyopenapi_gen/core/writers/documentation_writer.py,sha256=ZnXJsRc9y9bUMsQR7g0qoBJZbBo2MCxHH_5KgxrPtyA,8645
66
+ pyopenapi_gen/core/writers/line_writer.py,sha256=-K2FaMtQa6hdzGZLcjQrT2ItEmfE-kquTCrn6R3I_QA,7743
67
+ pyopenapi_gen/core/writers/python_construct_renderer.py,sha256=aRLSiqUkf5Cp72BbJP7nVTmwPPrYlk8W66175joKAg0,12766
68
+ pyopenapi_gen/core_package_template/README.md,sha256=8YP-MS0KxphRbCGBf7kV3dYIFLU9piOJ3IMm3K_0hcI,1488
69
+ pyopenapi_gen/emit/models_emitter.py,sha256=MBRq71UjtlZHrpf9QhDN0wXk_X-oGeGd6TAq3RKG7ko,7180
70
+ pyopenapi_gen/emitters/CLAUDE.md,sha256=iZYEZq1a1h033rxuh97cMpsKUElv72ysvTm3-QQUvrs,9323
71
+ pyopenapi_gen/emitters/client_emitter.py,sha256=kmMVnG-wAOJm7TUm0xOQ5YnSJfYxz1SwtpiyoUCbcCA,1939
72
+ pyopenapi_gen/emitters/core_emitter.py,sha256=YSuqDlYv3P687TsVT_Z9n7a6GZepGAvv3-N1Q2kK6Zg,7975
73
+ pyopenapi_gen/emitters/docs_emitter.py,sha256=aouKqhRdtVvYfGVsye_uqM80nONRy0SqN06cr1l3OgA,1137
74
+ pyopenapi_gen/emitters/endpoints_emitter.py,sha256=0DXOXu2Yb3DRTic_k63q2L-yKS6ZFdhbcBCK3DPZU3Y,10040
75
+ pyopenapi_gen/emitters/exceptions_emitter.py,sha256=PfbDQX7dfgg2htvxEh40t7FR7b3BrK8jeRd5INu_kjk,7547
76
+ pyopenapi_gen/emitters/models_emitter.py,sha256=wJwtvCGEmhy5yhojfoUW2CXNOQytGlN4J8-GcwoYIMY,22221
77
+ pyopenapi_gen/generator/CLAUDE.md,sha256=BS9KkmLvk2WD-Io-_apoWjGNeMU4q4LKy4UOxYF9WxM,10870
78
+ pyopenapi_gen/generator/client_generator.py,sha256=EdbeynrOLs7kVhyULJeKOP0jDyfHGfEY_Rss5iI73hw,29407
79
+ pyopenapi_gen/helpers/CLAUDE.md,sha256=GyIJ0grp4SkD3plAUzyycW4nTUZf9ewtvvsdAGkmIZw,10609
80
+ pyopenapi_gen/helpers/__init__.py,sha256=m4jSQ1sDH6CesIcqIl_kox4LcDFabGxBpSIWVwbHK0M,39
81
+ pyopenapi_gen/helpers/endpoint_utils.py,sha256=9qVMIOxJUdJePFskA2A0AFMox_h64Liyc4EfNZNXrXU,22155
82
+ pyopenapi_gen/helpers/type_cleaner.py,sha256=2FJUkSHMgROHlj6oqRpxg3J088Y72EByxLPIfMjZdyE,14340
83
+ pyopenapi_gen/helpers/type_helper.py,sha256=5U-VjdY4iEP-64SAc6y0jZGi5fFPsK6hL0yMzF20Tq0,4254
84
+ pyopenapi_gen/helpers/url_utils.py,sha256=IflBiOcCzLrOvC5P25y12pk88Zu3X071hq4bCeDDxK0,340
85
+ pyopenapi_gen/helpers/type_resolution/__init__.py,sha256=TbaQZp7jvBiYgmuzuG8Wp56xZq32xEKtpunHqZVG1VA,85
86
+ pyopenapi_gen/helpers/type_resolution/array_resolver.py,sha256=3sfexxcmXMxp_hkvHtv2eI5xTKyfilIDkrMg530gWKY,2001
87
+ pyopenapi_gen/helpers/type_resolution/composition_resolver.py,sha256=3waIQtOhbbgFxKXW9EiWeuW0DW-JKI_JTuXbJ_ekVTc,2990
88
+ pyopenapi_gen/helpers/type_resolution/finalizer.py,sha256=QfN0JuqmkV9nOTpc1Jw1GY5WpaFgLfBOt9ErTXfju_I,5426
89
+ pyopenapi_gen/helpers/type_resolution/named_resolver.py,sha256=WKXjGotf-oApmViMp29deulvo7rHaw1NvlNWP0jrF1g,9380
90
+ pyopenapi_gen/helpers/type_resolution/object_resolver.py,sha256=HVdnD_c7erUWr1aeNlIvOthkPbseQhy91JWHssZUc3M,12529
91
+ pyopenapi_gen/helpers/type_resolution/primitive_resolver.py,sha256=f_5G_NZ9gxMmhOvvpSEvNm6BTHkaQxjax1TEu44Rr8k,1929
92
+ pyopenapi_gen/helpers/type_resolution/resolver.py,sha256=qploDVhkjC0ogq0iwQcCi-cb3HO6WYJHixijZAUOdco,1945
93
+ pyopenapi_gen/types/CLAUDE.md,sha256=xRYlHdLhw3QGIfIlWqPt9pewRs736H1YCzwmslKtzZc,4255
94
+ pyopenapi_gen/types/__init__.py,sha256=Tv4xouOXp1CeOcnhDdh_wWF9PBHAeZmCeVPSm71kouI,359
95
+ pyopenapi_gen/types/contracts/__init__.py,sha256=qf5kJbbZ8TuH79UQSHBvjE1odKfNJrt5NrBEmurFlSU,358
96
+ pyopenapi_gen/types/contracts/protocols.py,sha256=uX8He1izFSCGcJf-Z1LJL8P6lw9S4bmmsbInT3BIwHM,2865
97
+ pyopenapi_gen/types/contracts/types.py,sha256=k3tCjMu6M1zcVXF6jzr-Q9S6LXaMEMoKoO09YEbKeyY,763
98
+ pyopenapi_gen/types/resolvers/__init__.py,sha256=_5kA49RvyOTyXgt0GbbOfHJcdQw2zHxvU9af8GGyNWc,295
99
+ pyopenapi_gen/types/resolvers/reference_resolver.py,sha256=ue6gw665Wo07POuAg5820A6AXiCVyQY-unfIzGjxrSY,2034
100
+ pyopenapi_gen/types/resolvers/response_resolver.py,sha256=_W6-Z_SBQ8tDMd_VqveO5AiFs7Od7eAuqevpUIDCT5o,6481
101
+ pyopenapi_gen/types/resolvers/schema_resolver.py,sha256=tWNWvCYkXyZ40bzy4ShQJPX2vb_FVgDcrc7tKnWTTwo,22784
102
+ pyopenapi_gen/types/services/__init__.py,sha256=inSUKmY_Vnuym6tC-AhvjCTj16GbkfxCGLESRr_uQPE,123
103
+ pyopenapi_gen/types/services/type_service.py,sha256=N_UCyTdt8DRO7FdM7tQT_0G8UJ3OrzqSxTEqEkyrOLg,6784
104
+ pyopenapi_gen/types/strategies/__init__.py,sha256=bju8_KEPNIow1-woMO-zJCgK_E0M6JnFq0NFsK1R4Ss,171
105
+ pyopenapi_gen/types/strategies/response_strategy.py,sha256=TmXX2YDQB0cQQ7BvRCGSJM6Iu1p0MMJioCi-_8HPCAg,7341
106
+ pyopenapi_gen/visit/CLAUDE.md,sha256=Rq2e4S74TXv0ua2ZcCrO6cwCCccf3Yph44oVdj1yFPY,8297
107
+ pyopenapi_gen/visit/client_visitor.py,sha256=7sMleJZqVgy6mkEUvx9s_LsZvHLS8cvenqqs4jydahg,11115
108
+ pyopenapi_gen/visit/docs_visitor.py,sha256=hqgd4DAoy7T5Bap4mpH4R-nIZSyAWwFYmrIuNHM03Rg,1644
109
+ pyopenapi_gen/visit/exception_visitor.py,sha256=D4LtLqdeS34kw6WbwhoWeMQzlh9uHqGNZjFtY0kq3Q4,3855
110
+ pyopenapi_gen/visit/visitor.py,sha256=KyiOWpNpJXkEOICpJJzqMmzbK4h0F5_7XZkE4R9GYRc,3626
111
+ pyopenapi_gen/visit/endpoint/__init__.py,sha256=DftIZSWp6Z8jKWoJE2VGKL4G_5cqwFXe9v-PALMmsGk,73
112
+ pyopenapi_gen/visit/endpoint/endpoint_visitor.py,sha256=1aS0i2D_Y-979_7aBd0W6IS2UVO6wMujsMMw8Qt8PRE,3574
113
+ pyopenapi_gen/visit/endpoint/generators/__init__.py,sha256=-X-GYnJZ9twiEBr_U0obW8VuSoY6IJmYaxinn-seMzA,50
114
+ pyopenapi_gen/visit/endpoint/generators/docstring_generator.py,sha256=_VpRabZ2g_N42TTWGI6gtPxqzlZD65dOHm8U_YvtWbQ,5891
115
+ pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py,sha256=wUJ4_gaA1gRrFCHYFCObBIankxGQu0MNqiOSoZOZmoA,4352
116
+ pyopenapi_gen/visit/endpoint/generators/request_generator.py,sha256=MKtZ6Fa050gCgqAGhXeo--p_AzqV9RmDd8e4Zvglgo0,5349
117
+ pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py,sha256=Jb_8hRQY1OfpThupa7UdCNxa712m3WaeNIbLhlYk1bg,24193
118
+ pyopenapi_gen/visit/endpoint/generators/signature_generator.py,sha256=ENi34Rf2x1Ijtvca652ihV9L2UUT1O2SEsG-66Pm_Z8,3873
119
+ pyopenapi_gen/visit/endpoint/generators/url_args_generator.py,sha256=GSJwfZS-ylb9690PJdaS9jIiDLwSUj4HI2Meex4n6OE,9565
120
+ pyopenapi_gen/visit/endpoint/processors/__init__.py,sha256=_6RqpOdDuDheArqDBi3ykhsaetACny88WUuuAJvr_ME,29
121
+ pyopenapi_gen/visit/endpoint/processors/import_analyzer.py,sha256=ou5pl3S6PXvHrhKeBQraRfK9MTOQE1WUGLeieAVUXRM,3364
122
+ pyopenapi_gen/visit/endpoint/processors/parameter_processor.py,sha256=E0VoygkhU8iCsvH0U-tA6ZZg2Nm3rfr4e17vxqQLH7c,7666
123
+ pyopenapi_gen/visit/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
+ pyopenapi_gen/visit/model/alias_generator.py,sha256=wEMHipPA1_CFxvQ6CS9j4qgXK93seI1bI_tFJvIrb70,3563
125
+ pyopenapi_gen/visit/model/dataclass_generator.py,sha256=z0kKH_V2PJyiI9snmryDpAzRiOsQJtk1jrijCnEQQwg,14326
126
+ pyopenapi_gen/visit/model/enum_generator.py,sha256=AXqKUFuWUUjUF_6_HqBKY8vB5GYu35Pb2C2WPFrOw1k,10061
127
+ pyopenapi_gen/visit/model/model_visitor.py,sha256=TC6pbxpQiy5FWhmQpfllLuXA3ImTYNMcrazkOFZCIyo,9470
128
+ pyopenapi_gen-0.14.2.dist-info/METADATA,sha256=ERW_JKw-KdBCYXTQsG1sSXDYV9ILr9GgnKEvzfgHHNY,14025
129
+ pyopenapi_gen-0.14.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
130
+ pyopenapi_gen-0.14.2.dist-info/entry_points.txt,sha256=gxSlNiwom50T3OEZnlocA6qRjGdV0bn6hN_Xr-Ub5wA,56
131
+ pyopenapi_gen-0.14.2.dist-info/licenses/LICENSE,sha256=UFAyTWKa4w10-QerlJaHJeep7G2gcwpf-JmvI2dS2Gc,1088
132
+ pyopenapi_gen-0.14.2.dist-info/RECORD,,
@@ -1,132 +0,0 @@
1
- pyopenapi_gen/__init__.py,sha256=jU5GYbWa4MBDeDzOzwUHl_8eLGtotxRGLj42d2yskUo,3017
2
- pyopenapi_gen/__main__.py,sha256=4-SCaCNhBd7rtyRK58uoDbdl93J0KhUeajP_b0CPpLE,110
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
7
- pyopenapi_gen/context/CLAUDE.md,sha256=eUPvSY2ADQK21i52bWfzyBcDPVvvepErMiQrq6ndwlU,9004
8
- pyopenapi_gen/context/file_manager.py,sha256=vpbRByO5SH6COdjb6C-pXkdSIRu7QFqrXxi69VLKBnM,1691
9
- pyopenapi_gen/context/import_collector.py,sha256=rnOgR5-GsHs_oS1iUVbOF3tagcH5namNWvp7k44kugw,15262
10
- pyopenapi_gen/context/render_context.py,sha256=AS08ha9WVjgRUsM1LFPjMCgrsHbczHH7c60Z5PbojhY,30320
11
- pyopenapi_gen/core/CLAUDE.md,sha256=bz48K-PSrhxCq5ScmiLiU9kfpVVzSWRKOA9RdKk_pbg,6482
12
- pyopenapi_gen/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- pyopenapi_gen/core/exceptions.py,sha256=HYFiYdmzsZUl46vB8M3B6Vpp6m8iqjUcKDWdL4yEKHo,498
14
- pyopenapi_gen/core/http_status_codes.py,sha256=lIkKFlRkvVa6xkY4kTq5f7djwYmUmJwRo1kCX8m_cEs,6274
15
- pyopenapi_gen/core/http_transport.py,sha256=77ZOTyl0_CLuDtSCOVDQoxHDQBnclJgz6f3Hs6cy7hY,9675
16
- pyopenapi_gen/core/pagination.py,sha256=aeDOKo-Lu8mcSDqv0TlPXV9Ul-Nca76ZuKhQHKlsMUs,2301
17
- pyopenapi_gen/core/postprocess_manager.py,sha256=cia8FbDXbulk44ElT1CTlypu1oFjNM41y1gWy8-HSug,9362
18
- pyopenapi_gen/core/schemas.py,sha256=FOE2e1vIl0vif_C34AehVznJG2W1hampPtJEfL80AxI,5535
19
- pyopenapi_gen/core/streaming_helpers.py,sha256=XToNnm-EDAqiKh9ZS4GRxyastFkfSyNR0av-NDTZMPg,2706
20
- pyopenapi_gen/core/telemetry.py,sha256=l6z972882MRzNOXU2leAvtnlYFLMSKKQ_oHz4qU5_n0,2225
21
- pyopenapi_gen/core/utils.py,sha256=-J4lWP_X5jvPTYWkMvgIw4KGt6IKw29eHUAb_C89na4,14163
22
- pyopenapi_gen/core/warning_collector.py,sha256=DYl9D7eZYs04mDU84KeonS-5-d0aM7hNqraXTex31ss,2799
23
- pyopenapi_gen/core/auth/base.py,sha256=E2KUerA_mYv9D7xulUm-lenIxqZHqanjA4oRKpof2ZE,792
24
- pyopenapi_gen/core/auth/plugins.py,sha256=bDWx4MTRFsCKp1i__BsQtZEvQPGU-NKI137-zoxmrgs,3465
25
- pyopenapi_gen/core/loader/__init__.py,sha256=bt-MQ35fbq-f1YnCcopPg53TuXCI9_7wcMzQZoWVpjU,391
26
- pyopenapi_gen/core/loader/loader.py,sha256=fjRw6ZrG6hRS2RBWJY5IOv9e1ULc6tnxVGagqXhMmpk,6374
27
- pyopenapi_gen/core/loader/operations/__init__.py,sha256=7se21D-BOy7Qw6C9auJ9v6D3NCuRiDpRlhqxGq11fJs,366
28
- pyopenapi_gen/core/loader/operations/parser.py,sha256=QHg3o8TRaReYofEEcBwuDuNxGDxZjkWXRDqOxKFiRtk,7046
29
- pyopenapi_gen/core/loader/operations/post_processor.py,sha256=Rzb3GSiLyJk-0hTBZ6s6iWAj4KqE4Rfo3w-q2wm_R7w,2487
30
- pyopenapi_gen/core/loader/operations/request_body.py,sha256=r-jscZEfOmqFA-E4i1Uj3S66rNEf1gDTlBiGUiA0P9k,3224
31
- pyopenapi_gen/core/loader/parameters/__init__.py,sha256=p13oSibCRC5RCfsP6w7yD9MYs5TXcdI4WwPv7oGUYKk,284
32
- pyopenapi_gen/core/loader/parameters/parser.py,sha256=tMAAxcPnAQQtdVFP7-NY6XSfxvc2HkG5rPXd1wwyE8I,8049
33
- pyopenapi_gen/core/loader/responses/__init__.py,sha256=6APWoH3IdNkgVmI0KsgZoZ6knDaG-S-pnUCa6gkzT8E,216
34
- pyopenapi_gen/core/loader/responses/parser.py,sha256=F9otAn6ncQiY3C25Fq4mEJ5UFNgN83eujcX20Vd_nPU,4069
35
- pyopenapi_gen/core/loader/schemas/__init__.py,sha256=rlhujYfw_IzWgzhVhYMJ3eIhE6C5Vi1Ylba-BHEVqOg,296
36
- pyopenapi_gen/core/loader/schemas/extractor.py,sha256=n2jF_g8ZjA4GQiSKEWGAt35Hw7Ek93cnxFaS4Ld21Sc,9889
37
- pyopenapi_gen/core/parsing/__init__.py,sha256=RJsIR6cHaNoI4tBcpMlAa0JsY64vsHb9sPxPg6rd8FQ,486
38
- pyopenapi_gen/core/parsing/context.py,sha256=8cM8mPItvDvJr8ZiukvdHBumlQl9hK1gUZL4BDpHaBk,8005
39
- pyopenapi_gen/core/parsing/cycle_helpers.py,sha256=nG5ysNavL_6lpnHWFUZR9qraBxqOzuNfI6NgSEa8a5M,5939
40
- pyopenapi_gen/core/parsing/schema_finalizer.py,sha256=qRTHUoVBQTgGmdfLuBuWxtWdj_SG71STGC3rn-tJvnA,6914
41
- pyopenapi_gen/core/parsing/schema_parser.py,sha256=2hOj1Xz8a2f2PF3oAAG-DwQse9WHt9DzvR6nhQ5dHJU,33148
42
- pyopenapi_gen/core/parsing/unified_cycle_detection.py,sha256=3nplaCVh2dFwBPbmDc2kiU0SzTPXXktdQ5Rc0Q9Uu9s,10873
43
- pyopenapi_gen/core/parsing/common/__init__.py,sha256=U3sHMO-l6S3Cm04CVOYmBCpqLEZvCylUI7yQfcTwxYU,27
44
- pyopenapi_gen/core/parsing/common/type_parser.py,sha256=cK7xtxhoD43K2WjLP9TGip3As3akYeYW7L2XztXCecg,2562
45
- pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py,sha256=BZOSPQo8bongKYgA4w-KGNBCjfNKoe1mm91CrqNIaTk,150
46
- pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py,sha256=y2RBVA0Kk1Vd23NBnKRdggn0tYADbTfaW3v0Ji5K5aE,3636
47
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py,sha256=tsHnIdyznAxXz_yA9Ub1ONxi2GSYcVJwKogBkTm95jU,2160
49
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py,sha256=UoqD9I7s-WwI50PlgwFmLhFQd3ai8YIJycfkQhq6QlI,1145
50
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py,sha256=mgHopKN9ZB2maLrPRNubrSavq0oLYjeJQac60IMRj1Q,627
51
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py,sha256=j_mcjyawpTsl4_2vn3DjBP2OckHL0vzfDajODxEGzNE,1801
52
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py,sha256=BsyO6eCNO9NDRmj-aWyQZ4DaXsqRtkc7KdIzUEyNKQ4,1843
53
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py,sha256=MTaxiyqoPEaNFqF7tQHii3IH41M05wPKt6lBQi1SCDU,1625
54
- pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py,sha256=ukKU64ozHINPiVlHE9YBDz1Nq2i6Xh64jhoWSEqbK5c,1774
55
- pyopenapi_gen/core/parsing/keywords/__init__.py,sha256=enTLacWXGXLIOjSJ3j7KNUDzU27Kq3Ww79sFElz02cM,27
56
- pyopenapi_gen/core/parsing/keywords/all_of_parser.py,sha256=ZH8rkxdDjldd226UGw5tv853ONXKaoqvWj5FfbgSoRY,3699
57
- pyopenapi_gen/core/parsing/keywords/any_of_parser.py,sha256=HQ4iBBPgox48KIPPhM6VVZTXHIUVqpMoHkCbqcebXOw,2982
58
- pyopenapi_gen/core/parsing/keywords/array_items_parser.py,sha256=nk9AFbx5ANLdDeGsxSTeYHhd8MqqrQwDRMzJ8FJmJxY,2723
59
- pyopenapi_gen/core/parsing/keywords/one_of_parser.py,sha256=TUiT1dH1r8GEPExzlR3zdgnYpGxilH8yvnSWOvQmKmY,2727
60
- pyopenapi_gen/core/parsing/keywords/properties_parser.py,sha256=bm248ApsNskFPQF4fXq7mT5oJf6FF9yAcdVLmK6el3E,4426
61
- pyopenapi_gen/core/parsing/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py,sha256=hXuht-t0Syi5vPO8qn9GcjEpyDcZnfFVHVIlwfMa8L0,13461
63
- pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py,sha256=4njv5raMVtspL6DoU9mxabU3yhgXHLTEhR8KmI9YMoA,5083
64
- pyopenapi_gen/core/writers/code_writer.py,sha256=uWH5tRFIdT3RHsRV1haWQxESwhwMoM2G_CxnKB8uP88,4776
65
- pyopenapi_gen/core/writers/documentation_writer.py,sha256=Vce-_kD4XDm3HfZb_ibSEKAu2fbTZCzzdojn9TPgFhU,8706
66
- pyopenapi_gen/core/writers/line_writer.py,sha256=uhysxO6bh_9POUQHhoqYI4_savfAgjH4EcwBdNrVtPc,7759
67
- pyopenapi_gen/core/writers/python_construct_renderer.py,sha256=lKj5nR-ULeceapoP2EQQOfmJif7eKAyTuhkCgGd3cI4,12812
68
- pyopenapi_gen/core_package_template/README.md,sha256=8YP-MS0KxphRbCGBf7kV3dYIFLU9piOJ3IMm3K_0hcI,1488
69
- pyopenapi_gen/emit/models_emitter.py,sha256=Ty5yHGzvBDYa_qQwbyPNRLWPnHaWR_KLh6pYxT7uePY,7193
70
- pyopenapi_gen/emitters/CLAUDE.md,sha256=iZYEZq1a1h033rxuh97cMpsKUElv72ysvTm3-QQUvrs,9323
71
- pyopenapi_gen/emitters/client_emitter.py,sha256=kmMVnG-wAOJm7TUm0xOQ5YnSJfYxz1SwtpiyoUCbcCA,1939
72
- pyopenapi_gen/emitters/core_emitter.py,sha256=RcBsAYQ3ZKcWwtkzQmyHkL7VtDQjbIObFLXD9M_GdpI,8020
73
- pyopenapi_gen/emitters/docs_emitter.py,sha256=aouKqhRdtVvYfGVsye_uqM80nONRy0SqN06cr1l3OgA,1137
74
- pyopenapi_gen/emitters/endpoints_emitter.py,sha256=tzSLUzlZle2Lih_aZc4cJ-Y1ItjN5H_rABEWcDwECXA,9586
75
- pyopenapi_gen/emitters/exceptions_emitter.py,sha256=3k3UTskmZyv_fQXyOudBnBHUvhvQTenjY7qa-KK1F48,7553
76
- pyopenapi_gen/emitters/models_emitter.py,sha256=Gd0z2Xoze1XkVnajkOptW90ti7197wQ15I7vIITnULM,22243
77
- pyopenapi_gen/generator/CLAUDE.md,sha256=BS9KkmLvk2WD-Io-_apoWjGNeMU4q4LKy4UOxYF9WxM,10870
78
- pyopenapi_gen/generator/client_generator.py,sha256=_L_MJ9fUG8roD_DhymIM0nsdqOOjlQF_JAkBTND9ttA,29435
79
- pyopenapi_gen/helpers/CLAUDE.md,sha256=GyIJ0grp4SkD3plAUzyycW4nTUZf9ewtvvsdAGkmIZw,10609
80
- pyopenapi_gen/helpers/__init__.py,sha256=m4jSQ1sDH6CesIcqIl_kox4LcDFabGxBpSIWVwbHK0M,39
81
- pyopenapi_gen/helpers/endpoint_utils.py,sha256=bkRu6YddIPQQD3rZLbB8L5WYzG-2Bd_JgMbxMUYY2wY,22198
82
- pyopenapi_gen/helpers/type_cleaner.py,sha256=PRBqeEUPyEKHwedB4RZPrEDxUJ6q_h5ANains0WHIwg,13613
83
- pyopenapi_gen/helpers/type_helper.py,sha256=uWLmJ25FHnqPf0-Pqakk4-lJ4xr5VBOF6gQP26KBAms,4276
84
- pyopenapi_gen/helpers/url_utils.py,sha256=IflBiOcCzLrOvC5P25y12pk88Zu3X071hq4bCeDDxK0,340
85
- pyopenapi_gen/helpers/type_resolution/__init__.py,sha256=TbaQZp7jvBiYgmuzuG8Wp56xZq32xEKtpunHqZVG1VA,85
86
- pyopenapi_gen/helpers/type_resolution/array_resolver.py,sha256=dFppBtA6CxmiWAMR6rwGnQPv4AibL3nxtzw1LbeXVn4,2023
87
- pyopenapi_gen/helpers/type_resolution/composition_resolver.py,sha256=wq6CRGxGgOKK470ln5Tpk9SzHtMuwB22TXHsRLtUFyw,3015
88
- pyopenapi_gen/helpers/type_resolution/finalizer.py,sha256=_BcOBmOvadhBTUAvIc0Ak8FNxFw1uYL4rkKWtU68_m4,4332
89
- pyopenapi_gen/helpers/type_resolution/named_resolver.py,sha256=hXu6Gao92EVV0jyHRqf9cIhoAFn3suuEw5ye9nRTFks,9423
90
- pyopenapi_gen/helpers/type_resolution/object_resolver.py,sha256=Jm4m5QgzWU-4joPqfUSC0Y-za3Yx0ROdJjyv5J8VNk0,12557
91
- pyopenapi_gen/helpers/type_resolution/primitive_resolver.py,sha256=qTshZaye5ohibVfcJYCzh4v3CAshguMGWPt2FgvQeNM,1960
92
- pyopenapi_gen/helpers/type_resolution/resolver.py,sha256=qQY6wAitBluA-tofiyJ67Gxx8ol1W528zDWd9izYN5s,1982
93
- pyopenapi_gen/types/CLAUDE.md,sha256=xRYlHdLhw3QGIfIlWqPt9pewRs736H1YCzwmslKtzZc,4255
94
- pyopenapi_gen/types/__init__.py,sha256=Tv4xouOXp1CeOcnhDdh_wWF9PBHAeZmCeVPSm71kouI,359
95
- pyopenapi_gen/types/contracts/__init__.py,sha256=qf5kJbbZ8TuH79UQSHBvjE1odKfNJrt5NrBEmurFlSU,358
96
- pyopenapi_gen/types/contracts/protocols.py,sha256=eyjsrvHQv1viNON9itrHO5TA-PtWUZERdK3aPO_3uXM,2887
97
- pyopenapi_gen/types/contracts/types.py,sha256=-Qvbx3N_14AaN-1BeyocrvsjiwXPn_eWQhpgxL5aG5A,797
98
- pyopenapi_gen/types/resolvers/__init__.py,sha256=_5kA49RvyOTyXgt0GbbOfHJcdQw2zHxvU9af8GGyNWc,295
99
- pyopenapi_gen/types/resolvers/reference_resolver.py,sha256=qnaZeLmtyh4_NBMcKib58s6o5ycUJaattYt8F38_qIo,2053
100
- pyopenapi_gen/types/resolvers/response_resolver.py,sha256=Kb1a2803lyoukoZy06ztPBlUw-A1lHiZ6NlJmsixxA8,6500
101
- pyopenapi_gen/types/resolvers/schema_resolver.py,sha256=n8pI9kUJo-vLjZAOPSvwpVmRoM7AzTa7cOMlidYJVXo,21779
102
- pyopenapi_gen/types/services/__init__.py,sha256=inSUKmY_Vnuym6tC-AhvjCTj16GbkfxCGLESRr_uQPE,123
103
- pyopenapi_gen/types/services/type_service.py,sha256=-LQj7oSx1mxb10Zi6DpawS8uyoUrUbnYhmUA0GuKZTc,4402
104
- pyopenapi_gen/types/strategies/__init__.py,sha256=bju8_KEPNIow1-woMO-zJCgK_E0M6JnFq0NFsK1R4Ss,171
105
- pyopenapi_gen/types/strategies/response_strategy.py,sha256=Y6E3O5xvCrJ2Y6IGn4BWlaGiQCC8Uk1a7BRJxfBkqrM,7387
106
- pyopenapi_gen/visit/CLAUDE.md,sha256=Rq2e4S74TXv0ua2ZcCrO6cwCCccf3Yph44oVdj1yFPY,8297
107
- pyopenapi_gen/visit/client_visitor.py,sha256=vpLCGF353XtBjfS7W69-1b1d79opTb1i6qBue6vSz5g,11152
108
- pyopenapi_gen/visit/docs_visitor.py,sha256=hqgd4DAoy7T5Bap4mpH4R-nIZSyAWwFYmrIuNHM03Rg,1644
109
- pyopenapi_gen/visit/exception_visitor.py,sha256=D4LtLqdeS34kw6WbwhoWeMQzlh9uHqGNZjFtY0kq3Q4,3855
110
- pyopenapi_gen/visit/visitor.py,sha256=PANoV9zXMUrefr0pBLXIKkDOaTIjQ2hyL82cidVBCLU,3645
111
- pyopenapi_gen/visit/endpoint/__init__.py,sha256=DftIZSWp6Z8jKWoJE2VGKL4G_5cqwFXe9v-PALMmsGk,73
112
- pyopenapi_gen/visit/endpoint/endpoint_visitor.py,sha256=1aS0i2D_Y-979_7aBd0W6IS2UVO6wMujsMMw8Qt8PRE,3574
113
- pyopenapi_gen/visit/endpoint/generators/__init__.py,sha256=-X-GYnJZ9twiEBr_U0obW8VuSoY6IJmYaxinn-seMzA,50
114
- pyopenapi_gen/visit/endpoint/generators/docstring_generator.py,sha256=U02qvuYtFElQNEtOHuTNXFl2NxUriIiuZMkmUsapOg4,5913
115
- pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py,sha256=wUJ4_gaA1gRrFCHYFCObBIankxGQu0MNqiOSoZOZmoA,4352
116
- pyopenapi_gen/visit/endpoint/generators/request_generator.py,sha256=OnkrkRk39_BrK9ZDvyWqJYLz1mocD2zY7j70yIpS0J4,5374
117
- pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py,sha256=OAD3_CDXiA0lXv7KvUjmp6QBBYxs569vmP-6K_SuGJc,22961
118
- pyopenapi_gen/visit/endpoint/generators/signature_generator.py,sha256=CYtfsPMlTZN95g2WxrdnTloGx2RmqeNQRiyP9fOkUEQ,3892
119
- pyopenapi_gen/visit/endpoint/generators/url_args_generator.py,sha256=EsmNuVSkGfUqrmV7-1GiLPzdN86V5UqLfs1SVY0jsf0,9590
120
- pyopenapi_gen/visit/endpoint/processors/__init__.py,sha256=_6RqpOdDuDheArqDBi3ykhsaetACny88WUuuAJvr_ME,29
121
- pyopenapi_gen/visit/endpoint/processors/import_analyzer.py,sha256=tNmhgWwt-CjLE774TC8sPVH1-yaTKKm6JmfgBT2-iRk,3386
122
- pyopenapi_gen/visit/endpoint/processors/parameter_processor.py,sha256=BygP8yzSTrxfvNpEQIHERjd2NpEXDiwpCtmMseJKRq0,7700
123
- pyopenapi_gen/visit/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
- pyopenapi_gen/visit/model/alias_generator.py,sha256=TGL3AMq_PkBWFWeeXbNnA8hgO9hvp0flwBA00Gr6S3o,3744
125
- pyopenapi_gen/visit/model/dataclass_generator.py,sha256=nyTvBph6rtbJlCwTiDW_Y2UJmLLiA6D2QJUpA2xE0m8,10289
126
- pyopenapi_gen/visit/model/enum_generator.py,sha256=AXqKUFuWUUjUF_6_HqBKY8vB5GYu35Pb2C2WPFrOw1k,10061
127
- pyopenapi_gen/visit/model/model_visitor.py,sha256=4kAQSWsI4XumVYB3aAE7Ts_31hGfDlbytRalxyMFV3g,9510
128
- pyopenapi_gen-0.14.0.dist-info/METADATA,sha256=VQEURt-RzzvWvLDj0mDetS6zNnRNGx41B1pYO2wKJ0o,14025
129
- pyopenapi_gen-0.14.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
130
- pyopenapi_gen-0.14.0.dist-info/entry_points.txt,sha256=gxSlNiwom50T3OEZnlocA6qRjGdV0bn6hN_Xr-Ub5wA,56
131
- pyopenapi_gen-0.14.0.dist-info/licenses/LICENSE,sha256=UFAyTWKa4w10-QerlJaHJeep7G2gcwpf-JmvI2dS2Gc,1088
132
- pyopenapi_gen-0.14.0.dist-info/RECORD,,