@autorest/python 5.15.0 → 5.18.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 (118) hide show
  1. package/ChangeLog.md +98 -4
  2. package/README.md +30 -4
  3. package/autorest/__init__.py +2 -3
  4. package/autorest/black/__init__.py +12 -5
  5. package/autorest/codegen/__init__.py +122 -211
  6. package/autorest/codegen/models/__init__.py +122 -78
  7. package/autorest/codegen/models/base_builder.py +70 -72
  8. package/autorest/codegen/models/base_model.py +7 -5
  9. package/autorest/codegen/models/{base_schema.py → base_type.py} +68 -45
  10. package/autorest/codegen/models/client.py +193 -40
  11. package/autorest/codegen/models/code_model.py +145 -245
  12. package/autorest/codegen/models/combined_type.py +107 -0
  13. package/autorest/codegen/models/constant_type.py +122 -0
  14. package/autorest/codegen/models/credential_types.py +224 -0
  15. package/autorest/codegen/models/dictionary_type.py +131 -0
  16. package/autorest/codegen/models/enum_type.py +195 -0
  17. package/autorest/codegen/models/imports.py +93 -41
  18. package/autorest/codegen/models/list_type.py +149 -0
  19. package/autorest/codegen/models/lro_operation.py +90 -133
  20. package/autorest/codegen/models/lro_paging_operation.py +28 -12
  21. package/autorest/codegen/models/model_type.py +262 -0
  22. package/autorest/codegen/models/operation.py +412 -259
  23. package/autorest/codegen/models/operation_group.py +80 -91
  24. package/autorest/codegen/models/paging_operation.py +101 -117
  25. package/autorest/codegen/models/parameter.py +302 -341
  26. package/autorest/codegen/models/parameter_list.py +373 -357
  27. package/autorest/codegen/models/primitive_types.py +544 -0
  28. package/autorest/codegen/models/property.py +136 -134
  29. package/autorest/codegen/models/request_builder.py +138 -86
  30. package/autorest/codegen/models/request_builder_parameter.py +122 -86
  31. package/autorest/codegen/models/response.py +325 -0
  32. package/autorest/codegen/models/utils.py +13 -17
  33. package/autorest/codegen/serializers/__init__.py +212 -112
  34. package/autorest/codegen/serializers/builder_serializer.py +931 -1040
  35. package/autorest/codegen/serializers/client_serializer.py +140 -84
  36. package/autorest/codegen/serializers/general_serializer.py +26 -50
  37. package/autorest/codegen/serializers/import_serializer.py +96 -31
  38. package/autorest/codegen/serializers/metadata_serializer.py +39 -79
  39. package/autorest/codegen/serializers/model_base_serializer.py +62 -34
  40. package/autorest/codegen/serializers/model_generic_serializer.py +9 -10
  41. package/autorest/codegen/serializers/model_init_serializer.py +4 -2
  42. package/autorest/codegen/serializers/model_python3_serializer.py +29 -22
  43. package/autorest/codegen/serializers/operation_groups_serializer.py +21 -19
  44. package/autorest/codegen/serializers/operations_init_serializer.py +23 -11
  45. package/autorest/codegen/serializers/parameter_serializer.py +174 -0
  46. package/autorest/codegen/serializers/patch_serializer.py +4 -1
  47. package/autorest/codegen/serializers/request_builders_serializer.py +57 -0
  48. package/autorest/codegen/serializers/utils.py +0 -126
  49. package/autorest/codegen/templates/MANIFEST.in.jinja2 +1 -0
  50. package/autorest/codegen/templates/{service_client.py.jinja2 → client.py.jinja2} +7 -7
  51. package/autorest/codegen/templates/config.py.jinja2 +13 -13
  52. package/autorest/codegen/templates/enum.py.jinja2 +4 -4
  53. package/autorest/codegen/templates/enum_container.py.jinja2 +1 -1
  54. package/autorest/codegen/templates/init.py.jinja2 +3 -3
  55. package/autorest/codegen/templates/lro_operation.py.jinja2 +6 -5
  56. package/autorest/codegen/templates/lro_paging_operation.py.jinja2 +6 -5
  57. package/autorest/codegen/templates/metadata.json.jinja2 +36 -35
  58. package/autorest/codegen/templates/model.py.jinja2 +23 -24
  59. package/autorest/codegen/templates/model_container.py.jinja2 +2 -1
  60. package/autorest/codegen/templates/model_init.py.jinja2 +3 -5
  61. package/autorest/codegen/templates/operation.py.jinja2 +10 -14
  62. package/autorest/codegen/templates/operation_group.py.jinja2 +9 -15
  63. package/autorest/codegen/templates/operation_groups_container.py.jinja2 +1 -1
  64. package/autorest/codegen/templates/operation_tools.jinja2 +8 -2
  65. package/autorest/codegen/templates/paging_operation.py.jinja2 +7 -8
  66. package/autorest/codegen/templates/request_builder.py.jinja2 +19 -10
  67. package/autorest/codegen/templates/setup.py.jinja2 +9 -3
  68. package/autorest/codegen/templates/vendor.py.jinja2 +1 -1
  69. package/autorest/jsonrpc/__init__.py +7 -12
  70. package/autorest/jsonrpc/localapi.py +4 -3
  71. package/autorest/jsonrpc/server.py +28 -9
  72. package/autorest/jsonrpc/stdstream.py +13 -6
  73. package/autorest/m2r/__init__.py +5 -8
  74. package/autorest/m4reformatter/__init__.py +1126 -0
  75. package/autorest/multiapi/__init__.py +24 -14
  76. package/autorest/multiapi/models/client.py +21 -11
  77. package/autorest/multiapi/models/code_model.py +23 -10
  78. package/autorest/multiapi/models/config.py +4 -1
  79. package/autorest/multiapi/models/constant_global_parameter.py +1 -0
  80. package/autorest/multiapi/models/global_parameter.py +2 -1
  81. package/autorest/multiapi/models/global_parameters.py +14 -8
  82. package/autorest/multiapi/models/imports.py +24 -17
  83. package/autorest/multiapi/models/mixin_operation.py +5 -5
  84. package/autorest/multiapi/models/operation_group.py +2 -1
  85. package/autorest/multiapi/models/operation_mixin_group.py +21 -10
  86. package/autorest/multiapi/serializers/__init__.py +20 -25
  87. package/autorest/multiapi/serializers/import_serializer.py +47 -17
  88. package/autorest/multiapi/serializers/multiapi_serializer.py +17 -17
  89. package/autorest/multiapi/templates/multiapi_config.py.jinja2 +3 -3
  90. package/autorest/multiapi/templates/multiapi_init.py.jinja2 +2 -2
  91. package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +4 -4
  92. package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +9 -9
  93. package/autorest/multiapi/utils.py +3 -3
  94. package/autorest/postprocess/__init__.py +202 -0
  95. package/autorest/postprocess/get_all.py +19 -0
  96. package/autorest/postprocess/venvtools.py +73 -0
  97. package/autorest/preprocess/__init__.py +210 -0
  98. package/autorest/preprocess/helpers.py +54 -0
  99. package/autorest/{namer → preprocess}/python_mappings.py +25 -32
  100. package/package.json +3 -3
  101. package/run-python3.js +2 -3
  102. package/venvtools.py +1 -1
  103. package/autorest/codegen/models/constant_schema.py +0 -101
  104. package/autorest/codegen/models/credential_model.py +0 -47
  105. package/autorest/codegen/models/credential_schema.py +0 -91
  106. package/autorest/codegen/models/credential_schema_policy.py +0 -77
  107. package/autorest/codegen/models/dictionary_schema.py +0 -103
  108. package/autorest/codegen/models/enum_schema.py +0 -215
  109. package/autorest/codegen/models/list_schema.py +0 -123
  110. package/autorest/codegen/models/object_schema.py +0 -253
  111. package/autorest/codegen/models/primitive_schemas.py +0 -466
  112. package/autorest/codegen/models/request_builder_parameter_list.py +0 -280
  113. package/autorest/codegen/models/rest.py +0 -42
  114. package/autorest/codegen/models/schema_request.py +0 -45
  115. package/autorest/codegen/models/schema_response.py +0 -136
  116. package/autorest/codegen/serializers/rest_serializer.py +0 -57
  117. package/autorest/namer/__init__.py +0 -25
  118. package/autorest/namer/name_converter.py +0 -412
