@autorest/python 5.11.1 → 5.12.2

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 (52) hide show
  1. package/ChangeLog.md +68 -0
  2. package/autorest/codegen/__init__.py +5 -5
  3. package/autorest/codegen/models/__init__.py +3 -23
  4. package/autorest/codegen/models/base_builder.py +2 -5
  5. package/autorest/codegen/models/client.py +2 -2
  6. package/autorest/codegen/models/code_model.py +5 -1
  7. package/autorest/codegen/models/operation_group.py +5 -3
  8. package/autorest/codegen/models/parameter.py +4 -3
  9. package/autorest/codegen/models/parameter_list.py +32 -27
  10. package/autorest/codegen/models/request_builder.py +5 -1
  11. package/autorest/codegen/models/request_builder_parameter.py +4 -3
  12. package/autorest/codegen/models/request_builder_parameter_list.py +18 -11
  13. package/autorest/codegen/models/rest.py +3 -2
  14. package/autorest/codegen/models/utils.py +8 -0
  15. package/autorest/codegen/serializers/__init__.py +48 -48
  16. package/autorest/codegen/serializers/builder_serializer.py +150 -146
  17. package/autorest/codegen/serializers/client_serializer.py +37 -9
  18. package/autorest/codegen/serializers/general_serializer.py +7 -5
  19. package/autorest/codegen/serializers/import_serializer.py +6 -6
  20. package/autorest/codegen/serializers/metadata_serializer.py +2 -2
  21. package/autorest/codegen/serializers/model_base_serializer.py +3 -3
  22. package/autorest/codegen/serializers/model_generic_serializer.py +1 -1
  23. package/autorest/codegen/serializers/model_python3_serializer.py +1 -1
  24. package/autorest/codegen/serializers/{operation_group_serializer.py → operation_groups_serializer.py} +27 -29
  25. package/autorest/codegen/serializers/operations_init_serializer.py +34 -2
  26. package/autorest/codegen/serializers/patch_serializer.py +15 -0
  27. package/autorest/codegen/serializers/rest_serializer.py +9 -4
  28. package/autorest/codegen/serializers/utils.py +2 -2
  29. package/autorest/codegen/templates/config.py.jinja2 +1 -11
  30. package/autorest/codegen/templates/init.py.jinja2 +4 -5
  31. package/autorest/codegen/templates/metadata.json.jinja2 +2 -2
  32. package/autorest/codegen/templates/model_init.py.jinja2 +1 -1
  33. package/autorest/codegen/templates/{operations_class.py.jinja2 → operation_group.py.jinja2} +2 -0
  34. package/autorest/codegen/templates/operation_groups_container.py.jinja2 +26 -0
  35. package/autorest/codegen/templates/operation_tools.jinja2 +7 -0
  36. package/autorest/codegen/templates/operations_folder_init.py.jinja2 +13 -0
  37. package/autorest/codegen/templates/patch.py.jinja2 +31 -0
  38. package/autorest/codegen/templates/request_builder.py.jinja2 +7 -2
  39. package/autorest/codegen/templates/request_builders.py.jinja2 +3 -3
  40. package/autorest/codegen/templates/setup.py.jinja2 +1 -1
  41. package/autorest/multiapi/serializers/__init__.py +3 -3
  42. package/autorest/multiapi/serializers/import_serializer.py +5 -5
  43. package/autorest/namer/name_converter.py +3 -1
  44. package/install.py +1 -0
  45. package/package.json +4 -3
  46. package/requirements.txt +14 -0
  47. package/setup.py +1 -0
  48. package/autorest/codegen/templates/operations_class_mixin.py.jinja2 +0 -16
  49. package/autorest/codegen/templates/operations_container.py.jinja2 +0 -39
  50. package/autorest/codegen/templates/operations_container_init.py.jinja2 +0 -24
  51. package/autorest/codegen/templates/operations_container_mixin.py.jinja2 +0 -20
  52. package/autorest/codegen/templates/operations_init.py.jinja2 +0 -26
