@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.
Files changed (144) hide show
  1. package/README.md +2 -27
  2. package/autorest/codegen.py +0 -1
  3. package/autorest/jsonrpc/server.py +0 -3
  4. package/generator/build/lib/pygen/__init__.py +7 -21
  5. package/generator/build/lib/pygen/codegen/__init__.py +4 -4
  6. package/generator/build/lib/pygen/codegen/models/__init__.py +2 -2
  7. package/generator/build/lib/pygen/codegen/models/base.py +9 -12
  8. package/generator/build/lib/pygen/codegen/models/base_builder.py +4 -6
  9. package/generator/build/lib/pygen/codegen/models/client.py +61 -102
  10. package/generator/build/lib/pygen/codegen/models/code_model.py +29 -29
  11. package/generator/build/lib/pygen/codegen/models/combined_type.py +7 -7
  12. package/generator/build/lib/pygen/codegen/models/constant_type.py +4 -11
  13. package/generator/build/lib/pygen/codegen/models/credential_types.py +9 -11
  14. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +7 -8
  15. package/generator/build/lib/pygen/codegen/models/enum_type.py +7 -7
  16. package/generator/build/lib/pygen/codegen/models/imports.py +24 -29
  17. package/generator/build/lib/pygen/codegen/models/list_type.py +15 -14
  18. package/generator/build/lib/pygen/codegen/models/lro_operation.py +6 -6
  19. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
  20. package/generator/build/lib/pygen/codegen/models/model_type.py +11 -11
  21. package/generator/build/lib/pygen/codegen/models/operation.py +26 -56
  22. package/generator/build/lib/pygen/codegen/models/operation_group.py +11 -22
  23. package/generator/build/lib/pygen/codegen/models/paging_operation.py +15 -19
  24. package/generator/build/lib/pygen/codegen/models/parameter.py +12 -21
  25. package/generator/build/lib/pygen/codegen/models/parameter_list.py +37 -39
  26. package/generator/build/lib/pygen/codegen/models/primitive_types.py +24 -18
  27. package/generator/build/lib/pygen/codegen/models/property.py +10 -10
  28. package/generator/build/lib/pygen/codegen/models/request_builder.py +7 -8
  29. package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +3 -3
  30. package/generator/build/lib/pygen/codegen/models/response.py +15 -40
  31. package/generator/build/lib/pygen/codegen/models/utils.py +2 -2
  32. package/generator/build/lib/pygen/codegen/serializers/__init__.py +15 -40
  33. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +101 -94
  34. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +22 -25
  35. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +2 -2
  36. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +46 -60
  37. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +6 -7
  38. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +1 -2
  39. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +15 -17
  40. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  41. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  42. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +28 -18
  43. package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +1 -2
  44. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  45. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +9 -14
  46. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +7 -7
  47. package/generator/build/lib/pygen/codegen/serializers/utils.py +2 -2
  48. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  49. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  50. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  51. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  52. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  53. package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +7 -0
  54. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +1 -1
  55. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  56. package/generator/build/lib/pygen/codegen/templates/utils.py.jinja2 +6 -6
  57. package/generator/build/lib/pygen/preprocess/__init__.py +47 -30
  58. package/generator/build/lib/pygen/preprocess/helpers.py +2 -2
  59. package/generator/build/lib/pygen/utils.py +6 -6
  60. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  61. package/generator/pygen/__init__.py +7 -21
  62. package/generator/pygen/codegen/__init__.py +4 -4
  63. package/generator/pygen/codegen/models/__init__.py +2 -2
  64. package/generator/pygen/codegen/models/base.py +9 -12
  65. package/generator/pygen/codegen/models/base_builder.py +4 -6
  66. package/generator/pygen/codegen/models/client.py +61 -102
  67. package/generator/pygen/codegen/models/code_model.py +29 -29
  68. package/generator/pygen/codegen/models/combined_type.py +7 -7
  69. package/generator/pygen/codegen/models/constant_type.py +4 -11
  70. package/generator/pygen/codegen/models/credential_types.py +9 -11
  71. package/generator/pygen/codegen/models/dictionary_type.py +7 -8
  72. package/generator/pygen/codegen/models/enum_type.py +7 -7
  73. package/generator/pygen/codegen/models/imports.py +24 -29
  74. package/generator/pygen/codegen/models/list_type.py +15 -14
  75. package/generator/pygen/codegen/models/lro_operation.py +6 -6
  76. package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
  77. package/generator/pygen/codegen/models/model_type.py +11 -11
  78. package/generator/pygen/codegen/models/operation.py +26 -56
  79. package/generator/pygen/codegen/models/operation_group.py +11 -22
  80. package/generator/pygen/codegen/models/paging_operation.py +15 -19
  81. package/generator/pygen/codegen/models/parameter.py +12 -21
  82. package/generator/pygen/codegen/models/parameter_list.py +37 -39
  83. package/generator/pygen/codegen/models/primitive_types.py +24 -18
  84. package/generator/pygen/codegen/models/property.py +10 -10
  85. package/generator/pygen/codegen/models/request_builder.py +7 -8
  86. package/generator/pygen/codegen/models/request_builder_parameter.py +3 -3
  87. package/generator/pygen/codegen/models/response.py +15 -40
  88. package/generator/pygen/codegen/models/utils.py +2 -2
  89. package/generator/pygen/codegen/serializers/__init__.py +15 -40
  90. package/generator/pygen/codegen/serializers/builder_serializer.py +101 -94
  91. package/generator/pygen/codegen/serializers/client_serializer.py +22 -25
  92. package/generator/pygen/codegen/serializers/enum_serializer.py +2 -2
  93. package/generator/pygen/codegen/serializers/general_serializer.py +46 -60
  94. package/generator/pygen/codegen/serializers/import_serializer.py +6 -7
  95. package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -2
  96. package/generator/pygen/codegen/serializers/model_serializer.py +15 -17
  97. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  98. package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  99. package/generator/pygen/codegen/serializers/parameter_serializer.py +28 -18
  100. package/generator/pygen/codegen/serializers/patch_serializer.py +1 -2
  101. package/generator/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  102. package/generator/pygen/codegen/serializers/sample_serializer.py +9 -14
  103. package/generator/pygen/codegen/serializers/test_serializer.py +7 -7
  104. package/generator/pygen/codegen/serializers/utils.py +2 -2
  105. package/generator/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  106. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  107. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  108. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  109. package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  110. package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +7 -0
  111. package/generator/pygen/codegen/templates/patch.py.jinja2 +1 -1
  112. package/generator/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  113. package/generator/pygen/codegen/templates/utils.py.jinja2 +6 -6
  114. package/generator/pygen/preprocess/__init__.py +47 -30
  115. package/generator/pygen/preprocess/helpers.py +2 -2
  116. package/generator/pygen/utils.py +6 -6
  117. package/generator/pygen.egg-info/SOURCES.txt +0 -2
  118. package/package.json +2 -2
  119. package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
  120. package/autorest/multiapi/__init__.py +0 -185
  121. package/autorest/multiapi/models/__init__.py +0 -16
  122. package/autorest/multiapi/models/client.py +0 -68
  123. package/autorest/multiapi/models/code_model.py +0 -142
  124. package/autorest/multiapi/models/config.py +0 -24
  125. package/autorest/multiapi/models/constant_global_parameter.py +0 -11
  126. package/autorest/multiapi/models/global_parameter.py +0 -34
  127. package/autorest/multiapi/models/global_parameters.py +0 -53
  128. package/autorest/multiapi/models/imports.py +0 -181
  129. package/autorest/multiapi/models/mixin_operation.py +0 -38
  130. package/autorest/multiapi/models/operation_group.py +0 -29
  131. package/autorest/multiapi/models/operation_mixin_group.py +0 -89
  132. package/autorest/multiapi/serializers/__init__.py +0 -145
  133. package/autorest/multiapi/serializers/import_serializer.py +0 -181
  134. package/autorest/multiapi/templates/multiapi_config.py.jinja2 +0 -89
  135. package/autorest/multiapi/templates/multiapi_init.py.jinja2 +0 -22
  136. package/autorest/multiapi/templates/multiapi_models.py.jinja2 +0 -9
  137. package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +0 -39
  138. package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +0 -163
  139. package/autorest/multiapi/templates/multiapi_version.py.jinja2 +0 -8
  140. package/autorest/multiapi/utils.py +0 -51
  141. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +0 -216
  142. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +0 -167
  143. package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -216
  144. 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 Any, Dict, Optional, List, TYPE_CHECKING, TypeVar, Union