@@ -3,18 +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 (
13
- CodeModel,
14
- OperationGroup,
15
- RequestBuilder,
16
- TokenCredentialSchema
17
- )
13
+ from ..models import CodeModel, OperationGroup, RequestBuilder
14
+ from ..models import TokenCredentialType
18
15
  from .enum_serializer import EnumSerializer
19
16
  from .general_serializer import GeneralSerializer
20
17
  from .model_generic_serializer import ModelGenericSerializer
@@ -23,7 +20,7 @@ from .model_python3_serializer import ModelPython3Serializer
23
20
  from .operations_init_serializer import OperationsInitSerializer
24
21
  from .operation_groups_serializer import OperationGroupsSerializer
25
22
  from .metadata_serializer import MetadataSerializer
26
- from .rest_serializer import RestPython3Serializer, RestGenericSerializer, RestSerializer
23
+ from .request_builders_serializer import RequestBuildersSerializer
27
24
  from .patch_serializer import PatchSerializer
28
25
 
29
26
  __all__ = [
@@ -39,10 +36,8 @@ _PACKAGE_FILES = [
39
36
  "setup.py.jinja2",
40
37
  ]
41
38
 
42
- _REGENERATE_FILES = {
43
- "setup.py",
44
- "MANIFEST.in"
45
- }
39
+ _REGENERATE_FILES = {"setup.py", "MANIFEST.in"}
40
+
46
41
 
47
42
  class JinjaSerializer:
48
43
  def __init__(self, autorestapi: AutorestAPI, code_model: CodeModel) -> None:
@@ -51,7 +46,9 @@ class JinjaSerializer:
51
46
 
52
47
  @property
53
48
  def has_aio_folder(self) -> bool:
54
- return not self.code_model.options["no_async"] and bool(self.code_model.rest.request_builders)
49
+ return not self.code_model.options["no_async"] and bool(
50
+ self.code_model.request_builders
51
+ )
55
52
 
56
53
  def serialize(self) -> None:
57
54
  env = Environment(
@@ -73,120 +70,176 @@ class JinjaSerializer:
73
70
  if self.has_aio_folder:
74
71
  self._keep_patch_file(namespace_path / Path("aio") / Path("_patch.py"), env)
75
72
 
76
- if self.code_model.options["models_mode"] and (self.code_model.schemas or self.code_model.enums):
77
- self._keep_patch_file(namespace_path / Path("models") / Path("_patch.py"), env)
78
- if self.code_model.options["show_operations"] and self.code_model.operation_groups:
73
+ if self.code_model.options["models_mode"] and (
74
+ self.code_model.model_types or self.code_model.enums
75
+ ):
76
+ self._keep_patch_file(
77
+ namespace_path / Path("models") / Path("_patch.py"), env
78
+ )
79
+ if (
80
+ self.code_model.options["show_operations"]
81
+ and self.code_model.operation_groups
82
+ ):
79
83
  self._keep_patch_file(
80
- namespace_path / Path(self.code_model.operations_folder_name) / Path("_patch.py"), env
84
+ namespace_path
85
+ / Path(self.code_model.operations_folder_name)
86
+ / Path("_patch.py"),
87
+ env,
81
88
  )
82
89
  if self.has_aio_folder:
83
90
  self._keep_patch_file(
84
- namespace_path / Path("aio") / Path(self.code_model.operations_folder_name) / Path("_patch.py"), env
91
+ namespace_path
92
+ / Path("aio")
93
+ / Path(self.code_model.operations_folder_name)
94
+ / Path("_patch.py"),
95
+ env,
85
96
  )
86
97
 
87
- self._serialize_and_write_top_level_folder(env=env, namespace_path=namespace_path)
98
+ self._serialize_and_write_top_level_folder(
99
+ env=env, namespace_path=namespace_path
100
+ )
88
101
 
89
- if self.code_model.rest.request_builders:
102
+ if self.code_model.request_builders:
90
103
  if self.code_model.options["builders_visibility"] != "embedded":
91
- self._serialize_and_write_rest_layer(env=env, namespace_path=namespace_path)
104
+ self._serialize_and_write_rest_layer(
105
+ env=env, namespace_path=namespace_path
106
+ )
92
107
  if self.has_aio_folder:
93
108
  self._serialize_and_write_aio_top_level_folder(
94
- env=env, namespace_path=namespace_path,
109
+ env=env,
110
+ namespace_path=namespace_path,
95
111
  )
96
112
 
97
- if self.code_model.options["show_operations"] and self.code_model.operation_groups:
98
- self._serialize_and_write_operations_folder(env=env, namespace_path=namespace_path)
113
+ if (
114
+ self.code_model.options["show_operations"]
115
+ and self.code_model.operation_groups
116
+ ):
117
+ self._serialize_and_write_operations_folder(
118
+ env=env, namespace_path=namespace_path
119
+ )
99
120
  if self.code_model.options["multiapi"]:
100
121
  self._serialize_and_write_metadata(
101
122
  env=env, namespace_path=namespace_path
102
123
  )
103
124
 
104
- if self.code_model.options["models_mode"] and (self.code_model.schemas or self.code_model.enums):
105
- self._serialize_and_write_models_folder(env=env, namespace_path=namespace_path)
125
+ if self.code_model.options["models_mode"] and (
126
+ self.code_model.model_types or self.code_model.enums
127
+ ):
128
+ self._serialize_and_write_models_folder(
129
+ env=env, namespace_path=namespace_path
130
+ )
106
131
  if not self.code_model.options["models_mode"]:
107
132
  # keep models file if users ended up just writing a models file
108
133
  if self._autorestapi.read_file(namespace_path / Path("models.py")):
109
134
  self._autorestapi.write_file(
110
- namespace_path / Path("models.py"), self._autorestapi.read_file(namespace_path / Path("models.py"))
135
+ namespace_path / Path("models.py"),
136
+ self._autorestapi.read_file(namespace_path / Path("models.py")),
111
137
  )
112
138
 
113
139
  if self.code_model.options["package_mode"]:
114
140
  self._serialize_and_write_package_files(out_path=namespace_path)
115
141
 
116
-
117
142
  def _serialize_and_write_package_files(self, out_path: Path) -> None:
118
143
  def _serialize_and_write_package_files_proc(**kwargs: Any):
119
144
  for template_name in package_files:
120
145
  file = template_name.replace(".jinja2", "")
121
146
  output_name = out_path / file
122
- if not self._autorestapi.read_file(output_name) or file in _REGENERATE_FILES:
147
+ if (
148
+ not self._autorestapi.read_file(output_name)
149
+ or file in _REGENERATE_FILES
150
+ ):
123
151
  template = env.get_template(template_name)
124
152
  render_result = template.render(**kwargs)
125
153
  self._autorestapi.write_file(output_name, render_result)
126
154
 
127
155
  def _prepare_params() -> Dict[Any, Any]:
128
- package_parts = self.code_model.options["package_name"].split("-")[:-1]
129
- try:
130
- token_cred = isinstance(
131
- self.code_model.credential_model.credential_schema_policy.credential,
132
- TokenCredentialSchema
133
- )
134
- except ValueError:
135
- token_cred = False
156
+ package_parts = package_name.split("-")[:-1]
157
+ token_cred = isinstance(
158
+ getattr(self.code_model.credential, "type", None), TokenCredentialType
159
+ )
136
160
  version = self.code_model.options["package_version"]
137
- if any(x in version for x in ["a", "b", "rc"]) or version[0] == '0':
161
+ if any(x in version for x in ["a", "b", "rc"]) or version[0] == "0":
138
162
  dev_status = "4 - Beta"
139
163
  else:
140
164
  dev_status = "5 - Production/Stable"
141
165
  params = {
142
166
  "token_credential": token_cred,
143
- "pkgutil_names": [".".join(package_parts[: i + 1]) for i in range(len(package_parts))],
144
- "init_names": ["/".join(package_parts[: i + 1]) + "/__init__.py" for i in range(len(package_parts))],
145
- "dev_status": dev_status
167
+ "pkgutil_names": [
168
+ ".".join(package_parts[: i + 1]) for i in range(len(package_parts))
169
+ ],
170
+ "init_names": [
171
+ "/".join(package_parts[: i + 1]) + "/__init__.py"
172
+ for i in range(len(package_parts))
173
+ ],
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,
146
178
  }
147
179
  params.update(self.code_model.options)
148
180
  params.update(self.code_model.package_dependency)
149
181
  return params
150
182
 
151
- 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
152
188
  for _ in range(count):
153
189
  out_path = out_path / Path("..")
154
190
 
155
191
  if self.code_model.options["package_mode"] in ("dataplane", "mgmtplane"):
156
192
  env = Environment(
157
193
  loader=PackageLoader("autorest.codegen", "templates"),
158
- undefined=StrictUndefined)
194
+ undefined=StrictUndefined,
195
+ )
159
196
  package_files = _PACKAGE_FILES
160
197
  _serialize_and_write_package_files_proc(**_prepare_params())
161
198
  elif Path(self.code_model.options["package_mode"]).exists():
162
199
  env = Environment(
163
- loader=FileSystemLoader(str(Path(self.code_model.options["package_mode"]))),
200
+ loader=FileSystemLoader(
201
+ str(Path(self.code_model.options["package_mode"]))
202
+ ),
164
203
  keep_trailing_newline=True,
165
- undefined=StrictUndefined
204
+ undefined=StrictUndefined,
166
205
  )
167
206
  package_files = env.list_templates()
168
207
  params = self.code_model.options["package_configuration"] or {}
169
208
  _serialize_and_write_package_files_proc(**params)
170
209
 
171
-
172
210
  def _keep_patch_file(self, path_file: Path, env: Environment):
173
211
  if self._autorestapi.read_file(path_file):
174
- self._autorestapi.write_file(path_file, self._autorestapi.read_file(path_file))
212
+ self._autorestapi.write_file(
213
+ path_file, self._autorestapi.read_file(path_file)
214
+ )
175
215
  else:
176
- self._autorestapi.write_file(path_file, PatchSerializer(env=env, code_model=self.code_model).serialize())
216
+ self._autorestapi.write_file(
217
+ path_file,
218
+ PatchSerializer(env=env, code_model=self.code_model).serialize(),
219
+ )
177
220
 
178
- def _serialize_and_write_models_folder(self, env: Environment, namespace_path: Path) -> None:
221
+ def _serialize_and_write_models_folder(
222
+ self, env: Environment, namespace_path: Path
223
+ ) -> None:
179
224
  # Write the models folder
180
225
  models_path = namespace_path / Path("models")
181
- if self.code_model.schemas:
182
- if not self.code_model.options['python3_only']:
226
+ if self.code_model.model_types:
227
+ if not self.code_model.options["python3_only"]:
183
228
  self._autorestapi.write_file(
184
- models_path / Path(f"{self.code_model.get_models_filename(is_python3_file=False)}.py"),
185
- ModelGenericSerializer(code_model=self.code_model, env=env).serialize()
229
+ models_path
230
+ / Path(
231
+ f"{self.code_model.get_models_filename(is_python3_file=False)}.py"
232
+ ),
233
+ ModelGenericSerializer(
234
+ code_model=self.code_model, env=env
235
+ ).serialize(),
186
236
  )
187
237
  self._autorestapi.write_file(
188
- models_path / Path(f"{self.code_model.get_models_filename(is_python3_file=True)}.py"),
189
- ModelPython3Serializer(code_model=self.code_model, env=env).serialize()
238
+ models_path
239
+ / Path(
240
+ f"{self.code_model.get_models_filename(is_python3_file=True)}.py"
241
+ ),
242
+ ModelPython3Serializer(code_model=self.code_model, env=env).serialize(),
190
243
  )
191
244
  if self.code_model.enums:
192
245
  self._autorestapi.write_file(
@@ -194,63 +247,77 @@ class JinjaSerializer:
194
247
  EnumSerializer(code_model=self.code_model, env=env).serialize(),
195
248
  )
196
249
  self._autorestapi.write_file(
197
- models_path / Path("__init__.py"), ModelInitSerializer(code_model=self.code_model, env=env).serialize()
250
+ models_path / Path("__init__.py"),
251
+ ModelInitSerializer(code_model=self.code_model, env=env).serialize(),
198
252
  )
199
253
 
200
254
  def _serialize_and_write_rest_layer(
201
255
  self, env: Environment, namespace_path: Path
202
256
  ) -> None:
203
257
  rest_path = namespace_path / Path(self.code_model.rest_layer_name)
204
- operation_group_names = {
205
- rb.operation_group_name for rb in self.code_model.rest.request_builders
206
- }
258
+ group_names = {rb.group_name for rb in self.code_model.request_builders}
207
259
 
208
- for operation_group_name in operation_group_names:
260
+ for group_name in group_names:
209
261
  request_builders = [
210
- r for r in self.code_model.rest.request_builders if r.operation_group_name == operation_group_name
262
+ r
263
+ for r in self.code_model.request_builders
264
+ if r.group_name == group_name
211
265
  ]
212
266
  self._serialize_and_write_single_rest_layer(
213
267
  env, rest_path, request_builders
214
268
  )
215
- if not "" in operation_group_names:
269
+ if not "" in group_names:
216
270
  self._autorestapi.write_file(
217
- rest_path / Path("__init__.py"), self.code_model.options['license_header']
271
+ rest_path / Path("__init__.py"),
272
+ self.code_model.options["license_header"],
218
273
  )
219
274
 
220
-
221
275
  def _serialize_and_write_single_rest_layer(
222
- 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]],
223
280
  ) -> None:
224
- builder_group_name = request_builders[0].builder_group_name
225
- output_path = rest_path / Path(builder_group_name) if builder_group_name else rest_path
281
+ group_name = request_builders[0].group_name
282
+ output_path = rest_path / Path(group_name) if group_name else rest_path
226
283
  # write generic request builders file
227
284
  self._autorestapi.write_file(
228
285
  output_path / Path("_request_builders.py"),
229
- RestGenericSerializer(
230
- code_model=self.code_model, env=env, request_builders=request_builders
231
- ).serialize_request_builders()
286
+ RequestBuildersSerializer(
287
+ code_model=self.code_model,
288
+ env=env,
289
+ request_builders=request_builders,
290
+ is_python3_file=False,
291
+ ).serialize_request_builders(),
232
292
  )
233
293
 
234
294
  # write python3 request builders file
235
295
  self._autorestapi.write_file(
236
296
  output_path / Path("_request_builders_py3.py"),
237
- RestPython3Serializer(
238
- code_model=self.code_model, env=env, request_builders=request_builders
239
- ).serialize_request_builders()
297
+ RequestBuildersSerializer(
298
+ code_model=self.code_model,
299
+ env=env,
300
+ request_builders=request_builders,
301
+ is_python3_file=True,
302
+ ).serialize_request_builders(),
240
303
  )
241
304
 
242
305
  # write rest init file
243
306
  self._autorestapi.write_file(
244
- output_path / Path("__init__.py"), RestSerializer(
245
- code_model=self.code_model, env=env, request_builders=request_builders
246
- ).serialize_init()
307
+ output_path / Path("__init__.py"),
308
+ RequestBuildersSerializer(
309
+ code_model=self.code_model,
310
+ env=env,
311
+ request_builders=request_builders,
312
+ is_python3_file=True,
313
+ ).serialize_init(),
247
314
  )
248
315
 
249
316
  def _serialize_and_write_operations_file(
250
317
  self,
251
318
  env: Environment,
252
319
  namespace_path: Path,
253
- operation_group: Optional[OperationGroup] = None
320
+ operation_group: Optional[OperationGroup] = None,
254
321
  ) -> None:
255
322
  filename = operation_group.filename if operation_group else "_operations"
256
323
  # write first sync file
@@ -258,25 +325,31 @@ class JinjaSerializer:
258
325
  code_model=self.code_model,
259
326
  env=env,
260
327
  async_mode=False,
261
- is_python3_file=self.code_model.options['python3_only'],
262
- operation_group=operation_group
328
+ is_python3_file=self.code_model.options["python3_only"],
329
+ operation_group=operation_group,
263
330
  )
264
331
  self._autorestapi.write_file(
265
- namespace_path / Path(self.code_model.operations_folder_name) / Path(f"{filename}.py"),
332
+ namespace_path
333
+ / Path(self.code_model.operations_folder_name)
334
+ / Path(f"{filename}.py"),
266
335
  operation_group_serializer.serialize(),
267
336
  )
268
337
 
269
- if not self.code_model.options['python3_only'] and self.code_model.options["add_python3_operation_files"]:
338
+ if (
339
+ not self.code_model.options["python3_only"]
340
+ and self.code_model.options["add_python3_operation_files"]
341
+ ):
270
342
  # write typed second file if not python 3 only
271
343
  operation_group_serializer = OperationGroupsSerializer(
272
344
  code_model=self.code_model,
273
345
  env=env,
274
346
  async_mode=False,
275
347
  is_python3_file=True,
276
-
277
348
  )
278
349
  self._autorestapi.write_file(
279
- namespace_path / Path(self.code_model.operations_folder_name) / Path(f"{filename}_py3.py"),
350
+ namespace_path
351
+ / Path(self.code_model.operations_folder_name)
352
+ / Path(f"{filename}_py3.py"),
280
353
  operation_group_serializer.serialize(),
281
354
  )
282
355
 
@@ -287,7 +360,7 @@ class JinjaSerializer:
287
360
  env=env,
288
361
  async_mode=True,
289
362
  is_python3_file=True,
290
- operation_group=operation_group
363
+ operation_group=operation_group,
291
364
  )
292
365
  self._autorestapi.write_file(
293
366
  (
@@ -303,9 +376,13 @@ class JinjaSerializer:
303
376
  self, env: Environment, namespace_path: Path
304
377
  ) -> None:
305
378
  # write sync operations init file
306
- operations_init_serializer = OperationsInitSerializer(code_model=self.code_model, env=env, async_mode=False)
379
+ operations_init_serializer = OperationsInitSerializer(
380
+ code_model=self.code_model, env=env, async_mode=False
381
+ )
307
382
  self._autorestapi.write_file(
308
- namespace_path / Path(self.code_model.operations_folder_name) / Path("__init__.py"),
383
+ namespace_path
384
+ / Path(self.code_model.operations_folder_name)
385
+ / Path("__init__.py"),
309
386
  operations_init_serializer.serialize(),
310
387
  )
311
388
 
@@ -315,7 +392,10 @@ class JinjaSerializer:
315
392
  code_model=self.code_model, env=env, async_mode=True
316
393
  )
317
394
  self._autorestapi.write_file(
318
- namespace_path / Path("aio") / Path(self.code_model.operations_folder_name) / Path("__init__.py"),
395
+ namespace_path
396
+ / Path("aio")
397
+ / Path(self.code_model.operations_folder_name)
398
+ / Path("__init__.py"),
319
399
  operations_async_init_serializer.serialize(),
320
400
  )
