@autorest/python 6.38.1 → 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 (146) 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 +14 -23
  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 +26 -42
  33. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +103 -100
  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 +49 -61
  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/CHANGELOG.md.jinja2 +2 -1
  53. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  54. package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  55. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +1 -1
  56. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  57. package/generator/build/lib/pygen/codegen/templates/utils.py.jinja2 +6 -6
  58. package/generator/build/lib/pygen/preprocess/__init__.py +47 -30
  59. package/generator/build/lib/pygen/preprocess/helpers.py +2 -2
  60. package/generator/build/lib/pygen/utils.py +6 -6
  61. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  62. package/generator/pygen/__init__.py +14 -23
  63. package/generator/pygen/codegen/__init__.py +4 -4
  64. package/generator/pygen/codegen/models/__init__.py +2 -2
  65. package/generator/pygen/codegen/models/base.py +9 -12
  66. package/generator/pygen/codegen/models/base_builder.py +4 -6
  67. package/generator/pygen/codegen/models/client.py +61 -102
  68. package/generator/pygen/codegen/models/code_model.py +29 -29
  69. package/generator/pygen/codegen/models/combined_type.py +7 -7
  70. package/generator/pygen/codegen/models/constant_type.py +4 -11
  71. package/generator/pygen/codegen/models/credential_types.py +9 -11
  72. package/generator/pygen/codegen/models/dictionary_type.py +7 -8
  73. package/generator/pygen/codegen/models/enum_type.py +7 -7
  74. package/generator/pygen/codegen/models/imports.py +24 -29
  75. package/generator/pygen/codegen/models/list_type.py +15 -14
  76. package/generator/pygen/codegen/models/lro_operation.py +6 -6
  77. package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
  78. package/generator/pygen/codegen/models/model_type.py +11 -11
  79. package/generator/pygen/codegen/models/operation.py +26 -56
  80. package/generator/pygen/codegen/models/operation_group.py +11 -22
  81. package/generator/pygen/codegen/models/paging_operation.py +15 -19
  82. package/generator/pygen/codegen/models/parameter.py +12 -21
  83. package/generator/pygen/codegen/models/parameter_list.py +37 -39
  84. package/generator/pygen/codegen/models/primitive_types.py +24 -18
  85. package/generator/pygen/codegen/models/property.py +10 -10
  86. package/generator/pygen/codegen/models/request_builder.py +7 -8
  87. package/generator/pygen/codegen/models/request_builder_parameter.py +3 -3
  88. package/generator/pygen/codegen/models/response.py +15 -40
  89. package/generator/pygen/codegen/models/utils.py +2 -2
  90. package/generator/pygen/codegen/serializers/__init__.py +26 -42
  91. package/generator/pygen/codegen/serializers/builder_serializer.py +103 -100
  92. package/generator/pygen/codegen/serializers/client_serializer.py +22 -25
  93. package/generator/pygen/codegen/serializers/enum_serializer.py +2 -2
  94. package/generator/pygen/codegen/serializers/general_serializer.py +49 -61
  95. package/generator/pygen/codegen/serializers/import_serializer.py +6 -7
  96. package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -2
  97. package/generator/pygen/codegen/serializers/model_serializer.py +15 -17
  98. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  99. package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  100. package/generator/pygen/codegen/serializers/parameter_serializer.py +28 -18
  101. package/generator/pygen/codegen/serializers/patch_serializer.py +1 -2
  102. package/generator/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  103. package/generator/pygen/codegen/serializers/sample_serializer.py +9 -14
  104. package/generator/pygen/codegen/serializers/test_serializer.py +7 -7
  105. package/generator/pygen/codegen/serializers/utils.py +2 -2
  106. package/generator/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  107. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  108. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  109. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  110. package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
  111. package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  112. package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  113. package/generator/pygen/codegen/templates/patch.py.jinja2 +1 -1
  114. package/generator/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  115. package/generator/pygen/codegen/templates/utils.py.jinja2 +6 -6
  116. package/generator/pygen/preprocess/__init__.py +47 -30
  117. package/generator/pygen/preprocess/helpers.py +2 -2
  118. package/generator/pygen/utils.py +6 -6
  119. package/generator/pygen.egg-info/SOURCES.txt +0 -2
  120. package/package.json +2 -2
  121. package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
  122. package/autorest/multiapi/__init__.py +0 -185
  123. package/autorest/multiapi/models/__init__.py +0 -16
  124. package/autorest/multiapi/models/client.py +0 -68
  125. package/autorest/multiapi/models/code_model.py +0 -142
  126. package/autorest/multiapi/models/config.py +0 -24
  127. package/autorest/multiapi/models/constant_global_parameter.py +0 -11
  128. package/autorest/multiapi/models/global_parameter.py +0 -34
  129. package/autorest/multiapi/models/global_parameters.py +0 -53
  130. package/autorest/multiapi/models/imports.py +0 -181
  131. package/autorest/multiapi/models/mixin_operation.py +0 -38
  132. package/autorest/multiapi/models/operation_group.py +0 -29
  133. package/autorest/multiapi/models/operation_mixin_group.py +0 -89
  134. package/autorest/multiapi/serializers/__init__.py +0 -145
  135. package/autorest/multiapi/serializers/import_serializer.py +0 -181
  136. package/autorest/multiapi/templates/multiapi_config.py.jinja2 +0 -89
  137. package/autorest/multiapi/templates/multiapi_init.py.jinja2 +0 -22
  138. package/autorest/multiapi/templates/multiapi_models.py.jinja2 +0 -9
  139. package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +0 -39
  140. package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +0 -163
  141. package/autorest/multiapi/templates/multiapi_version.py.jinja2 +0 -8
  142. package/autorest/multiapi/utils.py +0 -51
  143. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +0 -216
  144. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +0 -167
  145. package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -216
  146. package/generator/pygen/codegen/templates/metadata.json.jinja2 +0 -167