6
+ from typing import Any, Optional, TYPE_CHECKING, TypeVar, Union
7
7
  from .imports import FileImport
8
8
  from .operation import OperationBase, Operation
9
9
  from .response import LROPagingResponse, LROResponse, Response
@@ -22,16 +22,16 @@ LROResponseType = TypeVar("LROResponseType", bound=Union[LROResponse, LROPagingR
22
22
  class LROOperationBase(OperationBase[LROResponseType]):
23
23
  def __init__(
24
24
  self,
25
- yaml_data: Dict[str, Any],
25
+ yaml_data: dict[str, Any],
26
26
  code_model: "CodeModel",
27
27
  client: "Client",
28
28
  name: str,
29
29
  request_builder: RequestBuilder,
30
30
  parameters: ParameterList,
31
- responses: List[LROResponseType],
32
- exceptions: List[Response],
31
+ responses: list[LROResponseType],
32
+ exceptions: list[Response],
33
33
  *,
34
- overloads: Optional[List[Operation]] = None,
34
+ overloads: Optional[list[Operation]] = None,
35
35
  ) -> None:
36
36
  super().__init__(
37
37
  code_model=code_model,
@@ -46,7 +46,7 @@ class LROOperationBase(OperationBase[LROResponseType]):
46
46
  )
47
47
  if not self.name.lstrip("_").startswith("begin"):
48
48
  self.name = ("_begin" if self.internal else "begin_") + self.name
49
- self.lro_options: Dict[str, Any] = self.yaml_data.get("lroOptions", {})
49
+ self.lro_options: dict[str, Any] = self.yaml_data.get("lroOptions", {})
50
50
  self._initial_operation: Optional["OperationType"] = None
51
51
 
52
52
  @property
@@ -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 Any, List, Union
6
+ from typing import Any, Union
7
7
  from .imports import FileImport
8
8
  from .lro_operation import LROOperationBase
9
9
  from .paging_operation import PagingOperationBase
@@ -12,7 +12,7 @@ from .response import LROPagingResponse, Response
12
12
 
13
13
  class LROPagingOperation(LROOperationBase[LROPagingResponse], PagingOperationBase[LROPagingResponse]):
14
14
  @property
15
- def success_status_codes(self) -> List[Union[int, str, List[int]]]:
15
+ def success_status_codes(self) -> list[Union[int, str, list[int]]]:
16
16
  """The list of all successfull status code."""
17
17
  return [200]
18
18
 
@@ -5,7 +5,7 @@
5
5
  # --------------------------------------------------------------------------
6
6
  from enum import Enum
7
7
  from collections import OrderedDict
8
- from typing import Any, Dict, List, Optional, TYPE_CHECKING, cast
8
+ from typing import Any, Optional, TYPE_CHECKING, cast
9
9
  import sys
10
10
  from .utils import add_to_pylint_disable, NamespaceType
11
11
  from .base import BaseType
@@ -36,7 +36,7 @@ class UsageFlags(Enum):
36
36
  Xml = 512
37
37
 
38
38
 
39
- def _get_properties(type: "ModelType", properties: List[Property]) -> List[Property]:
39
+ def _get_properties(type: "ModelType", properties: list[Property]) -> list[Property]:
40
40
  for parent in type.parents:
41
41
  # here we're adding the properties from our parents
42
42
 
@@ -61,12 +61,12 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
61
61
 
62
62
  def __init__(
63
63
  self,
64
- yaml_data: Dict[str, Any],
64
+ yaml_data: dict[str, Any],
65
65
  code_model: "CodeModel",
66
66
  *,
67
- properties: Optional[List[Property]] = None,
68
- parents: Optional[List["ModelType"]] = None,
69
- discriminated_subtypes: Optional[Dict[str, "ModelType"]] = None,
67
+ properties: Optional[list[Property]] = None,
68
+ parents: Optional[list["ModelType"]] = None,
69
+ discriminated_subtypes: Optional[dict[str, "ModelType"]] = None,
70
70
  ) -> None:
71
71
  super().__init__(yaml_data=yaml_data, code_model=code_model)
72
72
  self.name: str = self.yaml_data["name"]
@@ -96,7 +96,7 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
96
96
  return None
97
97
 
98
98
  @property
99
- def flattened_items(self) -> List[str]:
99
+ def flattened_items(self) -> list[str]:
100
100
  return [
101
101
  item.client_name
102
102
  for prop in self.properties
@@ -141,7 +141,7 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
141
141
  return super().xml_serialization_ctxt
142
142
 
143
143
  @property
144
- def discriminated_subtypes_name_mapping(self) -> Dict[str, str]:
144
+ def discriminated_subtypes_name_mapping(self) -> dict[str, str]:
145
145
  return {k: v.name for k, v in self.discriminated_subtypes.items()}
146
146
 
147
147
  def get_json_template_representation(
@@ -181,7 +181,7 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
181
181
  )
182
182
  )
183
183
 
184
- def get_polymorphic_subtypes(self, polymorphic_subtypes: List["ModelType"]) -> None:
184
+ def get_polymorphic_subtypes(self, polymorphic_subtypes: list["ModelType"]) -> None:
185
185
  is_polymorphic_subtype = self.discriminator_value and not self.discriminated_subtypes
186
186
  if self._got_polymorphic_subtypes:
187
187
  return
@@ -195,13 +195,13 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
195
195
  self._got_polymorphic_subtypes = False
196
196
 
197
197
  @classmethod
198
- def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel") -> "ModelType":
198
+ def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel") -> "ModelType":
199
199
  raise ValueError(
200
200
  "You shouldn't call from_yaml for ModelType to avoid recursion. "
201
201
  "Please initial a blank ModelType, then call .fill_instance_from_yaml on the created type."
202
202
  )
203
203
 
204
- def fill_instance_from_yaml(self, yaml_data: Dict[str, Any], code_model: "CodeModel") -> None:
204
+ def fill_instance_from_yaml(self, yaml_data: dict[str, Any], code_model: "CodeModel") -> None:
205
205
  from . import build_type
206
206
 
207
207
  self.parents = [cast(ModelType, build_type(bm, code_model)) for bm in yaml_data.get("parents", [])]
@@ -4,8 +4,6 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
  from typing import (
7
- Dict,
8
- List,
9
7
  Any,
10
8
  Optional,
11
9
  Union,
@@ -61,14 +59,14 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
61
59
  ):
62
60
  def __init__(
63
61
  self,
64
- yaml_data: Dict[str, Any],
62
+ yaml_data: dict[str, Any],
65
63
  code_model: "CodeModel",
66
64
  client: "Client",
67
65
  name: str,
68
66
  request_builder: Union[RequestBuilder, OverloadedRequestBuilder],
69
67
  parameters: ParameterList,
70
- responses: List[ResponseType],
71
- exceptions: List[Response],
68
+ responses: list[ResponseType],
69
+ exceptions: list[Response],
72
70
  *,
73
71
  overloads: Optional[Sequence["Operation"]] = None,
74
72
  ) -> None:
@@ -204,61 +202,18 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
204
202
  return None if self.code_model.options["models-mode"] == "dpg" else "'object'"
205
203
 
206
204
  @property
207
- def non_default_errors(self) -> List[Response]:
205
+ def non_default_errors(self) -> list[Response]:
208
206
  return [
209
207
  e for e in self.exceptions if "default" not in e.status_codes and e.type and isinstance(e.type, ModelType)
210
208
  ]
211
209
 
212
- def _imports_shared(self, async_mode: bool, **kwargs: Any) -> FileImport:
213
- file_import = FileImport(self.code_model)
214
- file_import.add_submodule_import("typing", "Any", ImportType.STDLIB, TypingSection.CONDITIONAL)
215
-
216
- response_types = [r.type_annotation(async_mode=async_mode, **kwargs) for r in self.responses if r.type]
217
- if len(set(response_types)) > 1:
218
- file_import.add_submodule_import("typing", "Union", ImportType.STDLIB, TypingSection.CONDITIONAL)
219
- if self.added_on:
220
- serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
221
- file_import.add_submodule_import(
222
- self.code_model.get_relative_import_path(serialize_namespace, module_name="_validation"),
223
- "api_version_validation",
224
- ImportType.LOCAL,
225
- )
226
- return file_import
227
-
228
210
  @property
229
211
  def need_import_iobase(self) -> bool:
230
212
  return self.parameters.has_body and isinstance(self.parameters.body_parameter.type, CombinedType)
231
213
 
232
- def imports_for_multiapi(self, async_mode: bool, **kwargs: Any) -> FileImport:
233
- if self.abstract:
234
- return FileImport(self.code_model)
235
- file_import = self._imports_shared(async_mode, **kwargs)
236
- for param in self.parameters.method:
237
- file_import.merge(
238
- param.imports_for_multiapi(
239
- async_mode,
240
- need_import_iobase=self.need_import_iobase,
241
- **kwargs,
242
- )
243
- )
244
- for response in self.responses:
245
- file_import.merge(
246
- response.imports_for_multiapi(
247
- async_mode=async_mode, need_import_iobase=self.need_import_iobase, **kwargs
248
- )
249
- )
250
- if self.code_model.options["models-mode"]:
251
- for exception in self.exceptions:
252
- file_import.merge(
253
- exception.imports_for_multiapi(
254
- async_mode=async_mode, need_import_iobase=self.need_import_iobase, **kwargs
255
- )
256
- )
257
- return file_import
258
-
259
214
  @staticmethod
260
215
  def has_kwargs_to_pop_with_default(
261
- kwargs_to_pop: List[
216
+ kwargs_to_pop: list[
262
217
  Union[
263
218
  Parameter,
264
219
  RequestBuilderParameter,
@@ -326,7 +281,19 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
326
281
  return FileImport(self.code_model)
327
282
 
328
283
  serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
329
- file_import = self._imports_shared(async_mode, **kwargs)
284
+ file_import = FileImport(self.code_model)
285
+ file_import.add_submodule_import("typing", "Any", ImportType.STDLIB, TypingSection.CONDITIONAL)
286
+
287
+ response_types = [r.type_annotation(async_mode=async_mode, **kwargs) for r in self.responses if r.type]
288
+ if len(set(response_types)) > 1:
289
+ file_import.add_submodule_import("typing", "Union", ImportType.STDLIB, TypingSection.CONDITIONAL)
290
+ if self.added_on:
291
+ serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
292
+ file_import.add_submodule_import(
293
+ self.code_model.get_relative_import_path(serialize_namespace, module_name="_validation"),
294
+ "api_version_validation",
295
+ ImportType.LOCAL,
296
+ )
330
297
 
331
298
  for param in self.parameters.method:
332
299
  file_import.merge(
@@ -427,7 +394,6 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
427
394
  file_import.add_submodule_import("rest", "HttpRequest", ImportType.SDKCORE)
428
395
  file_import.add_submodule_import("typing", "Callable", ImportType.STDLIB, TypingSection.CONDITIONAL)
429
396
  file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB, TypingSection.CONDITIONAL)
430
- file_import.add_submodule_import("typing", "Dict", ImportType.STDLIB, TypingSection.CONDITIONAL)
431
397
  file_import.add_submodule_import("typing", "TypeVar", ImportType.STDLIB, TypingSection.CONDITIONAL)
432
398
  if self.code_model.options["tracing"] and self.want_tracing and not async_mode:
433
399
  file_import.add_submodule_import(
@@ -438,6 +404,10 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
438
404
  file_import.merge(self.get_request_builder_import(self.request_builder, async_mode, serialize_namespace))
439
405
  if self.overloads:
440
406
  file_import.add_submodule_import("typing", "overload", ImportType.STDLIB)
407
+ if self.name == "list":
408
+ # if there is a function named `list` we have to make sure there's no conflict with the built-in `list`
409
+ # not doing for dict or set yet, though we might have to later
410
+ file_import.define_mypy_type("List", "list")
441
411
  if self.code_model.options["models-mode"] == "dpg":
442
412
  relative_path = self.code_model.get_relative_import_path(
443
413
  serialize_namespace, module_name="_utils.model_base"
@@ -479,7 +449,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
479
449
  raise ValueError(f"Incorrect status code {status_code}, operation {self.name}") from exc
480
450
 
481
451
  @property
482
- def success_status_codes(self) -> List[Union[int, str, List[int]]]:
452
+ def success_status_codes(self) -> list[Union[int, str, list[int]]]:
483
453
  """The list of all successfull status code."""
484
454
  return sorted([code for response in self.responses for code in response.status_codes])
485
455
 
@@ -499,13 +469,13 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
499
469
  return any(r.is_stream_response for r in self.responses)
500
470
 
501
471
  @classmethod
502
- def get_request_builder(cls, yaml_data: Dict[str, Any], client: "Client"):
472
+ def get_request_builder(cls, yaml_data: dict[str, Any], client: "Client"):
503
473
  return client.lookup_request_builder(id(yaml_data))
504
474
 
505
475
  @classmethod
506
476
  def from_yaml(
507
477
  cls,
508
- yaml_data: Dict[str, Any],
478
+ yaml_data: dict[str, Any],
509
479
  code_model: "CodeModel",
510
480
  client: "Client",
511
481
  ):
@@ -548,7 +518,7 @@ class Operation(OperationBase[Response]):
548
518
  return file_import
549
519
 
550
520
 
551
- def get_operation(yaml_data: Dict[str, Any], code_model: "CodeModel", client: "Client") -> "OperationType":
521
+ def get_operation(yaml_data: dict[str, Any], code_model: "CodeModel", client: "Client") -> "OperationType":
552
522
  if yaml_data["discriminator"] == "lropaging":
553
523
  from .lro_paging_operation import LROPagingOperation as OperationCls
554
524
  elif yaml_data["discriminator"] == "lro":
@@ -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 Dict, List, Any, TYPE_CHECKING
6
+ from typing import Any, TYPE_CHECKING
7
7
 
8
8
  from .utils import OrderedSet
9
9
 
@@ -26,11 +26,11 @@ class OperationGroup(BaseModel):
26
26
 
27
27
  def __init__(
28
28
  self,
29
- yaml_data: Dict[str, Any],
29
+ yaml_data: dict[str, Any],
30
30
  code_model: "CodeModel",
31
31
  client: "Client",
32
- operations: List["OperationType"],
33
- api_versions: List[str],
32
+ operations: list["OperationType"],
33
+ api_versions: list[str],
34
34
  ) -> None:
35
35
  super().__init__(yaml_data, code_model)
36
36
  self.client = client
@@ -38,7 +38,7 @@ class OperationGroup(BaseModel):
38
38
  self.property_name: str = yaml_data["propertyName"]
39
39
  self.operations = operations
40
40
  self.api_versions = api_versions
41
- self.operation_groups: List[OperationGroup] = []
41
+ self.operation_groups: list[OperationGroup] = []
42
42
  if self.code_model.options["show-operations"]:
43
43
  self.operation_groups = [
44
44
  OperationGroup.from_yaml(op_group, code_model, client)
@@ -53,7 +53,7 @@ class OperationGroup(BaseModel):
53
53
  @property
54
54
  def class_name(self) -> str:
55
55
  """The class name of the operation group."""
56
- if self.is_mixin and not self.code_model.options["multiapi"]:
56
+ if self.is_mixin:
57
57
  return "_" + self.yaml_data["className"]
58
58
  return self.yaml_data["className"]
59
59
 
@@ -73,22 +73,11 @@ class OperationGroup(BaseModel):
73
73
  pipeline_client = (
74
74
  f"{'Async' if async_mode else ''}PipelineClient[HttpRequest, {'Async' if async_mode else ''}HttpResponse]"
75
75
  )
76
- base_classes: List[str] = []
76
+ base_classes: list[str] = []
77
77
  if self.is_mixin:
78
78
  base_classes.append(f"ClientMixinABC[{pipeline_client}, {self.client.name}Configuration]")
79
79
  return ", ".join(base_classes)
80
80
 
81
- def imports_for_multiapi(self, async_mode: bool, **kwargs) -> FileImport:
82
- file_import = FileImport(self.code_model)
83
- relative_path = ".." if async_mode else "."
84
- for operation in self.operations:
85
- file_import.merge(operation.imports_for_multiapi(async_mode, **kwargs))
86
- if (self.code_model.model_types or self.code_model.enums) and self.code_model.options[
87
- "models-mode"
88
- ] == "msrest":
89
- file_import.add_submodule_import(relative_path, "models", ImportType.LOCAL, alias="_models")
90
- return file_import
91
-
92
81
  def pylint_disable(self) -> str:
93
82
  retval: str = ""
94
83
  if self.has_abstract_operations:
@@ -141,7 +130,7 @@ class OperationGroup(BaseModel):
141
130
  og.class_name,
142
131
  ImportType.LOCAL,
143
132
  )
144
- # for multiapi
133
+ # shared code for imports
145
134
  if (
146
135
  (self.code_model.public_model_types)
147
136
  and self.code_model.options["models-mode"] == "msrest"
@@ -206,7 +195,7 @@ class OperationGroup(BaseModel):
206
195
  return file_import
207
196
  file_import.add_submodule_import("typing", "TypeVar", ImportType.STDLIB, TypingSection.CONDITIONAL)
208
197
  file_import.define_mypy_type("T", "TypeVar('T')")
209
- type_value = "Optional[Callable[[PipelineResponse[HttpRequest, {}HttpResponse], T, Dict[str, Any]], Any]]"
198
+ type_value = "Optional[Callable[[PipelineResponse[HttpRequest, {}HttpResponse], T, dict[str, Any]], Any]]"
210
199
  file_import.define_mypy_type("ClsType", type_value.format(""), type_value.format("Async"))
211
200
  return file_import
212
201
 
@@ -233,7 +222,7 @@ class OperationGroup(BaseModel):
233
222
  raise KeyError(f"No operation with id {operation_id} found.") from exc
234
223
 
235
224
  @property
236
- def lro_operations(self) -> List["OperationType"]:
225
+ def lro_operations(self) -> list["OperationType"]:
237
226
  return [operation for operation in self.operations if operation.operation_type in ("lro", "lropaging")] + [
238
227
  operation for operation_group in self.operation_groups for operation in operation_group.lro_operations
239
228
  ]
@@ -250,7 +239,7 @@ class OperationGroup(BaseModel):
250
239
  @classmethod
251
240
  def from_yaml(
252
241
  cls,
253
- yaml_data: Dict[str, Any],
242
+ yaml_data: dict[str, Any],
254
243
  code_model: "CodeModel",
255
244
  client: "Client",
256
245
  ) -> "OperationGroup":
@@ -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 Dict, List, Any, Optional, Union, TYPE_CHECKING, cast, TypeVar
6
+ from typing import Any, Optional, Union, TYPE_CHECKING, cast, TypeVar
7
7
 
8
8
  from .operation import Operation, OperationBase
9
9
  from .response import PagingResponse, LROPagingResponse, Response
@@ -28,16 +28,16 @@ PagingResponseType = TypeVar("PagingResponseType", bound=Union[PagingResponse, L
28
28
  class PagingOperationBase(OperationBase[PagingResponseType]):
29
29
  def __init__(
30
30
  self,
31
- yaml_data: Dict[str, Any],
31
+ yaml_data: dict[str, Any],
32
32
  code_model: "CodeModel",
33
33
  client: "Client",
34
34
  name: str,
35
35
  request_builder: RequestBuilder,
36
36
  parameters: ParameterList,
37
- responses: List[PagingResponseType],
38
- exceptions: List[Response],
37
+ responses: list[PagingResponseType],
38
+ exceptions: list[Response],
39
39
  *,
40
- overloads: Optional[List[Operation]] = None,
40
+ overloads: Optional[list[Operation]] = None,
41
41
  override_success_response_to_200: bool = False,
42
42
  ) -> None:
43
43
  super().__init__(
@@ -59,8 +59,8 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
59
59
  self.override_success_response_to_200 = override_success_response_to_200
60
60
  self.pager_sync: str = yaml_data.get("pagerSync") or f"{self.code_model.core_library}.paging.ItemPaged"
61
61
  self.pager_async: str = yaml_data.get("pagerAsync") or f"{self.code_model.core_library}.paging.AsyncItemPaged"
62
- self.continuation_token: Dict[str, Any] = yaml_data.get("continuationToken", {})
63
- self.next_link_reinjected_parameters: List[Parameter] = [
62
+ self.continuation_token: dict[str, Any] = yaml_data.get("continuationToken", {})
63
+ self.next_link_reinjected_parameters: list[Parameter] = [
64
64
  Parameter.from_yaml(p, code_model) for p in yaml_data.get("nextLinkReInjectedParameters", [])
65
65
  ]
66
66
 
@@ -119,8 +119,14 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
119
119
  def cls_type_annotation(self, *, async_mode: bool, **kwargs: Any) -> str:
120
120
  return f"ClsType[{Response.type_annotation(self.responses[0], async_mode=async_mode, **kwargs)}]"
121
121
 
122
- def _imports_shared(self, async_mode: bool, **kwargs: Any) -> FileImport:
123
- file_import = super()._imports_shared(async_mode, **kwargs)
122
+ @property
123
+ def has_optional_return_type(self) -> bool:
124
+ return False
125
+
126
+ def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
127
+ if self.abstract:
128
+ return FileImport(self.code_model)
129
+ file_import = super().imports(async_mode, **kwargs)
124
130
  if async_mode:
125
131
  default_paging_submodule = f"{'async_' if self.code_model.is_azure_flavor else ''}paging"
126
132
  file_import.add_submodule_import(
@@ -139,16 +145,6 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
139
145
  and not async_mode
140
146
  ):
141
147
  file_import.merge(self.next_request_builder.imports(**kwargs))
142
- return file_import
143
-
144
- @property
145
- def has_optional_return_type(self) -> bool:
146
- return False
147
-
148
- def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
149
- if self.abstract:
150
- return FileImport(self.code_model)
151
- file_import = self._imports_shared(async_mode, **kwargs)
152
148
  file_import.merge(super().imports(async_mode, **kwargs))
153
149
  serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
154
150
  if self.code_model.options["tracing"] and self.want_tracing:
@@ -7,10 +7,8 @@ import abc
7
7
  from enum import Enum
8
8
 
9
9
  from typing import (
10
- Dict,
11
10
  Any,
12
11
  TYPE_CHECKING,
13
- List,
14
12
  Optional,
15
13
  TypeVar,
16
14
  Union,
@@ -35,6 +33,7 @@ class ParameterLocation(str, Enum):
35
33
  ENDPOINT_PATH = "endpointPath"
36
34
  QUERY = "query"
37
35
  BODY = "body"
36
+ KEYWORD = "keyword"
38
37
  OTHER = "other"
39
38
 
40
39
 
@@ -56,7 +55,7 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
56
55
 
57
56
  def __init__(
58
57
  self,
59
- yaml_data: Dict[str, Any],
58
+ yaml_data: dict[str, Any],
60
59
  code_model: "CodeModel",
61
60
  type: BaseType,
62
61
  ) -> None:
@@ -75,13 +74,13 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
75
74
  self.grouped_by: Optional[str] = self.yaml_data.get("groupedBy")
76
75
  # property matching property name to parameter name for grouping params
77
76
  # and flattened body params
78
- self.property_to_parameter_name: Optional[Dict[str, str]] = self.yaml_data.get("propertyToParameterName")
77
+ self.property_to_parameter_name: Optional[dict[str, str]] = self.yaml_data.get("propertyToParameterName")
79
78
  self.flattened: bool = self.yaml_data.get("flattened", False)
80
79
  self.in_flattened_body: bool = self.yaml_data.get("inFlattenedBody", False)
81
80
  self.grouper: bool = self.yaml_data.get("grouper", False)
82
81
  self.check_client_input: bool = self.yaml_data.get("checkClientInput", False)
83
82
  self.added_on: Optional[str] = self.yaml_data.get("addedOn")
84
- self.api_versions: Optional[List[str]] = self.yaml_data.get("apiVersions", [])
83
+ self.api_versions: Optional[list[str]] = self.yaml_data.get("apiVersions", [])
85
84
  self.is_api_version: bool = self.yaml_data.get("isApiVersion", False)
86
85
  self.in_overload: bool = self.yaml_data.get("inOverload", False)
87
86
  self.default_to_unset_sentinel: bool = self.yaml_data.get("defaultToUnsetSentinel", False)
@@ -160,7 +159,7 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
160
159
  def serialization_type(self, **kwargs: Any) -> str:
161
160
  return self.type.serialization_type(**kwargs)
162
161
 
163
- def _imports_shared(self, async_mode: bool, **kwargs: Any) -> FileImport: # pylint: disable=unused-argument
162
+ def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
164
163
  file_import = FileImport(self.code_model)
165
164
  if self.optional and self.client_default_value is None:
166
165
  file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB)
@@ -178,10 +177,6 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
178
177
  ImportType.LOCAL,
179
178
  TypingSection.TYPING,
180
179
  )
181
- return file_import
182
-
183
- def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
184
- file_import = self._imports_shared(async_mode, **kwargs)
185
180
  # special logic for api-version parameter
186
181
  if not self.is_api_version:
187
182
  file_import.merge(self.type.imports(async_mode=async_mode, **kwargs))
@@ -193,11 +188,6 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
193
188
  )
194
189
  return file_import
195
190
 
196
- def imports_for_multiapi(self, async_mode: bool, **kwargs: Any) -> FileImport:
197
- file_import = self._imports_shared(async_mode, **kwargs)
198
- file_import.merge(self.type.imports_for_multiapi(async_mode=async_mode, **kwargs))
199
- return file_import
200
-
201
191
  @property
202
192
  def method_location(self) -> ParameterMethodLocation:
203
193
  raise NotImplementedError("Please implement in children")
@@ -227,7 +217,7 @@ class BodyParameter(_ParameterBase):
227
217
  """Body parameter."""
228
218
 
229
219
  @property
230
- def entries(self) -> List["BodyParameter"]:
220
+ def entries(self) -> list["BodyParameter"]:
231
221
  return [BodyParameter.from_yaml(e, self.code_model) for e in self.yaml_data.get("entries", [])]
232
222
 
233
223
  @property
@@ -258,7 +248,7 @@ class BodyParameter(_ParameterBase):
258
248
  return not (self.flattened or self.grouped_by)
259
249
 
260
250
  @property
261
- def content_types(self) -> List[str]:
251
+ def content_types(self) -> list[str]:
262
252
  return self.yaml_data["contentTypes"]
263
253
 
264
254
  @property
@@ -280,11 +270,10 @@ class BodyParameter(_ParameterBase):
280
270
  "prepare_multipart_form_data",
281
271
  ImportType.LOCAL,
282
272
  )
283
- file_import.add_submodule_import("typing", "List", ImportType.STDLIB)
284
273
  return file_import
285
274
 
286
275
  @classmethod
287
- def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel") -> "BodyParameter":
276
+ def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel") -> "BodyParameter":
288
277
  return cls(
289
278
  yaml_data=yaml_data,
290
279
  code_model=code_model,
@@ -300,7 +289,7 @@ class Parameter(_ParameterBase):
300
289
 
301
290
  def __init__(
302
291
  self,
303
- yaml_data: Dict[str, Any],
292
+ yaml_data: dict[str, Any],
304
293
  code_model: "CodeModel",
305
294
  type: BaseType,
306
295
  ) -> None:
@@ -364,7 +353,7 @@ class Parameter(_ParameterBase):
364
353
  return ParameterMethodLocation.POSITIONAL
365
354
 
366
355
  @classmethod
367
- def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel"):
356
+ def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel"):
368
357
  return cls(
369
358
  yaml_data=yaml_data,
370
359
  code_model=code_model,
@@ -396,6 +385,8 @@ class ClientParameter(Parameter):
396
385
  and not self.code_model.options["azure-arm"]
397
386
  ):
398
387
  return ParameterMethodLocation.KEYWORD_ONLY
388
+ if self.location == ParameterLocation.KEYWORD:
389
+ return ParameterMethodLocation.KEYWORD_ONLY
399
390
  return ParameterMethodLocation.POSITIONAL
400
391
 
401
392