@@ -3,29 +3,32 @@
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
6
+ from typing import List, Optional
7
7
  from pathlib import Path
8
8
  from jinja2 import PackageLoader, Environment
9
9
  from autorest.codegen.models.operation_group import OperationGroup
10
10
 
11
11
  from ...jsonrpc import AutorestAPI
12
- from ..models import CodeModel
13
- from ..models.request_builder import RequestBuilder
12
+ from ..models import (
13
+ CodeModel,
14
+ OperationGroup,
15
+ RequestBuilder,
16
+ )
14
17
  from .enum_serializer import EnumSerializer
15
18
  from .general_serializer import GeneralSerializer
16
19
  from .model_generic_serializer import ModelGenericSerializer
17
20
  from .model_init_serializer import ModelInitSerializer
18
21
  from .model_python3_serializer import ModelPython3Serializer
19
22
  from .operations_init_serializer import OperationsInitSerializer
20
- from .operation_group_serializer import OperationGroupSerializer
23
+ from .operation_groups_serializer import OperationGroupsSerializer
21
24
  from .metadata_serializer import MetadataSerializer
22
25
  from .rest_serializer import RestPython3Serializer, RestGenericSerializer, RestSerializer
26
+ from .patch_serializer import PatchSerializer
23
27
 
24
28
  __all__ = [
25
29
  "JinjaSerializer",
26
30
  ]
27
31
 
28
-
29
32
  class JinjaSerializer:
30
33
  def __init__(self, autorestapi: AutorestAPI) -> None:
31
34
  self._autorestapi = autorestapi
@@ -45,8 +48,8 @@ class JinjaSerializer:
45
48
  )
46
49
 
47
50
  # if there was a patch file before, we keep it
48
- self._keep_patch_file(namespace_path / Path("_patch.py"))
49
- self._keep_patch_file(namespace_path / Path("aio") / Path("_patch.py"))
51
+ self._keep_patch_file(namespace_path / Path("_patch.py"), env)
52
+ self._keep_patch_file(namespace_path / Path("aio") / Path("_patch.py"), env)
50
53
 
51
54
  self._serialize_and_write_top_level_folder(code_model=code_model, env=env, namespace_path=namespace_path)
52
55
 
@@ -70,16 +73,18 @@ class JinjaSerializer:
70
73
 
71
74
 
72
75
 
73
- def _keep_patch_file(self, path_file: Path):
76
+ def _keep_patch_file(self, path_file: Path, env: Environment):
74
77
  if self._autorestapi.read_file(path_file):
75
78
  self._autorestapi.write_file(path_file, self._autorestapi.read_file(path_file))
79
+ else:
80
+ self._autorestapi.write_file(path_file, PatchSerializer(env=env).serialize())
76
81
 
77
82
 
78
83
  def _serialize_and_write_models_folder(self, code_model: CodeModel, env: Environment, namespace_path: Path) -> None:
79
84
  # Write the models folder
80
85
  models_path = namespace_path / Path("models")
81
86
  if code_model.schemas:
82
- if not code_model.options['python_3_only']:
87
+ if not code_model.options['python3_only']:
83
88
  self._autorestapi.write_file(
84
89
  models_path / Path("_models.py"), ModelGenericSerializer(code_model=code_model, env=env).serialize()
85
90
  )
@@ -144,36 +149,49 @@ class JinjaSerializer:
144
149
  ).serialize_init()
145
150
  )
146
151
 