@@ -7,7 +7,7 @@ import logging
7
7
  import json
8
8
  from collections import namedtuple
9
9
  import re
10
- from typing import List, Any, Union, Optional
10
+ from typing import Any, Optional, Union
11
11
  from pathlib import Path
12
12
  from packaging.version import parse as parse_version
13
13
  from jinja2 import PackageLoader, Environment, FileSystemLoader, StrictUndefined
@@ -28,7 +28,6 @@ from .model_init_serializer import ModelInitSerializer
28
28
  from .model_serializer import DpgModelSerializer, MsrestModelSerializer
29
29
  from .operations_init_serializer import OperationsInitSerializer
30
30
  from .operation_groups_serializer import OperationGroupsSerializer
31
- from .metadata_serializer import MetadataSerializer
32
31
  from .request_builders_serializer import RequestBuildersSerializer
33
32
  from .patch_serializer import PatchSerializer
34
33
  from .sample_serializer import SampleSerializer
@@ -99,7 +98,7 @@ class JinjaSerializer(ReaderAndWriter):
99
98
  return self.code_model.options["show-operations"] and bool(self.code_model.has_operations)
100
99
 
101
100
  @property
102
- def serialize_loop(self) -> List[AsyncInfo]:
101
+ def serialize_loop(self) -> list[AsyncInfo]:
103
102
  sync_loop = AsyncInfo(async_mode=False, async_path="")
104
103
  async_loop = AsyncInfo(async_mode=True, async_path="aio/")
105
104
  return [sync_loop, async_loop] if self.has_aio_folder else [sync_loop]
@@ -151,7 +150,7 @@ class JinjaSerializer(ReaderAndWriter):
151
150
  # write apiview-properties.json
152
151
  if self.code_model.options.get("emit-cross-language-definition-file"):
153
152
  self.write_file(
154
- generation_path / Path("apiview-properties.json"),
153
+ self._root_of_sdk / Path("apiview-properties.json"),
155
154
  general_serializer.serialize_cross_language_definition_file(),
156
155
  )
157
156
 
@@ -165,7 +164,7 @@ class JinjaSerializer(ReaderAndWriter):
165
164
  # add _metadata.json
166
165
  if self.code_model.metadata:
167
166
  self.write_file(
168
- Path("./_metadata.json"),
167
+ self._root_of_sdk / "_metadata.json",
169
168
  json.dumps(self.code_model.metadata, indent=2),
170
169
  )
171
170
  elif client_namespace_type.clients:
@@ -205,8 +204,6 @@ class JinjaSerializer(ReaderAndWriter):
205
204
  self._serialize_and_write_operations_folder(
206
205
  client_namespace_type.operation_groups, env=env, namespace=client_namespace
207
206
  )
208
- if self.code_model.options["multiapi"]:
209
- self._serialize_and_write_metadata(env=env, namespace=client_namespace)
210
207
 