321
401
 
@@ -336,96 +416,116 @@ class JinjaSerializer:
336
416
  self, namespace_path: Path, general_serializer: GeneralSerializer
337
417
  ):
338
418
  def _read_version_file(original_version_file_name: str) -> str:
339
- return self._autorestapi.read_file(namespace_path / original_version_file_name)
419
+ return self._autorestapi.read_file(
420
+ namespace_path / original_version_file_name
421
+ )
340
422
 
341
423
  def _write_version_file(original_version_file_name: str) -> None:
342
424
  self._autorestapi.write_file(
343
425
  namespace_path / Path("_version.py"),
344
- _read_version_file(original_version_file_name)
426
+ _read_version_file(original_version_file_name),
345
427
  )
346
- keep_version_file = self.code_model.options['keep_version_file']
428
+
429
+ keep_version_file = self.code_model.options["keep_version_file"]
347
430
  if keep_version_file and _read_version_file("_version.py"):
348
431
  _write_version_file(original_version_file_name="_version.py")
349
432
  elif keep_version_file and _read_version_file("version.py"):
350
433
  _write_version_file(original_version_file_name="version.py")
351
- elif self.code_model.options['package_version']:
434
+ elif self.code_model.options["package_version"]:
352
435
  self._autorestapi.write_file(
353
436
  namespace_path / Path("_version.py"),
354
- general_serializer.serialize_version_file()
437
+ general_serializer.serialize_version_file(),
355
438
  )
356
439
 
357
440
  def _serialize_and_write_top_level_folder(
358
441
  self, env: Environment, namespace_path: Path
359
442
  ) -> None:
360
- general_serializer = GeneralSerializer(code_model=self.code_model, env=env, async_mode=False)
443
+ general_serializer = GeneralSerializer(
444
+ code_model=self.code_model, env=env, async_mode=False
445
+ )
361
446
 
362
447
  self._autorestapi.write_file(
363
- namespace_path / Path("__init__.py"), general_serializer.serialize_init_file()
448
+ namespace_path / Path("__init__.py"),
449
+ general_serializer.serialize_init_file(),
364
450
  )
365
451
  p = namespace_path.parent
366
452
  while p != Path("."):
367
453
  # write pkgutil init file
368
454
  self._autorestapi.write_file(
369
- p / Path("__init__.py"), general_serializer.serialize_pkgutil_init_file()
455
+ p / Path("__init__.py"),
456
+ general_serializer.serialize_pkgutil_init_file(),
370
457
  )
371
458
  p = p.parent
372
459
 
