@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 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
 
@@ -7,8 +7,6 @@ import logging
7
7
  from typing import (
8
8
  Any,
9
9
  Callable,
10
- Dict,
11
- List,
12
10
  Optional,
13
11
  TYPE_CHECKING,
14
12
  Union,
@@ -48,7 +46,7 @@ class ParameterImplementation(Enum):
48
46
  _LOGGER = logging.getLogger(__name__)
49
47
 
50
48
 
51
- def method_signature_helper(positional: List[str], keyword_only: Optional[List[str]], kwarg_params: List[str]):
49
+ def method_signature_helper(positional: list[str], keyword_only: Optional[list[str]], kwarg_params: list[str]):
52
50
  keyword_only = keyword_only or []
53
51
  return positional + keyword_only + kwarg_params
54
52
 
@@ -64,9 +62,9 @@ class _ParameterListBase(
64
62
 
65
63
  def __init__(
66
64
  self,
67
- yaml_data: Dict[str, Any],
65
+ yaml_data: dict[str, Any],
68
66
  code_model: "CodeModel",
69
- parameters: List[ParameterType],
67
+ parameters: list[ParameterType],
70
68
  body_parameter: Optional[BodyParameterType] = None,
71
69
  ) -> None:
72
70
  self.yaml_data = yaml_data
@@ -97,18 +95,18 @@ class _ParameterListBase(
97
95
 
98
96
  @staticmethod
99
97
  @abstractmethod
100
- def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], ParameterType]:
98
+ def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], ParameterType]:
101
99
  """Callable for creating parameters"""
102
100
 
103
101
  @staticmethod
104
102
  @abstractmethod
105
- def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], BodyParameterType]:
103
+ def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], BodyParameterType]:
106
104
  """Callable for creating body parameters"""
107
105
 
108
106
  @property
109
- def grouped(self) -> List[Union[ParameterType, BodyParameterType]]:
107
+ def grouped(self) -> list[Union[ParameterType, BodyParameterType]]:
110
108
  """All parameters that are inside a parameter group"""
111
- params: List[Union[ParameterType, BodyParameterType]] = [p for p in self.parameters if p.grouped_by]
109
+ params: list[Union[ParameterType, BodyParameterType]] = [p for p in self.parameters if p.grouped_by]
112
110
  if self.has_body and self.body_parameter.grouped_by:
113
111
  params.append(self.body_parameter)
114
112
  return params