211
208
  # if there are only operations under this namespace, we need to add general __init__.py into `aio` folder
212
209
  # to make sure all generated files could be packed into .zip/.whl/.tgz package
@@ -216,11 +213,17 @@ class JinjaSerializer(ReaderAndWriter):
216
213
  general_serializer.serialize_pkgutil_init_file(),
217
214
  )
218
215
 
219
- def _serialize_and_write_package_files(self) -> None:
216
+ # path where README.md is
217
+ @property
218
+ def _root_of_sdk(self) -> Path:
220
219
  root_of_sdk = Path(".")
221
220
  if self.code_model.options["no-namespace-folders"]:
222
221
  compensation = Path("../" * (self.code_model.namespace.count(".") + 1))
223
222
  root_of_sdk = root_of_sdk / compensation
223
+ return root_of_sdk
224
+
225
+ def _serialize_and_write_package_files(self) -> None:
226
+ root_of_sdk = self._root_of_sdk
224
227
  if self.code_model.options["package-mode"] in VALID_PACKAGE_MODE:
225
228
  env = Environment(
226
229
  loader=PackageLoader("pygen.codegen", "templates/packaging_templates"),
@@ -247,15 +250,15 @@ class JinjaSerializer(ReaderAndWriter):
247
250
  if not self.code_model.is_azure_flavor and template_name == "dev_requirements.txt.jinja2":
248
251
  continue
249
252
  file = template_name.replace(".jinja2", "")
250
- output_name = root_of_sdk / file
251
- if not self.read_file(output_name) or file in _REGENERATE_FILES:
253
+ output_file = root_of_sdk / file
254
+ if not self.read_file(output_file) or file in _REGENERATE_FILES:
252
255
  if self.keep_version_file and file == "setup.py" and not self.code_model.options["azure-arm"]:
253
256
  # don't regenerate setup.py file if the version file is more up to date for data-plane
254
257
  continue
255
- file_path = self.get_output_folder() / Path(output_name)
258
+ file_content = self.read_file(output_file) if file == "pyproject.toml" else ""
256
259
  self.write_file(
257
- output_name,
258
- serializer.serialize_package_file(template_name, file_path, **params),
260
+ output_file,
261
+ serializer.serialize_package_file(template_name, file_content, **params),
259
262
  )
260
263
 
261
264
  def _keep_patch_file(self, path_file: Path, env: Environment):
@@ -268,7 +271,7 @@ class JinjaSerializer(ReaderAndWriter):
268
271
  )
269
272
 
270
273
  def _serialize_and_write_models_folder(
271
- self, env: Environment, namespace: str, models: List[ModelType], enums: List[EnumType]
274
+ self, env: Environment, namespace: str, models: list[ModelType], enums: list[EnumType]
272
275
  ) -> None:
273
276
  # Write the models folder
274
277
  models_path = self.code_model.get_generation_dir(namespace) / "models"
@@ -311,7 +314,7 @@ class JinjaSerializer(ReaderAndWriter):
311
314
  self,
312
315
  env: Environment,
313
316
  rest_path: Path,
314
- request_builders: List[Union[RequestBuilder, OverloadedRequestBuilder]],
317
+ request_builders: list[Union[RequestBuilder, OverloadedRequestBuilder]],
315
318
  ) -> None:
316
319
  group_name = request_builders[0].group_name
317
320
  output_path = rest_path / Path(group_name) if group_name else rest_path
@@ -336,7 +339,7 @@ class JinjaSerializer(ReaderAndWriter):
336
339
  )
337
340
 
338
341
  def _serialize_and_write_operations_folder(
339
- self, operation_groups: List[OperationGroup], env: Environment, namespace: str
342
+ self, operation_groups: list[OperationGroup], env: Environment, namespace: str
340
343
  ) -> None:
341
344
  operations_folder_name = self.code_model.operations_folder_name(namespace)
342
345
  generation_path = self.code_model.get_generation_dir(namespace)
@@ -405,7 +408,7 @@ class JinjaSerializer(ReaderAndWriter):
405
408
  def _serialize_client_and_config_files(
406
409
  self,
407
410
  namespace: str,
408
- clients: List[Client],
411
+ clients: list[Client],
409
412
  env: Environment,
410
413
  ) -> None:
411
414
  generation_path = self.code_model.get_generation_dir(namespace)
@@ -482,11 +485,7 @@ class JinjaSerializer(ReaderAndWriter):
482
485
 
