@autorest/python 6.38.2 → 6.39.0
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.
- package/README.md +2 -27
- package/autorest/codegen.py +0 -1
- package/autorest/jsonrpc/server.py +0 -3
- package/generator/build/lib/pygen/__init__.py +7 -21
- package/generator/build/lib/pygen/codegen/__init__.py +4 -4
- package/generator/build/lib/pygen/codegen/models/__init__.py +2 -2
- package/generator/build/lib/pygen/codegen/models/base.py +9 -12
- package/generator/build/lib/pygen/codegen/models/base_builder.py +4 -6
- package/generator/build/lib/pygen/codegen/models/client.py +61 -102
- package/generator/build/lib/pygen/codegen/models/code_model.py +29 -29
- package/generator/build/lib/pygen/codegen/models/combined_type.py +7 -7
- package/generator/build/lib/pygen/codegen/models/constant_type.py +4 -11
- package/generator/build/lib/pygen/codegen/models/credential_types.py +9 -11
- package/generator/build/lib/pygen/codegen/models/dictionary_type.py +7 -8
- package/generator/build/lib/pygen/codegen/models/enum_type.py +7 -7
- package/generator/build/lib/pygen/codegen/models/imports.py +24 -29
- package/generator/build/lib/pygen/codegen/models/list_type.py +15 -14
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +6 -6
- package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/build/lib/pygen/codegen/models/model_type.py +11 -11
- package/generator/build/lib/pygen/codegen/models/operation.py +26 -56
- package/generator/build/lib/pygen/codegen/models/operation_group.py +11 -22
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +15 -19
- package/generator/build/lib/pygen/codegen/models/parameter.py +12 -21
- package/generator/build/lib/pygen/codegen/models/parameter_list.py +37 -39
- package/generator/build/lib/pygen/codegen/models/primitive_types.py +24 -18
- package/generator/build/lib/pygen/codegen/models/property.py +10 -10
- package/generator/build/lib/pygen/codegen/models/request_builder.py +7 -8
- package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +3 -3
- package/generator/build/lib/pygen/codegen/models/response.py +15 -40
- package/generator/build/lib/pygen/codegen/models/utils.py +2 -2
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +15 -40
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +101 -94
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +22 -25
- package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +2 -2
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +46 -60
- package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +6 -7
- package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +1 -2
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +15 -17
- package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -6
- package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +28 -18
- package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +1 -2
- package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +1 -2
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +9 -14
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +7 -7
- package/generator/build/lib/pygen/codegen/serializers/utils.py +2 -2
- package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +30 -24
- package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
- package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +7 -0
- package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +11 -13
- package/generator/build/lib/pygen/codegen/templates/utils.py.jinja2 +6 -6
- package/generator/build/lib/pygen/preprocess/__init__.py +47 -30
- package/generator/build/lib/pygen/preprocess/helpers.py +2 -2
- package/generator/build/lib/pygen/utils.py +6 -6
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/__init__.py +7 -21
- package/generator/pygen/codegen/__init__.py +4 -4
- package/generator/pygen/codegen/models/__init__.py +2 -2
- package/generator/pygen/codegen/models/base.py +9 -12
- package/generator/pygen/codegen/models/base_builder.py +4 -6
- package/generator/pygen/codegen/models/client.py +61 -102
- package/generator/pygen/codegen/models/code_model.py +29 -29
- package/generator/pygen/codegen/models/combined_type.py +7 -7
- package/generator/pygen/codegen/models/constant_type.py +4 -11
- package/generator/pygen/codegen/models/credential_types.py +9 -11
- package/generator/pygen/codegen/models/dictionary_type.py +7 -8
- package/generator/pygen/codegen/models/enum_type.py +7 -7
- package/generator/pygen/codegen/models/imports.py +24 -29
- package/generator/pygen/codegen/models/list_type.py +15 -14
- package/generator/pygen/codegen/models/lro_operation.py +6 -6
- package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/pygen/codegen/models/model_type.py +11 -11
- package/generator/pygen/codegen/models/operation.py +26 -56
- package/generator/pygen/codegen/models/operation_group.py +11 -22
- package/generator/pygen/codegen/models/paging_operation.py +15 -19
- package/generator/pygen/codegen/models/parameter.py +12 -21
- package/generator/pygen/codegen/models/parameter_list.py +37 -39
- package/generator/pygen/codegen/models/primitive_types.py +24 -18
- package/generator/pygen/codegen/models/property.py +10 -10
- package/generator/pygen/codegen/models/request_builder.py +7 -8
- package/generator/pygen/codegen/models/request_builder_parameter.py +3 -3
- package/generator/pygen/codegen/models/response.py +15 -40
- package/generator/pygen/codegen/models/utils.py +2 -2
- package/generator/pygen/codegen/serializers/__init__.py +15 -40
- package/generator/pygen/codegen/serializers/builder_serializer.py +101 -94
- package/generator/pygen/codegen/serializers/client_serializer.py +22 -25
- package/generator/pygen/codegen/serializers/enum_serializer.py +2 -2
- package/generator/pygen/codegen/serializers/general_serializer.py +46 -60
- package/generator/pygen/codegen/serializers/import_serializer.py +6 -7
- package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -2
- package/generator/pygen/codegen/serializers/model_serializer.py +15 -17
- package/generator/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -6
- package/generator/pygen/codegen/serializers/parameter_serializer.py +28 -18
- package/generator/pygen/codegen/serializers/patch_serializer.py +1 -2
- package/generator/pygen/codegen/serializers/request_builders_serializer.py +1 -2
- package/generator/pygen/codegen/serializers/sample_serializer.py +9 -14
- package/generator/pygen/codegen/serializers/test_serializer.py +7 -7
- package/generator/pygen/codegen/serializers/utils.py +2 -2
- package/generator/pygen/codegen/templates/model_base.py.jinja2 +30 -24
- package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
- package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +7 -0
- package/generator/pygen/codegen/templates/patch.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/serialization.py.jinja2 +11 -13
- package/generator/pygen/codegen/templates/utils.py.jinja2 +6 -6
- package/generator/pygen/preprocess/__init__.py +47 -30
- package/generator/pygen/preprocess/helpers.py +2 -2
- package/generator/pygen/utils.py +6 -6
- package/generator/pygen.egg-info/SOURCES.txt +0 -2
- package/package.json +2 -2
- package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
- package/autorest/multiapi/__init__.py +0 -185
- package/autorest/multiapi/models/__init__.py +0 -16
- package/autorest/multiapi/models/client.py +0 -68
- package/autorest/multiapi/models/code_model.py +0 -142
- package/autorest/multiapi/models/config.py +0 -24
- package/autorest/multiapi/models/constant_global_parameter.py +0 -11
- package/autorest/multiapi/models/global_parameter.py +0 -34
- package/autorest/multiapi/models/global_parameters.py +0 -53
- package/autorest/multiapi/models/imports.py +0 -181
- package/autorest/multiapi/models/mixin_operation.py +0 -38
- package/autorest/multiapi/models/operation_group.py +0 -29
- package/autorest/multiapi/models/operation_mixin_group.py +0 -89
- package/autorest/multiapi/serializers/__init__.py +0 -145
- package/autorest/multiapi/serializers/import_serializer.py +0 -181
- package/autorest/multiapi/templates/multiapi_config.py.jinja2 +0 -89
- package/autorest/multiapi/templates/multiapi_init.py.jinja2 +0 -22
- package/autorest/multiapi/templates/multiapi_models.py.jinja2 +0 -9
- package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +0 -39
- package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +0 -163
- package/autorest/multiapi/templates/multiapi_version.py.jinja2 +0 -8
- package/autorest/multiapi/utils.py +0 -51
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +0 -216
- package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +0 -167
- package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -216
- package/generator/pygen/codegen/templates/metadata.json.jinja2 +0 -167
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import cast
|
|
7
7
|
|
|
8
8
|
from . import utils
|
|
9
9
|
from ..models import Client, ParameterMethodLocation, Parameter, ParameterLocation
|
|
@@ -38,7 +38,7 @@ class ClientSerializer:
|
|
|
38
38
|
response_type_annotation="None",
|
|
39
39
|
)
|
|
40
40
|
|
|
41
|
-
def pop_kwargs_from_signature(self) ->
|
|
41
|
+
def pop_kwargs_from_signature(self) -> list[str]:
|
|
42
42
|
return self.parameter_serializer.pop_kwargs_from_signature(
|
|
43
43
|
self.client.parameters.kwargs_to_pop,
|
|
44
44
|
check_kwarg_dict=False,
|
|
@@ -50,15 +50,15 @@ class ClientSerializer:
|
|
|
50
50
|
class_name = self.client.name
|
|
51
51
|
base_class = ""
|
|
52
52
|
if self.client.has_mixin:
|
|
53
|
-
prefix = "
|
|
53
|
+
prefix = "_"
|
|
54
54
|
base_class = f"{prefix}{class_name}OperationsMixin"
|
|
55
55
|
pylint_disable = self.client.pylint_disable()
|
|
56
56
|
if base_class:
|
|
57
57
|
return f"class {class_name}({base_class}):{pylint_disable}"
|
|
58
58
|
return f"class {class_name}:{pylint_disable}"
|
|
59
59
|
|
|
60
|
-
def property_descriptions(self, async_mode: bool) ->
|
|
61
|
-
retval:
|
|
60
|
+
def property_descriptions(self, async_mode: bool) -> list[str]:
|
|
61
|
+
retval: list[str] = []
|
|
62
62
|
operations_folder = ".aio.operations." if async_mode else ".operations."
|
|
63
63
|
for og in [og for og in self.client.operation_groups if not og.is_mixin]:
|
|
64
64
|
retval.append(f":ivar {og.property_name}: {og.class_name} operations")
|
|
@@ -78,7 +78,7 @@ class ClientSerializer:
|
|
|
78
78
|
retval.append('"""')
|
|
79
79
|
return retval
|
|
80
80
|
|
|
81
|
-
def initialize_config(self) ->
|
|
81
|
+
def initialize_config(self) -> list[str]:
|
|
82
82
|
retval = []
|
|
83
83
|
additional_signatures = []
|
|
84
84
|
if self.client.need_cloud_setting:
|
|
@@ -86,7 +86,7 @@ class ClientSerializer:
|
|
|
86
86
|
endpoint_parameter = cast(Parameter, self.client.endpoint_parameter)
|
|
87
87
|
retval.extend(
|
|
88
88
|
[
|
|
89
|
-
|
|
89
|
+
"_cloud = cloud_setting or settings.current.azure_cloud # type: ignore",
|
|
90
90
|
"_endpoints = get_arm_endpoints(_cloud)",
|
|
91
91
|
f"if not {endpoint_parameter.client_name}:",
|
|
92
92
|
f' {endpoint_parameter.client_name} = _endpoints["resource_manager"]',
|
|
@@ -124,7 +124,7 @@ class ClientSerializer:
|
|
|
124
124
|
def should_init_super(self) -> bool:
|
|
125
125
|
return any(og for og in self.client.operation_groups if og.is_mixin and og.has_abstract_operations)
|
|
126
126
|
|
|
127
|
-
def initialize_pipeline_client(self, async_mode: bool) ->
|
|
127
|
+
def initialize_pipeline_client(self, async_mode: bool) -> list[str]:
|
|
128
128
|
result = []
|
|
129
129
|
pipeline_client_name = self.client.pipeline_class(async_mode)
|
|
130
130
|
endpoint_name = "base_url" if self.client.code_model.is_azure_flavor else "endpoint"
|
|
@@ -154,7 +154,7 @@ class ClientSerializer:
|
|
|
154
154
|
)
|
|
155
155
|
return result
|
|
156
156
|
|
|
157
|
-
def serializers_and_operation_groups_properties(self) ->
|
|
157
|
+
def serializers_and_operation_groups_properties(self) -> list[str]:
|
|
158
158
|
retval = []
|
|
159
159
|
|
|
160
160
|
def _get_client_models_value(models_dict_name: str) -> str:
|
|
@@ -169,12 +169,12 @@ class ClientSerializer:
|
|
|
169
169
|
)
|
|
170
170
|
model_dict_name = f"_models.{self.client.code_model.models_filename}" if add_private_models else "_models"
|
|
171
171
|
retval.append(
|
|
172
|
-
f"client_models{':
|
|
172
|
+
f"client_models{': dict[str, Any]' if not self.client.code_model.model_types else ''}"
|
|
173
173
|
f" = {_get_client_models_value(model_dict_name)}"
|
|
174
174
|
)
|
|
175
175
|
if add_private_models and self.client.code_model.model_types:
|
|
176
176
|
update_dict = "{k: v for k, v in _models.__dict__.items() if isinstance(v, type)}"
|
|
177
|
-
retval.append(f"client_models
|
|
177
|
+
retval.append(f"client_models |= {update_dict}")
|
|
178
178
|
client_models_str = "client_models" if is_msrest_model else ""
|
|
179
179
|
retval.append(f"self._serialize = Serializer({client_models_str})")
|
|
180
180
|
retval.append(f"self._deserialize = Deserializer({client_models_str})")
|
|
@@ -182,10 +182,7 @@ class ClientSerializer:
|
|
|
182
182
|
retval.append("self._serialize.client_side_validation = False")
|
|
183
183
|
operation_groups = [og for og in self.client.operation_groups if not og.is_mixin]
|
|
184
184
|
for og in operation_groups:
|
|
185
|
-
|
|
186
|
-
api_version = f", '{og.api_versions[0]}'" if og.api_versions else ", None"
|
|
187
|
-
else:
|
|
188
|
-
api_version = ""
|
|
185
|
+
api_version = ""
|
|
189
186
|
retval.extend(
|
|
190
187
|
[
|
|
191
188
|
f"self.{og.property_name} = {og.class_name}(",
|
|
@@ -213,13 +210,13 @@ class ClientSerializer:
|
|
|
213
210
|
response_type_annotation=("Awaitable[AsyncHttpResponse]" if async_mode else "HttpResponse"),
|
|
214
211
|
)
|
|
215
212
|
|
|
216
|
-
def _example_make_call(self, async_mode: bool) ->
|
|
213
|
+
def _example_make_call(self, async_mode: bool) -> list[str]:
|
|
217
214
|
http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
|
|
218
215
|
retval = [f">>> response = {'await ' if async_mode else ''}client.{self.client.send_request_name}(request)"]
|
|
219
216
|
retval.append(f"<{http_response}: 200 OK>")
|
|
220
217
|
return retval
|
|
221
218
|
|
|
222
|
-
def _request_builder_example(self, async_mode: bool) ->
|
|
219
|
+
def _request_builder_example(self, async_mode: bool) -> list[str]:
|
|
223
220
|
retval = [
|
|
224
221
|
"We have helper methods to create requests specific to this service in "
|
|
225
222
|
+ f"`{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}`."
|
|
@@ -242,14 +239,14 @@ class ClientSerializer:
|
|
|
242
239
|
retval.extend(self._example_make_call(async_mode))
|
|
243
240
|
return retval
|
|
244
241
|
|
|
245
|
-
def _rest_request_example(self, async_mode: bool) ->
|
|
242
|
+
def _rest_request_example(self, async_mode: bool) -> list[str]:
|
|
246
243
|
retval = [f">>> from {self.client.code_model.core_library}.rest import HttpRequest"]
|
|
247
244
|
retval.append('>>> request = HttpRequest("GET", "https://www.example.org/")')
|
|
248
245
|
retval.append("<HttpRequest [GET], url: 'https://www.example.org/'>")
|
|
249
246
|
retval.extend(self._example_make_call(async_mode))
|
|
250
247
|
return retval
|
|
251
248
|
|
|
252
|
-
def send_request_description(self, async_mode: bool) ->
|
|
249
|
+
def send_request_description(self, async_mode: bool) -> list[str]:
|
|
253
250
|
rest_library = f"{self.client.code_model.core_library}.rest"
|
|
254
251
|
retval = ['"""Runs the network request through the client\'s chained policies.']
|
|
255
252
|
retval.append("")
|
|
@@ -269,7 +266,7 @@ class ClientSerializer:
|
|
|
269
266
|
retval.append('"""')
|
|
270
267
|
return retval
|
|
271
268
|
|
|
272
|
-
def serialize_path(self) ->
|
|
269
|
+
def serialize_path(self) -> list[str]:
|
|
273
270
|
return self.parameter_serializer.serialize_path(self.client.parameters.path, "self._serialize")
|
|
274
271
|
|
|
275
272
|
|
|
@@ -294,7 +291,7 @@ class ConfigSerializer:
|
|
|
294
291
|
response_type_annotation="None",
|
|
295
292
|
)
|
|
296
293
|
|
|
297
|
-
def pop_kwargs_from_signature(self) ->
|
|
294
|
+
def pop_kwargs_from_signature(self) -> list[str]:
|
|
298
295
|
return self.parameter_serializer.pop_kwargs_from_signature(
|
|
299
296
|
self.client.config.parameters.kwargs_to_pop,
|
|
300
297
|
check_kwarg_dict=False,
|
|
@@ -302,22 +299,22 @@ class ConfigSerializer:
|
|
|
302
299
|
pop_params_kwarg=PopKwargType.NO,
|
|
303
300
|
)
|
|
304
301
|
|
|
305
|
-
def set_constants(self) ->
|
|
302
|
+
def set_constants(self) -> list[str]:
|
|
306
303
|
return [
|
|
307
304
|
f"self.{p.client_name} = {p.client_default_value_declaration}"
|
|
308
305
|
for p in self.client.config.parameters.constant
|
|
309
306
|
if p not in self.client.config.parameters.method
|
|
310
307
|
]
|
|
311
308
|
|
|
312
|
-
def check_required_parameters(self) ->
|
|
309
|
+
def check_required_parameters(self) -> list[str]:
|
|
313
310
|
return [
|
|
314
311
|
f"if {p.client_name} is None:\n" f" raise ValueError(\"Parameter '{p.client_name}' must not be None.\")"
|
|
315
312
|
for p in self.client.config.parameters.method
|
|
316
313
|
if not (p.optional or p.constant)
|
|
317
314
|
]
|
|
318
315
|
|
|
319
|
-
def property_descriptions(self, async_mode: bool) ->
|
|
320
|
-
retval:
|
|
316
|
+
def property_descriptions(self, async_mode: bool) -> list[str]:
|
|
317
|
+
retval: list[str] = []
|
|
321
318
|
for p in self.client.config.parameters.method:
|
|
322
319
|
retval.append(f":{p.description_keyword} {p.client_name}: {p.description}")
|
|
323
320
|
retval.append(f":{p.docstring_type_keyword} {p.client_name}: {p.docstring_type(async_mode=async_mode)}")
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import Optional
|
|
6
|
+
from typing import Optional
|
|
7
7
|
from jinja2 import Environment
|
|
8
8
|
from .base_serializer import BaseSerializer
|
|
9
9
|
from ..models import FileImport, CodeModel, EnumType
|
|
@@ -17,7 +17,7 @@ class EnumSerializer(BaseSerializer):
|
|
|
17
17
|
env: Environment,
|
|
18
18
|
async_mode: bool = False,
|
|
19
19
|
*,
|
|
20
|
-
enums:
|
|
20
|
+
enums: list[EnumType],
|
|
21
21
|
client_namespace: Optional[str] = None
|
|
22
22
|
):
|
|
23
23
|
super().__init__(code_model, env, async_mode=async_mode, client_namespace=client_namespace)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
import json
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
8
8
|
import re
|
|
9
9
|
import tomli as tomllib
|
|
10
10
|
from packaging.version import parse as parse_version
|
|
@@ -19,9 +19,6 @@ from ..models.utils import NamespaceType
|
|
|
19
19
|
from .client_serializer import ClientSerializer, ConfigSerializer
|
|
20
20
|
from .base_serializer import BaseSerializer
|
|
21
21
|
|
|
22
|
-
if TYPE_CHECKING:
|
|
23
|
-
from pathlib import Path
|
|
24
|
-
|
|
25
22
|
VERSION_MAP = {
|
|
26
23
|
"msrest": "0.7.1",
|
|
27
24
|
"isodate": "0.6.1",
|
|
@@ -45,7 +42,7 @@ class GeneralSerializer(BaseSerializer):
|
|
|
45
42
|
"MIN_PYTHON_VERSION": MIN_PYTHON_VERSION,
|
|
46
43
|
"MAX_PYTHON_VERSION": MAX_PYTHON_VERSION,
|
|
47
44
|
}
|
|
48
|
-
params
|
|
45
|
+
params |= {"options": self.code_model.options}
|
|
49
46
|
return template.render(code_model=self.code_model, **params)
|
|
50
47
|
|
|
51
48
|
def _extract_min_dependency(self, s):
|
|
@@ -60,12 +57,11 @@ class GeneralSerializer(BaseSerializer):
|
|
|
60
57
|
m = re.search(r"[>=]=?([\d.]+(?:[a-z]+\d+)?)", s)
|
|
61
58
|
return parse_version(m.group(1)) if m else parse_version("0")
|
|
62
59
|
|
|
63
|
-
def _keep_pyproject_fields(self,
|
|
60
|
+
def _keep_pyproject_fields(self, file_content: str) -> dict:
|
|
64
61
|
# Load the pyproject.toml file if it exists and extract fields to keep.
|
|
65
62
|
result: dict = {"KEEP_FIELDS": {}}
|
|
66
63
|
try:
|
|
67
|
-
|
|
68
|
-
loaded_pyproject_toml = tomllib.load(f)
|
|
64
|
+
loaded_pyproject_toml = tomllib.loads(file_content)
|
|
69
65
|
except Exception: # pylint: disable=broad-except
|
|
70
66
|
# If parsing the pyproject.toml fails, we assume the it does not exist or is incorrectly formatted.
|
|
71
67
|
return result
|
|
@@ -108,12 +104,12 @@ class GeneralSerializer(BaseSerializer):
|
|
|
108
104
|
|
|
109
105
|
return result
|
|
110
106
|
|
|
111
|
-
def serialize_package_file(self, template_name: str,
|
|
107
|
+
def serialize_package_file(self, template_name: str, file_content: str, **kwargs: Any) -> str:
|
|
112
108
|
template = self.env.get_template(template_name)
|
|
113
109
|
|
|
114
110
|
# Add fields to keep from an existing pyproject.toml
|
|
115
111
|
if template_name == "pyproject.toml.jinja2":
|
|
116
|
-
params = self._keep_pyproject_fields(
|
|
112
|
+
params = self._keep_pyproject_fields(file_content)
|
|
117
113
|
else:
|
|
118
114
|
params = {}
|
|
119
115
|
|
|
@@ -130,28 +126,26 @@ class GeneralSerializer(BaseSerializer):
|
|
|
130
126
|
dev_status = "4 - Beta"
|
|
131
127
|
else:
|
|
132
128
|
dev_status = "5 - Production/Stable"
|
|
133
|
-
params
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
params.update({"options": self.code_model.options})
|
|
147
|
-
params.update(kwargs)
|
|
129
|
+
params |= {
|
|
130
|
+
"code_model": self.code_model,
|
|
131
|
+
"dev_status": dev_status,
|
|
132
|
+
"token_credential": token_credential,
|
|
133
|
+
"pkgutil_names": [".".join(package_parts[: i + 1]) for i in range(len(package_parts))],
|
|
134
|
+
"init_names": ["/".join(package_parts[: i + 1]) + "/__init__.py" for i in range(len(package_parts))],
|
|
135
|
+
"client_name": self.code_model.clients[0].name if self.code_model.clients else "",
|
|
136
|
+
"VERSION_MAP": VERSION_MAP,
|
|
137
|
+
"MIN_PYTHON_VERSION": MIN_PYTHON_VERSION,
|
|
138
|
+
"MAX_PYTHON_VERSION": MAX_PYTHON_VERSION,
|
|
139
|
+
}
|
|
140
|
+
params |= {"options": self.code_model.options}
|
|
141
|
+
params |= kwargs
|
|
148
142
|
return template.render(file_import=FileImport(self.code_model), **params)
|
|
149
143
|
|
|
150
144
|
def serialize_pkgutil_init_file(self) -> str:
|
|
151
145
|
template = self.env.get_template("pkgutil_init.py.jinja2")
|
|
152
146
|
return template.render()
|
|
153
147
|
|
|
154
|
-
def serialize_init_file(self, clients:
|
|
148
|
+
def serialize_init_file(self, clients: list[Client]) -> str:
|
|
155
149
|
template = self.env.get_template("init.py.jinja2")
|
|
156
150
|
return template.render(
|
|
157
151
|
code_model=self.code_model,
|
|
@@ -160,7 +154,7 @@ class GeneralSerializer(BaseSerializer):
|
|
|
160
154
|
serialize_namespace=self.serialize_namespace,
|
|
161
155
|
)
|
|
162
156
|
|
|
163
|
-
def serialize_service_client_file(self, clients:
|
|
157
|
+
def serialize_service_client_file(self, clients: list[Client]) -> str:
|
|
164
158
|
template = self.env.get_template("client_container.py.jinja2")
|
|
165
159
|
|
|
166
160
|
imports = FileImport(self.code_model)
|
|
@@ -210,13 +204,10 @@ class GeneralSerializer(BaseSerializer):
|
|
|
210
204
|
)
|
|
211
205
|
if self.code_model.need_utils_form_data(self.async_mode, self.client_namespace):
|
|
212
206
|
file_import.add_submodule_import("typing", "IO", ImportType.STDLIB)
|
|
213
|
-
file_import.add_submodule_import("typing", "Tuple", ImportType.STDLIB)
|
|
214
207
|
file_import.add_submodule_import("typing", "Union", ImportType.STDLIB)
|
|
215
208
|
file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB)
|
|
216
209
|
file_import.add_submodule_import("typing", "Mapping", ImportType.STDLIB)
|
|
217
|
-
file_import.add_submodule_import("typing", "Dict", ImportType.STDLIB)
|
|
218
210
|
file_import.add_submodule_import("typing", "Any", ImportType.STDLIB)
|
|
219
|
-
file_import.add_submodule_import("typing", "List", ImportType.STDLIB)
|
|
220
211
|
file_import.add_submodule_import(
|
|
221
212
|
".._utils.model_base",
|
|
222
213
|
"SdkJSONEncoder",
|
|
@@ -239,7 +230,7 @@ class GeneralSerializer(BaseSerializer):
|
|
|
239
230
|
client_namespace=self.client_namespace,
|
|
240
231
|
)
|
|
241
232
|
|
|
242
|
-
def serialize_config_file(self, clients:
|
|
233
|
+
def serialize_config_file(self, clients: list[Client]) -> str:
|
|
243
234
|
template = self.env.get_template("config_container.py.jinja2")
|
|
244
235
|
imports = FileImport(self.code_model)
|
|
245
236
|
for client in self.code_model.clients:
|
|
@@ -282,40 +273,35 @@ class GeneralSerializer(BaseSerializer):
|
|
|
282
273
|
f"{model.client_namespace}.models.{model.name}": model.cross_language_definition_id
|
|
283
274
|
for model in self.code_model.public_model_types
|
|
284
275
|
}
|
|
285
|
-
cross_langauge_def_dict
|
|
286
|
-
{
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
)
|
|
276
|
+
cross_langauge_def_dict |= {
|
|
277
|
+
f"{self.code_model.namespace}.models.{enum.name}": enum.cross_language_definition_id
|
|
278
|
+
for enum in self.code_model.enums
|
|
279
|
+
if not enum.internal
|
|
280
|
+
}
|
|
281
|
+
|
|
292
282
|
for client in self.code_model.clients:
|
|
293
283
|
for operation_group in client.operation_groups:
|
|
294
284
|
for operation in operation_group.operations:
|
|
295
285
|
if operation.name.startswith("_"):
|
|
296
286
|
continue
|
|
297
|
-
cross_langauge_def_dict
|
|
298
|
-
{
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
)
|
|
316
|
-
+ f"{operation.name}": operation.cross_language_definition_id
|
|
317
|
-
}
|
|
318
|
-
)
|
|
287
|
+
cross_langauge_def_dict |= {
|
|
288
|
+
f"{self.code_model.namespace}."
|
|
289
|
+
+ (
|
|
290
|
+
f"{client.name}."
|
|
291
|
+
if operation_group.is_mixin
|
|
292
|
+
else f"operations.{operation_group.class_name}."
|
|
293
|
+
)
|
|
294
|
+
+ f"{operation.name}": operation.cross_language_definition_id
|
|
295
|
+
}
|
|
296
|
+
cross_langauge_def_dict |= {
|
|
297
|
+
f"{self.code_model.namespace}.aio."
|
|
298
|
+
+ (
|
|
299
|
+
f"{client.name}."
|
|
300
|
+
if operation_group.is_mixin
|
|
301
|
+
else f"operations.{operation_group.class_name}."
|
|
302
|
+
)
|
|
303
|
+
+ f"{operation.name}": operation.cross_language_definition_id
|
|
304
|
+
}
|
|
319
305
|
return json.dumps(
|
|
320
306
|
{
|
|
321
307
|
"CrossLanguagePackageId": self.code_model.cross_language_package_id,
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
from copy import deepcopy
|
|
7
|
-
from typing import List
|
|
8
7
|
from ..models.imports import (
|
|
9
8
|
ImportType,
|
|
10
9
|
FileImport,
|
|
@@ -14,7 +13,7 @@ from ..models.imports import (
|
|
|
14
13
|
)
|
|
15
14
|
|
|
16
15
|
|
|
17
|
-
def _serialize_package(imports:
|
|
16
|
+
def _serialize_package(imports: list[ImportModel], delimiter: str) -> str:
|
|
18
17
|
buffer = []
|
|
19
18
|
if any(i for i in imports if i.submodule_name is None):
|
|
20
19
|
buffer.append(f"import {imports[0].module_name}{f' as {imports[0].alias}' if imports[0].alias else ''}")
|
|
@@ -47,7 +46,7 @@ def _serialize_versioned_package(i: ImportModel, delimiter: str) -> str:
|
|
|
47
46
|
return delimiter.join(buffer)
|
|
48
47
|
|
|
49
48
|
|
|
50
|
-
def _serialize_import_type(imports:
|
|
49
|
+
def _serialize_import_type(imports: list[ImportModel], delimiter: str) -> str:
|
|
51
50
|
"""Serialize a given import type."""
|
|
52
51
|
import_list = []
|
|
53
52
|
for module_name in sorted(set(i.module_name for i in imports)):
|
|
@@ -60,7 +59,7 @@ def _serialize_import_type(imports: List[ImportModel], delimiter: str) -> str:
|
|
|
60
59
|
return delimiter.join(import_list)
|
|
61
60
|
|
|
62
61
|
|
|
63
|
-
def _get_import_clauses(imports:
|
|
62
|
+
def _get_import_clauses(imports: list[ImportModel], delimiter: str) -> list[str]:
|
|
64
63
|
import_clause = []
|
|
65
64
|
for import_type in ImportType:
|
|
66
65
|
imports_with_import_type = [i for i in imports if i.import_type == import_type]
|
|
@@ -91,15 +90,15 @@ class FileImportSerializer:
|
|
|
91
90
|
self.file_import.add_submodule_import("typing", "TYPE_CHECKING", ImportType.STDLIB)
|
|
92
91
|
|
|
93
92
|
def get_typing_definitions(self) -> str:
|
|
94
|
-
def declare_definition(type_name: str, type_definition: TypeDefinition) ->
|
|
95
|
-
ret:
|
|
93
|
+
def declare_definition(type_name: str, type_definition: TypeDefinition) -> list[str]:
|
|
94
|
+
ret: list[str] = []
|
|
96
95
|
definition_value = type_definition.async_definition if self.async_mode else type_definition.sync_definition
|
|
97
96
|
ret.append("{} = {}".format(type_name, definition_value))
|
|
98
97
|
return ret
|
|
99
98
|
|
|
100
99
|
if not self.file_import.type_definitions:
|
|
101
100
|
return ""
|
|
102
|
-
declarations:
|
|
101
|
+
declarations: list[str] = [""]
|
|
103
102
|
for type_name, value in self.file_import.type_definitions.items():
|
|
104
103
|
declarations.extend(declare_definition(type_name, value))
|
|
105
104
|
return "\n".join(declarations)
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import List
|
|
7
6
|
from jinja2 import Environment
|
|
8
7
|
from ..models import CodeModel, ModelType, EnumType
|
|
9
8
|
|
|
10
9
|
|
|
11
10
|
class ModelInitSerializer:
|
|
12
11
|
def __init__(
|
|
13
|
-
self, code_model: CodeModel, env: Environment, *, models:
|
|
12
|
+
self, code_model: CodeModel, env: Environment, *, models: list[ModelType], enums: list[EnumType]
|
|
14
13
|
) -> None:
|
|
15
14
|
self.code_model = code_model
|
|
16
15
|
self.env = env
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Optional
|
|
7
7
|
from abc import ABC, abstractmethod
|
|
8
8
|
|
|
9
9
|
from ..models import ModelType, Property, ConstantType, EnumValue
|
|
@@ -13,8 +13,8 @@ from .base_serializer import BaseSerializer
|
|
|
13
13
|
from ..models.utils import NamespaceType
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
def _documentation_string(prop: Property, description_keyword: str, docstring_type_keyword: str) ->
|
|
17
|
-
retval:
|
|
16
|
+
def _documentation_string(prop: Property, description_keyword: str, docstring_type_keyword: str) -> list[str]:
|
|
17
|
+
retval: list[str] = []
|
|
18
18
|
sphinx_prefix = f":{description_keyword} {prop.client_name}:"
|
|
19
19
|
description = prop.description(is_operation_file=False).replace("\\", "\\\\")
|
|
20
20
|
retval.append(f"{sphinx_prefix} {description}" if description else sphinx_prefix)
|
|
@@ -24,7 +24,7 @@ def _documentation_string(prop: Property, description_keyword: str, docstring_ty
|
|
|
24
24
|
|
|
25
25
|
class _ModelSerializer(BaseSerializer, ABC):
|
|
26
26
|
def __init__(
|
|
27
|
-
self, code_model, env, async_mode=False, *, models:
|
|
27
|
+
self, code_model, env, async_mode=False, *, models: list[ModelType], client_namespace: Optional[str] = None
|
|
28
28
|
):
|
|
29
29
|
super().__init__(code_model, env, async_mode, client_namespace=client_namespace)
|
|
30
30
|
self.models = models
|
|
@@ -51,15 +51,15 @@ class _ModelSerializer(BaseSerializer, ABC):
|
|
|
51
51
|
return s.replace(".", "\\\\.")
|
|
52
52
|
|
|
53
53
|
@staticmethod
|
|
54
|
-
def input_documentation_string(prop: Property) ->
|
|
54
|
+
def input_documentation_string(prop: Property) -> list[str]:
|
|
55
55
|
# building the param line of the property doc
|
|
56
56
|
return _documentation_string(prop, "keyword", "paramtype")
|
|
57
57
|
|
|
58
58
|
@staticmethod
|
|
59
|
-
def variable_documentation_string(prop: Property) ->
|
|
59
|
+
def variable_documentation_string(prop: Property) -> list[str]:
|
|
60
60
|
return _documentation_string(prop, "ivar", "vartype")
|
|
61
61
|
|
|
62
|
-
def super_call(self, model: ModelType) ->
|
|
62
|
+
def super_call(self, model: ModelType) -> list[str]:
|
|
63
63
|
return [f"super().__init__({self.properties_to_pass_to_super(model)})"]
|
|
64
64
|
|
|
65
65
|
@staticmethod
|
|
@@ -91,7 +91,7 @@ class _ModelSerializer(BaseSerializer, ABC):
|
|
|
91
91
|
def _init_line_parameters(model: ModelType):
|
|
92
92
|
return [p for p in model.properties if not p.readonly and not p.is_discriminator and not p.constant]
|
|
93
93
|
|
|
94
|
-
def init_line(self, model: ModelType) ->
|
|
94
|
+
def init_line(self, model: ModelType) -> list[str]:
|
|
95
95
|
init_properties_declaration = []
|
|
96
96
|
init_line_parameters = self._init_line_parameters(model)
|
|
97
97
|
init_line_parameters.sort(key=lambda x: x.optional)
|
|
@@ -113,12 +113,12 @@ class _ModelSerializer(BaseSerializer, ABC):
|
|
|
113
113
|
return ", ".join(properties_to_pass_to_super)
|
|
114
114
|
|
|
115
115
|
@abstractmethod
|
|
116
|
-
def initialize_properties(self, model: ModelType) ->
|
|
116
|
+
def initialize_properties(self, model: ModelType) -> list[str]: ...
|
|
117
117
|
|
|
118
118
|
def need_init(self, model: ModelType) -> bool:
|
|
119
119
|
return bool(self.init_line(model) or model.discriminator)
|
|
120
120
|
|
|
121
|
-
def pylint_disable_items(self, model: ModelType) ->
|
|
121
|
+
def pylint_disable_items(self, model: ModelType) -> list[str]:
|
|
122
122
|
if model.flattened_property or self.initialize_properties(model):
|
|
123
123
|
return [""]
|
|
124
124
|
if any(p for p in model.properties if p.is_discriminator and model.discriminator_value):
|
|
@@ -172,7 +172,7 @@ class MsrestModelSerializer(_ModelSerializer):
|
|
|
172
172
|
return f"class {model.name}({basename}):{model.pylint_disable()}"
|
|
173
173
|
|
|
174
174
|
@staticmethod
|
|
175
|
-
def get_properties_to_initialize(model: ModelType) ->
|
|
175
|
+
def get_properties_to_initialize(model: ModelType) -> list[Property]:
|
|
176
176
|
if model.parents:
|
|
177
177
|
properties_to_initialize = list(
|
|
178
178
|
{
|
|
@@ -186,7 +186,7 @@ class MsrestModelSerializer(_ModelSerializer):
|
|
|
186
186
|
properties_to_initialize = model.properties
|
|
187
187
|
return properties_to_initialize
|
|
188
188
|
|
|
189
|
-
def initialize_properties(self, model: ModelType) ->
|
|
189
|
+
def initialize_properties(self, model: ModelType) -> list[str]:
|
|
190
190
|
init_args = []
|
|
191
191
|
for prop in self.get_properties_to_initialize(model):
|
|
192
192
|
if prop.is_discriminator:
|
|
@@ -215,7 +215,7 @@ class MsrestModelSerializer(_ModelSerializer):
|
|
|
215
215
|
|
|
216
216
|
|
|
217
217
|
class DpgModelSerializer(_ModelSerializer):
|
|
218
|
-
def super_call(self, model: ModelType) ->
|
|
218
|
+
def super_call(self, model: ModelType) -> list[str]:
|
|
219
219
|
super_call = f"super().__init__({self.properties_to_pass_to_super(model)})"
|
|
220
220
|
if model.flattened_property:
|
|
221
221
|
return [
|
|
@@ -264,8 +264,6 @@ class DpgModelSerializer(_ModelSerializer):
|
|
|
264
264
|
parent.name,
|
|
265
265
|
ImportType.LOCAL,
|
|
266
266
|
)
|
|
267
|
-
if model.is_polymorphic:
|
|
268
|
-
file_import.add_submodule_import("typing", "Dict", ImportType.STDLIB)
|
|
269
267
|
if self.need_init(model):
|
|
270
268
|
file_import.add_submodule_import("typing", "overload", ImportType.STDLIB)
|
|
271
269
|
file_import.add_submodule_import("typing", "Mapping", ImportType.STDLIB)
|
|
@@ -281,7 +279,7 @@ class DpgModelSerializer(_ModelSerializer):
|
|
|
281
279
|
return f"class {model.name}({basename}):{model.pylint_disable()}"
|
|
282
280
|
|
|
283
281
|
@staticmethod
|
|
284
|
-
def get_properties_to_declare(model: ModelType) ->
|
|
282
|
+
def get_properties_to_declare(model: ModelType) -> list[Property]:
|
|
285
283
|
if model.parents:
|
|
286
284
|
parent_properties = [p for bm in model.parents for p in bm.properties]
|
|
287
285
|
properties_to_declare = [
|
|
@@ -328,7 +326,7 @@ class DpgModelSerializer(_ModelSerializer):
|
|
|
328
326
|
generated_code = f'{prop.client_name}: {type_annotation} = {field}({", ".join(args)})'
|
|
329
327
|
return f"{generated_code}{type_ignore}"
|
|
330
328
|
|
|
331
|
-
def initialize_properties(self, model: ModelType) ->
|
|
329
|
+
def initialize_properties(self, model: ModelType) -> list[str]:
|
|
332
330
|
init_args = []
|
|
333
331
|
for prop in self.get_properties_to_declare(model):
|
|
334
332
|
if prop.constant and not prop.is_base_discriminator:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import Optional,
|
|
6
|
+
from typing import Optional, Union
|
|
7
7
|
import functools
|
|
8
8
|
from jinja2 import Environment
|
|
9
9
|
|
|
@@ -27,7 +27,7 @@ class OperationGroupsSerializer(BaseSerializer):
|
|
|
27
27
|
def __init__(
|
|
28
28
|
self,
|
|
29
29
|
code_model: CodeModel,
|
|
30
|
-
operation_groups:
|
|
30
|
+
operation_groups: list[OperationGroup],
|
|
31
31
|
env: Environment,
|
|
32
32
|
async_mode: bool,
|
|
33
33
|
*,
|
|
@@ -39,7 +39,7 @@ class OperationGroupsSerializer(BaseSerializer):
|
|
|
39
39
|
|
|
40
40
|
def _get_request_builders(
|
|
41
41
|
self, operation_group: OperationGroup
|
|
42
|
-
) ->
|
|
42
|
+
) -> list[Union[OverloadedRequestBuilder, RequestBuilder]]:
|
|
43
43
|
return [
|
|
44
44
|
r
|
|
45
45
|
for r in operation_group.client.request_builders
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import List
|
|
7
6
|
from jinja2 import Environment
|
|
8
7
|
|
|
9
8
|
from ..models import CodeModel, OperationGroup
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
def get_pylint_disable(
|
|
13
|
-
if og.is_mixin
|
|
11
|
+
def get_pylint_disable(og: OperationGroup) -> str:
|
|
12
|
+
if og.is_mixin:
|
|
14
13
|
return " # pylint: disable=unused-import"
|
|
15
14
|
return ""
|
|
16
15
|
|
|
@@ -19,7 +18,7 @@ class OperationsInitSerializer:
|
|
|
19
18
|
def __init__(
|
|
20
19
|
self,
|
|
21
20
|
code_model: CodeModel,
|
|
22
|
-
operation_groups:
|
|
21
|
+
operation_groups: list[OperationGroup],
|
|
23
22
|
env: Environment,
|
|
24
23
|
async_mode: bool,
|
|
25
24
|
) -> None:
|
|
@@ -28,12 +27,12 @@ class OperationsInitSerializer:
|
|
|
28
27
|
self.env = env
|
|
29
28
|
self.async_mode = async_mode
|
|
30
29
|
|
|
31
|
-
def operation_group_imports(self) ->
|
|
30
|
+
def operation_group_imports(self) -> list[str]:
|
|
32
31
|
def _get_filename(operation_group: OperationGroup) -> str:
|
|
33
32
|
return "_operations" if self.code_model.options["combine-operation-files"] else operation_group.filename
|
|
34
33
|
|
|
35
34
|
return [
|
|
36
|
-
f"from .{_get_filename(og)} import {og.class_name} # type: ignore{get_pylint_disable(
|
|
35
|
+
f"from .{_get_filename(og)} import {og.class_name} # type: ignore{get_pylint_disable(og)}"
|
|
37
36
|
for og in self.operation_groups
|
|
38
37
|
]
|
|
39
38
|
|