@@ -123,41 +121,41 @@ class _ParameterListBase(
123
121
  return bool(self._body_parameter)
124
122
 
125
123
  @property
126
- def path(self) -> List[ParameterType]:
124
+ def path(self) -> list[ParameterType]:
127
125
  """All path parameters"""
128
126
  return [p for p in self.parameters if p.location in (ParameterLocation.PATH, ParameterLocation.ENDPOINT_PATH)]
129
127
 
130
128
  @property
131
- def query(self) -> List[ParameterType]:
129
+ def query(self) -> list[ParameterType]:
132
130
  """All query parameters"""
133
131
  return [p for p in self.parameters if p.location == ParameterLocation.QUERY]
134
132
 
135
133
  @property
136
- def headers(self) -> List[ParameterType]:
134
+ def headers(self) -> list[ParameterType]:
137
135
  """All header parameters"""
138
136
  return [p for p in self.parameters if p.location == ParameterLocation.HEADER]
139
137
 
140
138
  @property
141
- def constant(self) -> List[Union[ParameterType, BodyParameterType]]:
139
+ def constant(self) -> list[Union[ParameterType, BodyParameterType]]:
142
140
  """All constant parameters"""
143
141
  return [p for p in self.parameters if p.constant]
144
142
 
145
143
  @property
146
- def positional(self) -> List[Union[ParameterType, BodyParameterType]]:
144
+ def positional(self) -> list[Union[ParameterType, BodyParameterType]]:
147
145
  """All positional parameters"""
148
146
  return _sort(
149
147
  [p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.POSITIONAL]
150
148
  )
151
149
 
152
150
  @property
153
- def keyword_only(self) -> List[Union[ParameterType, BodyParameterType]]:
151
+ def keyword_only(self) -> list[Union[ParameterType, BodyParameterType]]:
154
152
  """All keyword only parameters"""
155
153
  return _sort(
156
154
  [p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.KEYWORD_ONLY]
157
155
  )
158
156
 
159
157
  @property
160
- def kwarg(self) -> List[Union[ParameterType, BodyParameterType]]:
158
+ def kwarg(self) -> list[Union[ParameterType, BodyParameterType]]:
161
159
  """All kwargs"""
162
160
  return _sort([p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.KWARG])
163
161
 
@@ -174,9 +172,9 @@ class _ParameterListBase(
174
172
  """Whether this is a client or a method parameter"""
175
173
 
176
174
  @property
177
- def unsorted_method_params(self) -> List[Union[ParameterType, BodyParameterType]]:
175
+ def unsorted_method_params(self) -> list[Union[ParameterType, BodyParameterType]]:
178
176
  """Method params before sorting"""
179
- method_params: List[Union[ParameterType, BodyParameterType]] = [
177
+ method_params: list[Union[ParameterType, BodyParameterType]] = [
180
178
  p
181
179
  for p in self.parameters
182
180
  if p.in_method_signature
@@ -196,11 +194,11 @@ class _ParameterListBase(
196
194
  return method_params
197
195
 
198
196
  @property
199
- def method(self) -> List[Union[ParameterType, BodyParameterType]]:
197
+ def method(self) -> list[Union[ParameterType, BodyParameterType]]:
200
198
  """Sorted method params. First positional, then keyword only, then kwarg"""
201
199
  return self.positional + self.keyword_only + self.kwarg
202
200
 
203
- def method_signature(self, async_mode: bool, **kwargs: Any) -> List[str]:
201
+ def method_signature(self, async_mode: bool, **kwargs: Any) -> list[str]:
204
202
  """Method signature for this parameter list."""
205
203
  return method_signature_helper(
206
204
  positional=self.method_signature_positional(async_mode, **kwargs),
@@ -208,11 +206,11 @@ class _ParameterListBase(
208
206
  kwarg_params=self.method_signature_kwargs,
209
207
  )
210
208
 
211
- def method_signature_positional(self, async_mode: bool, **kwargs: Any) -> List[str]:
209
+ def method_signature_positional(self, async_mode: bool, **kwargs: Any) -> list[str]:
212
210
  """Signature for positional parameters"""
213
211
  return [parameter.method_signature(async_mode, **kwargs) for parameter in self.positional]
214
212
 
215
- def method_signature_keyword_only(self, async_mode: bool, **kwargs: Any) -> List[str]:
213
+ def method_signature_keyword_only(self, async_mode: bool, **kwargs: Any) -> list[str]:
216
214
  """Signature for keyword only parameters"""
217
215
  result = [
218
216
  parameter.method_signature(async_mode, **kwargs)
@@ -222,19 +220,19 @@ class _ParameterListBase(
222
220
  return ["*,"] + result if result else []
223
221
 
224
222
  @property
225
- def method_signature_kwargs(self) -> List[str]:
223
+ def method_signature_kwargs(self) -> list[str]:
226
224
  """Signature for kwargs"""
227
225
  return ["**kwargs: Any"]
228
226
 
229
227
  @property
230
- def kwargs_to_pop(self) -> List[Union[ParameterType, BodyParameterType]]:
228
+ def kwargs_to_pop(self) -> list[Union[ParameterType, BodyParameterType]]:
231
229
  """Method kwargs we want to pop"""
232
230
  # don't want to pop bodies unless it's a constant
233
231
  kwargs_to_pop = self.kwarg
234
232
  return [k for k in kwargs_to_pop if k.location != ParameterLocation.BODY or k.constant]
235
233
 
236
234
  @property
237
- def call(self) -> List[str]:
235
+ def call(self) -> list[str]:
238
236
  """How to pass in parameters to call the operation"""
239
237
  retval = [p.client_name for p in self.method if p.method_location == ParameterMethodLocation.POSITIONAL]
240
238
  retval.extend(
@@ -248,7 +246,7 @@ class _ParameterListBase(
248
246
  return retval
249
247
 
250
248
  @classmethod
251
- def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel"):
249
+ def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel"):
252
250
  parameters = [cls.parameter_creator()(parameter, code_model) for parameter in yaml_data["parameters"]]
253
251
  body_parameter = None
254
252
  if yaml_data.get("bodyParameter"):
@@ -264,11 +262,11 @@ class _ParameterListBase(
264
262
  class _ParameterList(_ParameterListBase[Parameter, BodyParameter]):
265
263
 
266
264
  @staticmethod
267
- def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], Parameter]:
265
+ def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], Parameter]:
268
266
  return Parameter.from_yaml
269
267
 
270
268
  @staticmethod
271
- def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], BodyParameter]:
269
+ def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], BodyParameter]:
272
270
  return BodyParameter.from_yaml
273
271
 
274
272
  @property
@@ -276,7 +274,7 @@ class _ParameterList(_ParameterListBase[Parameter, BodyParameter]):
276
274
  return "Method"
277
275
 
278
276
  @property
279
- def path(self) -> List[Parameter]:
277
+ def path(self) -> list[Parameter]:
280
278
  return [k for k in super().path if k.location == ParameterLocation.ENDPOINT_PATH]
281
279
 
282
280
 
@@ -288,11 +286,11 @@ class _RequestBuilderParameterList(_ParameterListBase[RequestBuilderParameter, R
288
286
  """_RequestBuilderParameterList is base parameter list for RequestBuilder classes"""
289
287
 
290
288
  @staticmethod
291
- def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], RequestBuilderParameter]:
289
+ def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], RequestBuilderParameter]:
292
290
  return RequestBuilderParameter.from_yaml
293
291
 
294
292
  @staticmethod
295
- def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], RequestBuilderBodyParameter]:
293
+ def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], RequestBuilderBodyParameter]:
296
294
  return RequestBuilderBodyParameter.from_yaml
297
295
 
298
296
  @property
@@ -302,7 +300,7 @@ class _RequestBuilderParameterList(_ParameterListBase[RequestBuilderParameter, R
302
300
  @property
303
301
  def unsorted_method_params(
304
302
  self,
305
- ) -> List[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
303
+ ) -> list[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
306
304
  # don't have access to client params in request builder
307
305
  retval = [
308
306
  p
@@ -313,13 +311,13 @@ class _RequestBuilderParameterList(_ParameterListBase[RequestBuilderParameter, R
313
311
  return retval
314
312
 
315
313
  @property
316
- def path(self) -> List[RequestBuilderParameter]:
314
+ def path(self) -> list[RequestBuilderParameter]:
317
315
  return [p for p in super().path if p.location != ParameterLocation.ENDPOINT_PATH]
318
316
 
319
317
  @property
320
318
  def constant(
321
319
  self,
322
- ) -> List[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
320
+ ) -> list[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
323
321
  """All constant parameters"""
324
322
  return [p for p in super().constant if p.location != ParameterLocation.ENDPOINT_PATH]
325
323
 
@@ -336,7 +334,7 @@ class _ClientGlobalParameterList(_ParameterListBase[ParameterType, BodyParameter
336
334
  """Base parameter list for client and config classes"""
337
335
 
338
336
  @staticmethod
339
- def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], BodyParameter]:
337
+ def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], BodyParameter]:
340
338
  return BodyParameter.from_yaml
341
339
 
342
340
  @property
@@ -351,7 +349,7 @@ class _ClientGlobalParameterList(_ParameterListBase[ParameterType, BodyParameter
351
349
  return None
352
350
 
353
351
  @property
354
- def path(self) -> List[ParameterType]:
352
+ def path(self) -> list[ParameterType]:
355
353
  return [p for p in super().path if p.location == ParameterLocation.ENDPOINT_PATH]
356
354
 
357
355
 
@@ -359,11 +357,11 @@ class ClientGlobalParameterList(_ClientGlobalParameterList[ClientParameter]):
359
357
  """Parameter list for Client class"""
360
358
 
361
359
  @staticmethod
362
- def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], ClientParameter]:
360
+ def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], ClientParameter]:
363
361
  return ClientParameter.from_yaml
364
362
 
365
363
  @property
366
- def path(self) -> List[ClientParameter]:
364
+ def path(self) -> list[ClientParameter]:
367
365
  return [p for p in super().path if not p.is_host]
368
366
 
369
367
  @property
@@ -379,7 +377,7 @@ class ConfigGlobalParameterList(_ClientGlobalParameterList[ConfigParameter]):
379
377
  """Parameter list for config"""
380
378
 
381
379
  @staticmethod
382
- def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], ConfigParameter]:
380
+ def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], ConfigParameter]:
383
381
  return ConfigParameter.from_yaml
384
382
 
385
383
  @property