483
486
  # write the empty py.typed file
484
487
  pytyped_value = "# Marker file for PEP 561."
485
- # TODO: remove this when we remove legacy multiapi generation
486
- if self.code_model.options["multiapi"]:
487
- self.write_file(self.code_model.get_generation_dir(namespace) / Path("py.typed"), pytyped_value)
488
- else:
489
- self.write_file(root_dir / Path("py.typed"), pytyped_value)
488
+ self.write_file(root_dir / Path("py.typed"), pytyped_value)
490
489
 
491
490
  # write _validation.py
492
491
  if any(og for client in self.code_model.clients for og in client.operation_groups if og.need_validation):
@@ -502,40 +501,29 @@ class JinjaSerializer(ReaderAndWriter):
502
501
  TypesSerializer(code_model=self.code_model, env=env).serialize(),
503
502
  )
504
503
 
505
- def _serialize_and_write_metadata(self, env: Environment, namespace: str) -> None:
506
- metadata_serializer = MetadataSerializer(self.code_model, env)
507
- self.write_file(
508
- self.code_model.get_generation_dir(namespace) / Path("_metadata.json"), metadata_serializer.serialize()
509
- )
510
-
511
504
  # pylint: disable=line-too-long
512
505
  @property
513
506
  def sample_additional_folder(self) -> Path:
514
507
  # For special package, we need to additional folder when generate samples.
515
- # For example, azure-mgmt-resource is combined by multiple modules, and each module is multiapi package.
508
+ # For example, azure-mgmt-resource is combined by multiple modules, and each module is a package.
516
509
  # one of namespace is "azure.mgmt.resource.resources.v2020_01_01", then additional folder is "resources"
517
510
  # so that we could avoid conflict when generate samples.
518
511
  # python config: https://github.com/Azure/azure-rest-api-specs/blob/main/specification/resources/resource-manager/readme.python.md
519
512
  # generated SDK: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/resources/azure-mgmt-resource/generated_samples
520
- namespace_config = get_namespace_config(self.code_model.namespace, self.code_model.options["multiapi"])
513
+ namespace_config = get_namespace_config(self.code_model.namespace)
521
514
  num_of_namespace = namespace_config.count(".") + 1
522
515
  num_of_package_namespace = (
523
- get_namespace_from_package_name(self.code_model.options.get("namespace", "")).count(".") + 1
516
+ get_namespace_from_package_name(self.code_model.options.get("package-name", "")).count(".") + 1
524
517
  )
525
518
  if num_of_namespace > num_of_package_namespace:
526
519
  return Path("/".join(namespace_config.split(".")[num_of_package_namespace:]))
527
520
  return Path("")
528
521
 
529
522
  def _serialize_and_write_sample(self, env: Environment):
530
- out_path = Path("./generated_samples")
523
+ out_path = self._root_of_sdk / "generated_samples"
531
524
  for client in self.code_model.clients:
532
525
  for op_group in client.operation_groups:
533
526
  for operation in op_group.operations:
534
- if (
535
- self.code_model.options["multiapi"]
536
- and operation.api_versions[0] != self.code_model.options["default-api-version"]
537
- ):
538
- continue
539
527
  samples = operation.yaml_data.get("samples")
540
528
  if not samples or operation.name.startswith("_"):
541
529
  continue
@@ -561,7 +549,7 @@ class JinjaSerializer(ReaderAndWriter):
561
549
 
562
550
  def _serialize_and_write_test(self, env: Environment):
563
551
  self.code_model.for_test = True
564
- out_path = Path("./generated_tests")
552
+ out_path = self._root_of_sdk / "generated_tests"
565
553
  general_serializer = TestGeneralSerializer(code_model=self.code_model, env=env)
566
554
  self.write_file(out_path / "conftest.py", general_serializer.serialize_conftest())
567
555
  if not self.code_model.options["azure-arm"]:
@@ -575,10 +563,6 @@ class JinjaSerializer(ReaderAndWriter):
575
563
 
576
564
  for client in self.code_model.clients:
577
565
  for og in client.operation_groups:
578
- if self.code_model.options["multiapi"] and any(
579
- o.api_versions[0] != self.code_model.options["default-api-version"] for o in og.operations
580
- ):
581
- continue
582
566
  test_serializer = TestSerializer(self.code_model, env, client=client, operation_group=og)
583
567
  for async_mode in (True, False):
584
568
  try: