@autorest/python 5.16.0 → 5.17.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 (92) hide show
  1. package/ChangeLog.md +43 -3
  2. package/README.md +30 -4
  3. package/autorest/__init__.py +1 -1
  4. package/autorest/codegen/__init__.py +48 -209
  5. package/autorest/codegen/models/__init__.py +116 -83
  6. package/autorest/codegen/models/base_builder.py +49 -88
  7. package/autorest/codegen/models/base_model.py +1 -1
  8. package/autorest/codegen/models/{base_schema.py → base_type.py} +56 -40
  9. package/autorest/codegen/models/client.py +157 -48
  10. package/autorest/codegen/models/code_model.py +108 -254
  11. package/autorest/codegen/models/combined_type.py +107 -0
  12. package/autorest/codegen/models/{constant_schema.py → constant_type.py} +49 -40
  13. package/autorest/codegen/models/credential_types.py +224 -0
  14. package/autorest/codegen/models/{dictionary_schema.py → dictionary_type.py} +41 -31
  15. package/autorest/codegen/models/enum_type.py +195 -0
  16. package/autorest/codegen/models/imports.py +23 -0
  17. package/autorest/codegen/models/list_type.py +134 -0
  18. package/autorest/codegen/models/lro_operation.py +77 -156
  19. package/autorest/codegen/models/lro_paging_operation.py +28 -11
  20. package/autorest/codegen/models/model_type.py +239 -0
  21. package/autorest/codegen/models/operation.py +303 -269
  22. package/autorest/codegen/models/operation_group.py +48 -89
  23. package/autorest/codegen/models/paging_operation.py +80 -123
  24. package/autorest/codegen/models/parameter.py +289 -396
  25. package/autorest/codegen/models/parameter_list.py +348 -360
  26. package/autorest/codegen/models/primitive_types.py +544 -0
  27. package/autorest/codegen/models/property.py +109 -139
  28. package/autorest/codegen/models/request_builder.py +105 -88
  29. package/autorest/codegen/models/request_builder_parameter.py +112 -100
  30. package/autorest/codegen/models/response.py +325 -0
  31. package/autorest/codegen/models/utils.py +12 -19
  32. package/autorest/codegen/serializers/__init__.py +46 -37
  33. package/autorest/codegen/serializers/builder_serializer.py +604 -1146
  34. package/autorest/codegen/serializers/client_serializer.py +83 -88
  35. package/autorest/codegen/serializers/general_serializer.py +5 -64
  36. package/autorest/codegen/serializers/import_serializer.py +7 -4
  37. package/autorest/codegen/serializers/metadata_serializer.py +15 -104
  38. package/autorest/codegen/serializers/model_base_serializer.py +40 -32
  39. package/autorest/codegen/serializers/model_generic_serializer.py +8 -6
  40. package/autorest/codegen/serializers/model_init_serializer.py +2 -4
  41. package/autorest/codegen/serializers/model_python3_serializer.py +22 -16
  42. package/autorest/codegen/serializers/operation_groups_serializer.py +4 -13
  43. package/autorest/codegen/serializers/parameter_serializer.py +174 -0
  44. package/autorest/codegen/serializers/request_builders_serializer.py +12 -29
  45. package/autorest/codegen/serializers/utils.py +0 -142
  46. package/autorest/codegen/templates/MANIFEST.in.jinja2 +1 -0
  47. package/autorest/codegen/templates/{service_client.py.jinja2 → client.py.jinja2} +7 -7
  48. package/autorest/codegen/templates/config.py.jinja2 +13 -13
  49. package/autorest/codegen/templates/enum.py.jinja2 +4 -4
  50. package/autorest/codegen/templates/enum_container.py.jinja2 +1 -1
  51. package/autorest/codegen/templates/init.py.jinja2 +2 -2
  52. package/autorest/codegen/templates/lro_operation.py.jinja2 +4 -1
  53. package/autorest/codegen/templates/lro_paging_operation.py.jinja2 +4 -1
  54. package/autorest/codegen/templates/metadata.json.jinja2 +33 -33
  55. package/autorest/codegen/templates/model.py.jinja2 +23 -24
  56. package/autorest/codegen/templates/model_container.py.jinja2 +2 -1
  57. package/autorest/codegen/templates/model_init.py.jinja2 +3 -5
  58. package/autorest/codegen/templates/operation.py.jinja2 +6 -8
  59. package/autorest/codegen/templates/operation_group.py.jinja2 +7 -7
  60. package/autorest/codegen/templates/operation_groups_container.py.jinja2 +1 -1
  61. package/autorest/codegen/templates/operation_tools.jinja2 +8 -2
  62. package/autorest/codegen/templates/paging_operation.py.jinja2 +2 -2
  63. package/autorest/codegen/templates/request_builder.py.jinja2 +13 -11
  64. package/autorest/codegen/templates/setup.py.jinja2 +9 -3
  65. package/autorest/codegen/templates/vendor.py.jinja2 +1 -1
  66. package/autorest/jsonrpc/server.py +15 -3
  67. package/autorest/m4reformatter/__init__.py +1108 -0
  68. package/autorest/multiapi/models/code_model.py +1 -1
  69. package/autorest/multiapi/serializers/__init__.py +4 -4
  70. package/autorest/multiapi/templates/multiapi_config.py.jinja2 +3 -3
  71. package/autorest/multiapi/templates/multiapi_init.py.jinja2 +2 -2
  72. package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +3 -3
  73. package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +9 -9
  74. package/autorest/postprocess/__init__.py +202 -0
  75. package/autorest/postprocess/get_all.py +19 -0
  76. package/autorest/postprocess/venvtools.py +73 -0
  77. package/autorest/preprocess/__init__.py +209 -0
  78. package/autorest/preprocess/helpers.py +54 -0
  79. package/autorest/{namer → preprocess}/python_mappings.py +21 -16
  80. package/package.json +2 -2
  81. package/autorest/codegen/models/credential_model.py +0 -55
  82. package/autorest/codegen/models/credential_schema.py +0 -95
  83. package/autorest/codegen/models/credential_schema_policy.py +0 -73
  84. package/autorest/codegen/models/enum_schema.py +0 -225
  85. package/autorest/codegen/models/list_schema.py +0 -135
  86. package/autorest/codegen/models/object_schema.py +0 -303
  87. package/autorest/codegen/models/primitive_schemas.py +0 -495
  88. package/autorest/codegen/models/request_builder_parameter_list.py +0 -249
  89. package/autorest/codegen/models/schema_request.py +0 -55
  90. package/autorest/codegen/models/schema_response.py +0 -141
  91. package/autorest/namer/__init__.py +0 -23
  92. package/autorest/namer/name_converter.py +0 -509
@@ -3,13 +3,15 @@
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, Optional, Any
6
+ from typing import Dict, List, Optional, Any, Union
7
7
  from pathlib import Path
8
8
  from jinja2 import PackageLoader, Environment, FileSystemLoader, StrictUndefined
9
9
  from autorest.codegen.models.operation_group import OperationGroup
10
+ from autorest.codegen.models.request_builder import OverloadedRequestBuilder
10
11
 
11
12
  from ...jsonrpc import AutorestAPI
12
- from ..models import CodeModel, OperationGroup, RequestBuilder, TokenCredentialSchema
13
+ from ..models import CodeModel, OperationGroup, RequestBuilder
14
+ from ..models import TokenCredentialType
13
15
  from .enum_serializer import EnumSerializer
14
16
  from .general_serializer import GeneralSerializer
15
17
  from .model_generic_serializer import ModelGenericSerializer
@@ -18,11 +20,7 @@ from .model_python3_serializer import ModelPython3Serializer
18
20
  from .operations_init_serializer import OperationsInitSerializer
19
21
  from .operation_groups_serializer import OperationGroupsSerializer
20
22
  from .metadata_serializer import MetadataSerializer
21
- from .request_builders_serializer import (
22
- RequestBuildersPython3Serializer,
23
- RequestBuildersGenericSerializer,
24
- RequestBuildersSerializer,
25
- )
23
+ from .request_builders_serializer import RequestBuildersSerializer
26
24
  from .patch_serializer import PatchSerializer
27
25
 
28
26
  __all__ = [
@@ -73,7 +71,7 @@ class JinjaSerializer:
73
71
  self._keep_patch_file(namespace_path / Path("aio") / Path("_patch.py"), env)
74
72
 
75
73
  if self.code_model.options["models_mode"] and (
76
- self.code_model.schemas or self.code_model.enums
74
+ self.code_model.model_types or self.code_model.enums
77
75
  ):
78
76
  self._keep_patch_file(
79
77
  namespace_path / Path("models") / Path("_patch.py"), env
@@ -125,7 +123,7 @@ class JinjaSerializer:
125
123
  )
126
124
 
127
125
  if self.code_model.options["models_mode"] and (
128
- self.code_model.schemas or self.code_model.enums
126
+ self.code_model.model_types or self.code_model.enums
129
127
  ):
130
128
  self._serialize_and_write_models_folder(
131
129
  env=env, namespace_path=namespace_path
@@ -155,14 +153,10 @@ class JinjaSerializer:
155
153
  self._autorestapi.write_file(output_name, render_result)
156
154
 
157
155
  def _prepare_params() -> Dict[Any, Any]:
158
- package_parts = self.code_model.options["package_name"].split("-")[:-1]
159
- try:
160
- token_cred = isinstance(
161
- self.code_model.credential_model.credential_schema_policy.credential,
162
- TokenCredentialSchema,
163
- )
164
- except ValueError:
165
- token_cred = False
156
+ package_parts = package_name.split("-")[:-1]
157
+ token_cred = isinstance(
158
+ getattr(self.code_model.credential, "type", None), TokenCredentialType
159
+ )
166
160
  version = self.code_model.options["package_version"]
167
161
  if any(x in version for x in ["a", "b", "rc"]) or version[0] == "0":
168
162
  dev_status = "4 - Beta"
@@ -178,12 +172,19 @@ class JinjaSerializer:
178
172
  for i in range(len(package_parts))
179
173
  ],
180
174
  "dev_status": dev_status,
175
+ "client_name": self.code_model.client.name,
176
+ "namespace": self.code_model.namespace,
177
+ "code_model": self.code_model,
181
178
  }
182
179
  params.update(self.code_model.options)
183
180
  params.update(self.code_model.package_dependency)
184
181
  return params
185
182
 
186
- count = self.code_model.options["package_name"].count("-") + 1
183
+ package_name = (
184
+ self.code_model.options["package_name"]
185
+ or self.code_model.client.name.lower()
186
+ )
187
+ count = package_name.count("-") + 1
187
188
  for _ in range(count):
188
189
  out_path = out_path / Path("..")
189
190
 
@@ -222,7 +223,7 @@ class JinjaSerializer:
222
223
  ) -> None:
223
224
  # Write the models folder
224
225
  models_path = namespace_path / Path("models")
225
- if self.code_model.schemas:
226
+ if self.code_model.model_types:
226
227
  if not self.code_model.options["python3_only"]:
227
228
  self._autorestapi.write_file(
228
229
  models_path
@@ -254,45 +255,50 @@ class JinjaSerializer:
254
255
  self, env: Environment, namespace_path: Path
255
256
  ) -> None:
256
257
  rest_path = namespace_path / Path(self.code_model.rest_layer_name)
257
- operation_group_names = {
258
- rb.operation_group_name for rb in self.code_model.request_builders
259
- }
258
+ group_names = {rb.group_name for rb in self.code_model.request_builders}
260
259
 
261
- for operation_group_name in operation_group_names:
260
+ for group_name in group_names:
262
261
  request_builders = [
263
262
  r
264
263
  for r in self.code_model.request_builders
265
- if r.operation_group_name == operation_group_name
264
+ if r.group_name == group_name
266
265
  ]
267
266
  self._serialize_and_write_single_rest_layer(
268
267
  env, rest_path, request_builders
269
268
  )
270
- if not "" in operation_group_names:
269
+ if not "" in group_names:
271
270
  self._autorestapi.write_file(
272
271
  rest_path / Path("__init__.py"),
273
272
  self.code_model.options["license_header"],
274
273
  )
275
274
 
276
275
  def _serialize_and_write_single_rest_layer(
277
- self, env: Environment, rest_path: Path, request_builders: List[RequestBuilder]
276
+ self,
277
+ env: Environment,
278
+ rest_path: Path,
279
+ request_builders: List[Union[RequestBuilder, OverloadedRequestBuilder]],
278
280
  ) -> None:
279
- builder_group_name = request_builders[0].builder_group_name
280
- output_path = (
281
- rest_path / Path(builder_group_name) if builder_group_name else rest_path
282
- )
281
+ group_name = request_builders[0].group_name
282
+ output_path = rest_path / Path(group_name) if group_name else rest_path
283
283
  # write generic request builders file
284
284
  self._autorestapi.write_file(
285
285
  output_path / Path("_request_builders.py"),
286
- RequestBuildersGenericSerializer(
287
- code_model=self.code_model, env=env, request_builders=request_builders
286
+ RequestBuildersSerializer(
287
+ code_model=self.code_model,
288
+ env=env,
289
+ request_builders=request_builders,
290
+ is_python3_file=False,
288
291
  ).serialize_request_builders(),
289
292
  )
290
293
 
291
294
  # write python3 request builders file
292
295
  self._autorestapi.write_file(
293
296
  output_path / Path("_request_builders_py3.py"),
294
- RequestBuildersPython3Serializer(
295
- code_model=self.code_model, env=env, request_builders=request_builders
297
+ RequestBuildersSerializer(
298
+ code_model=self.code_model,
299
+ env=env,
300
+ request_builders=request_builders,
301
+ is_python3_file=True,
296
302
  ).serialize_request_builders(),
297
303
  )
298
304
 
@@ -300,7 +306,10 @@ class JinjaSerializer:
300
306
  self._autorestapi.write_file(
301
307
  output_path / Path("__init__.py"),
302
308
  RequestBuildersSerializer(
303
- code_model=self.code_model, env=env, request_builders=request_builders
309
+ code_model=self.code_model,
310
+ env=env,
311
+ request_builders=request_builders,
312
+ is_python3_file=True,
304
313
  ).serialize_init(),
305
314
  )
306
315
 
@@ -451,7 +460,7 @@ class JinjaSerializer:
451
460
  # Write the service client
452
461
  if self.code_model.request_builders:
453
462
  self._autorestapi.write_file(
454
- namespace_path / Path(f"{self.code_model.service_client.filename}.py"),
463
+ namespace_path / Path(f"{self.code_model.client.filename}.py"),
455
464
  general_serializer.serialize_service_client_file(),
456
465
  )
457
466
 
@@ -498,7 +507,7 @@ class JinjaSerializer:
498
507
  # Write the service client
499
508
  if self.code_model.request_builders:
500
509
  self._autorestapi.write_file(
501
- aio_path / Path(f"{self.code_model.service_client.filename}.py"),
510
+ aio_path / Path(f"{self.code_model.client.filename}.py"),
502
511
  aio_general_serializer.serialize_service_client_file(),
503
512
  )
504
513