147
- def _serialize_and_write_operations_folder_process(
152
+ def _serialize_and_write_operations_file(
148
153
  self,
149
154
  code_model: CodeModel,
150
155
  env: Environment,
151
156
  namespace_path: Path,
152
- operation_groups: List[OperationGroup],
153
- filename: str
157
+ operation_group: Optional[OperationGroup] = None
154
158
  ) -> None:
155
- # write sync operation group and operation files
156
- if not code_model.options['python_3_only'] and not code_model.options["add_python_3_operation_files"]:
157
- operation_group_serializer = OperationGroupSerializer(
159
+ filename = operation_group.filename if operation_group else "_operations"
160
+ # write first sync file
161
+ operation_group_serializer = OperationGroupsSerializer(
162
+ code_model=code_model,
163
+ env=env,
164
+ async_mode=False,
165
+ is_python3_file=code_model.options['python3_only'],
166
+ operation_group=operation_group
167
+ )
168
+ self._autorestapi.write_file(
169
+ namespace_path / Path(code_model.operations_folder_name) / Path(f"{filename}.py"),
170
+ operation_group_serializer.serialize(),
171
+ )
172
+
173
+ if not code_model.options['python3_only'] and code_model.options["add_python3_operation_files"]:
174
+ # write typed second file if not python 3 only
175
+ operation_group_serializer = OperationGroupsSerializer(
158
176
  code_model=code_model,
159
177
  env=env,
160
- operation_groups=operation_groups,
161
178
  async_mode=False,
162
- is_python_3_file=False,
179
+ is_python3_file=True,
180
+
163
181
  )
164
182
  self._autorestapi.write_file(
165
- namespace_path / Path(code_model.operations_folder_name) / Path(f"{filename}.py"),
183
+ namespace_path / Path(code_model.operations_folder_name) / Path(f"{filename}_py3.py"),
166
184
  operation_group_serializer.serialize(),
167
185
  )
168
186
 
169
187
  if not code_model.options["no_async"]:
170
188
  # write async operation group and operation files
171
- operation_group_async_serializer = OperationGroupSerializer(
189
+ operation_group_async_serializer = OperationGroupsSerializer(
172
190
  code_model=code_model,
173
191
  env=env,
174
- operation_groups=operation_groups,
175
192
  async_mode=True,
176
- is_python_3_file=True,
193
+ is_python3_file=True,
194
+ operation_group=operation_group
177
195
  )
178
196
  self._autorestapi.write_file(
179
197
  (
@@ -185,20 +203,6 @@ class JinjaSerializer:
185
203
  operation_group_async_serializer.serialize(),
186
204
  )
187
205
 
188
- if code_model.options["add_python_3_operation_files"]:
189
- # write typed sync operation files
190
- operation_group_serializer = OperationGroupSerializer(
191
- code_model=code_model,
192
- env=env,
193
- operation_groups=operation_groups,
194
- async_mode=False,
195
- is_python_3_file=True,
196
- )
197
- self._autorestapi.write_file(
198
- namespace_path / Path(code_model.operations_folder_name) / Path(f"{filename}_py3.py"),
199
- operation_group_serializer.serialize(),
200
- )
201
-
202
206
  def _serialize_and_write_operations_folder(
203
207
  self, code_model: CodeModel, env: Environment, namespace_path: Path
204
208
  ) -> None:
@@ -217,24 +221,20 @@ class JinjaSerializer:
217
221
  operations_async_init_serializer.serialize(),
218
222
  )
219
223
 
220
- if not code_model.options["combine_operation_files"]:
224
+ if code_model.options["combine_operation_files"]:
225
+ self._serialize_and_write_operations_file(
226
+ code_model=code_model,
227
+ env=env,
228
+ namespace_path=namespace_path,
229
+ )
230
+ else:
221
231
  for operation_group in code_model.operation_groups:
222
- self._serialize_and_write_operations_folder_process(
232
+ self._serialize_and_write_operations_file(
223
233
  code_model=code_model,
224
234
  env=env,
225
235
  namespace_path=namespace_path,
226
- operation_groups=[operation_group],
227
- filename=operation_group.filename
236
+ operation_group=operation_group,
228
237
  )
229
- else:
230
- self._serialize_and_write_operations_folder_process(
231
- code_model=code_model,
232
- env=env,
233
- namespace_path=namespace_path,
234
- operation_groups=code_model.operation_groups,
235
- filename="_operations"
236
- )
237
-
238
238
 
239
239
  def _serialize_and_write_version_file(
240
240
  self, code_model: CodeModel, namespace_path: Path, general_serializer: GeneralSerializer