373
460
  # Write the service client
374
- if self.code_model.rest.request_builders:
461
+ if self.code_model.request_builders:
375
462
  self._autorestapi.write_file(
376
- namespace_path / Path(f"{self.code_model.service_client.filename}.py"),
377
- general_serializer.serialize_service_client_file()
463
+ namespace_path / Path(f"{self.code_model.client.filename}.py"),
464
+ general_serializer.serialize_service_client_file(),
378
465
  )
379
466
 
380
467
  if self.code_model.need_vendored_code(async_mode=False):
381
468
  self._autorestapi.write_file(
382
469
  namespace_path / Path("_vendor.py"),
383
- general_serializer.serialize_vendor_file()
470
+ general_serializer.serialize_vendor_file(),
384
471
  )
385
472
 
386
473
  self._serialize_and_write_version_file(namespace_path, general_serializer)
387
474
 
388
475
  # write the empty py.typed file
389
- self._autorestapi.write_file(namespace_path / Path("py.typed"), "# Marker file for PEP 561.")
476
+ self._autorestapi.write_file(
477
+ namespace_path / Path("py.typed"), "# Marker file for PEP 561."
478
+ )
390
479
 
391
480
  # Write the config file
392
- if self.code_model.rest.request_builders:
481
+ if self.code_model.request_builders:
393
482
  self._autorestapi.write_file(
394
- namespace_path / Path("_configuration.py"), general_serializer.serialize_config_file()
483
+ namespace_path / Path("_configuration.py"),
484
+ general_serializer.serialize_config_file(),
395
485
  )
396
486
 
397
487
  # Write the setup file
398
488
  if self.code_model.options["basic_setup_py"]:
399
- self._autorestapi.write_file(Path("setup.py"), general_serializer.serialize_setup_file())
489
+ self._autorestapi.write_file(
490
+ Path("setup.py"), general_serializer.serialize_setup_file()
491
+ )
400
492
 
401
493
  def _serialize_and_write_aio_top_level_folder(
402
494
  self, env: Environment, namespace_path: Path
403
495
  ) -> None:
404
- aio_general_serializer = GeneralSerializer(code_model=self.code_model, env=env, async_mode=True)
496
+ aio_general_serializer = GeneralSerializer(
497
+ code_model=self.code_model, env=env, async_mode=True
498
+ )
405
499
 
406
500
  aio_path = namespace_path / Path("aio")
407
501
 
408
502
  # Write the __init__ file
409
- self._autorestapi.write_file(aio_path / Path("__init__.py"), aio_general_serializer.serialize_init_file())
503
+ self._autorestapi.write_file(
504
+ aio_path / Path("__init__.py"), aio_general_serializer.serialize_init_file()
505
+ )
410
506
 
411
507
  # Write the service client
412
- if self.code_model.rest.request_builders:
508
+ if self.code_model.request_builders:
413
509
  self._autorestapi.write_file(
414
- aio_path / Path(f"{self.code_model.service_client.filename}.py"),
510
+ aio_path / Path(f"{self.code_model.client.filename}.py"),
415
511
  aio_general_serializer.serialize_service_client_file(),
416
512
  )
417
513
 
418
514
  # Write the config file
419
515
  self._autorestapi.write_file(
420
- aio_path / Path("_configuration.py"), aio_general_serializer.serialize_config_file()
516
+ aio_path / Path("_configuration.py"),
517
+ aio_general_serializer.serialize_config_file(),
421
518
  )
422
519
  if self.code_model.need_vendored_code(async_mode=True):
423
520
  self._autorestapi.write_file(
424
521
  aio_path / Path("_vendor.py"),
425
- aio_general_serializer.serialize_vendor_file()
522
+ aio_general_serializer.serialize_vendor_file(),
426
523
  )
427
524
 
428
-
429
- def _serialize_and_write_metadata(self, env: Environment, namespace_path: Path) -> None:
525
+ def _serialize_and_write_metadata(
526
+ self, env: Environment, namespace_path: Path
527
+ ) -> None:
430
528
  metadata_serializer = MetadataSerializer(self.code_model, env)
431
- self._autorestapi.write_file(namespace_path / Path("_metadata.json"), metadata_serializer.serialize())
529
+ self._autorestapi.write_file(
530
+ namespace_path / Path("_metadata.json"), metadata_serializer.serialize()
531
+ )