@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 List, cast
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) -> List[str]:
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 = "" if self.client.code_model.options["multiapi"] else "_"
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) -> List[str]:
61
- retval: List[str] = []
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) -> List[str]:
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
- '_cloud = kwargs.pop("cloud_setting", None) or settings.current.azure_cloud # type: ignore',
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) -> List[str]:
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) -> List[str]:
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{': Dict[str, Any]' if not self.client.code_model.model_types else ''}"
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.update({update_dict})")
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
- if og.code_model.options["multiapi"]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
320
- retval: List[str] = []
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, List
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: List[EnumType],
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, List, TYPE_CHECKING
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.update({"options": self.code_model.options})
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, file_path: "Path") -> dict:
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
- with open(file_path, "rb") as f:
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, file_path: "Path", **kwargs: Any) -> 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(file_path)
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.update(
134
- {
135
- "code_model": self.code_model,
136
- "dev_status": dev_status,
137
- "token_credential": token_credential,
138
- "pkgutil_names": [".".join(package_parts[: i + 1]) for i in range(len(package_parts))],
139
- "init_names": ["/".join(package_parts[: i + 1]) + "/__init__.py" for i in range(len(package_parts))],
140
- "client_name": self.code_model.clients[0].name if self.code_model.clients else "",
141
- "VERSION_MAP": VERSION_MAP,
142
- "MIN_PYTHON_VERSION": MIN_PYTHON_VERSION,
143
- "MAX_PYTHON_VERSION": MAX_PYTHON_VERSION,
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: List[Client]) -> str:
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: List[Client]) -> str:
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: List[Client]) -> str:
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.update(
286
- {
287
- f"{self.code_model.namespace}.models.{enum.name}": enum.cross_language_definition_id
288
- for enum in self.code_model.enums
289
- if not enum.internal
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.update(
298
- {
299
- f"{self.code_model.namespace}."
300
- + (
301
- f"{client.name}."
302
- if operation_group.is_mixin
303
- else f"operations.{operation_group.class_name}."
304
- )
305
- + f"{operation.name}": operation.cross_language_definition_id
306
- }
307
- )
308
- cross_langauge_def_dict.update(
309
- {
310
- f"{self.code_model.namespace}.aio."
311
- + (
312
- f"{client.name}."
313
- if operation_group.is_mixin
314
- else f"operations.{operation_group.class_name}."
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: List[ImportModel], delimiter: str) -> str:
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: List[ImportModel], delimiter: str) -> str:
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: List[ImportModel], delimiter: str) -> List[str]:
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) -> List[str]:
95
- ret: List[str] = []
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: List[str] = [""]
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: List[ModelType], enums: List[EnumType]
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 List, Optional
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) -> List[str]:
17
- retval: List[str] = []
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: List[ModelType], client_namespace: Optional[str] = None
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]:
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) -> List[str]: ...
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) -> List[str]:
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) -> List[Property]:
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) -> List[str]:
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) -> List[str]:
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) -> List[Property]:
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) -> List[str]:
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, List, Union
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: List[OperationGroup],
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
- ) -> List[Union[OverloadedRequestBuilder, RequestBuilder]]:
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(code_model: CodeModel, og: OperationGroup) -> str:
13
- if og.is_mixin and not code_model.options["multiapi"]:
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: List[OperationGroup],
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) -> List[str]:
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(self.code_model, og)}"
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