@autorest/python 5.12.6 → 5.15.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.
- package/ChangeLog.md +205 -125
- package/autorest/black/__init__.py +3 -0
- package/autorest/codegen/__init__.py +120 -48
- package/autorest/codegen/models/__init__.py +2 -1
- package/autorest/codegen/models/base_schema.py +2 -6
- package/autorest/codegen/models/client.py +6 -0
- package/autorest/codegen/models/code_model.py +43 -74
- package/autorest/codegen/models/constant_schema.py +7 -7
- package/autorest/codegen/models/credential_model.py +47 -0
- package/autorest/codegen/models/credential_schema.py +5 -4
- package/autorest/codegen/models/dictionary_schema.py +7 -7
- package/autorest/codegen/models/enum_schema.py +8 -39
- package/autorest/codegen/models/imports.py +3 -1
- package/autorest/codegen/models/list_schema.py +18 -8
- package/autorest/codegen/models/lro_operation.py +3 -3
- package/autorest/codegen/models/lro_paging_operation.py +3 -3
- package/autorest/codegen/models/object_schema.py +17 -13
- package/autorest/codegen/models/operation.py +38 -10
- package/autorest/codegen/models/operation_group.py +7 -2
- package/autorest/codegen/models/paging_operation.py +3 -3
- package/autorest/codegen/models/parameter.py +71 -22
- package/autorest/codegen/models/parameter_list.py +11 -5
- package/autorest/codegen/models/primitive_schemas.py +15 -25
- package/autorest/codegen/models/property.py +5 -5
- package/autorest/codegen/models/request_builder.py +4 -4
- package/autorest/codegen/models/request_builder_parameter.py +17 -5
- package/autorest/codegen/models/schema_response.py +23 -10
- package/autorest/codegen/models/utils.py +20 -0
- package/autorest/codegen/serializers/__init__.py +184 -87
- package/autorest/codegen/serializers/builder_serializer.py +113 -47
- package/autorest/codegen/serializers/client_serializer.py +16 -6
- package/autorest/codegen/serializers/general_serializer.py +28 -4
- package/autorest/codegen/serializers/import_serializer.py +1 -1
- package/autorest/codegen/serializers/metadata_serializer.py +1 -1
- package/autorest/codegen/serializers/model_base_serializer.py +8 -0
- package/autorest/codegen/serializers/model_python3_serializer.py +2 -2
- package/autorest/codegen/serializers/operation_groups_serializer.py +1 -0
- package/autorest/codegen/serializers/patch_serializer.py +12 -3
- package/autorest/codegen/serializers/utils.py +29 -4
- package/autorest/codegen/templates/CHANGELOG.md.jinja2 +6 -0
- package/autorest/codegen/templates/LICENSE.jinja2 +21 -0
- package/autorest/codegen/templates/MANIFEST.in.jinja2 +7 -0
- package/autorest/codegen/templates/README.md.jinja2 +105 -0
- package/autorest/codegen/templates/config.py.jinja2 +4 -4
- package/autorest/codegen/templates/dev_requirements.txt.jinja2 +10 -0
- package/autorest/codegen/templates/enum.py.jinja2 +1 -1
- package/autorest/codegen/templates/enum_container.py.jinja2 +0 -1
- package/autorest/codegen/templates/init.py.jinja2 +9 -6
- package/autorest/codegen/templates/keywords.jinja2 +14 -1
- package/autorest/codegen/templates/lro_operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/lro_paging_operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/metadata.json.jinja2 +3 -3
- package/autorest/codegen/templates/model.py.jinja2 +1 -6
- package/autorest/codegen/templates/model_init.py.jinja2 +7 -4
- package/autorest/codegen/templates/operation.py.jinja2 +2 -3
- package/autorest/codegen/templates/operation_group.py.jinja2 +20 -17
- package/autorest/codegen/templates/operation_groups_container.py.jinja2 +0 -1
- package/autorest/codegen/templates/operations_folder_init.py.jinja2 +4 -0
- package/autorest/codegen/templates/paging_operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/patch.py.jinja2 +18 -29
- package/autorest/codegen/templates/request_builder.py.jinja2 +4 -6
- package/autorest/codegen/templates/setup.py.jinja2 +79 -20
- package/autorest/codegen/templates/vendor.py.jinja2 +12 -2
- package/autorest/multiapi/models/imports.py +21 -11
- package/autorest/multiapi/serializers/import_serializer.py +3 -1
- package/autorest/namer/name_converter.py +1 -1
- package/package.json +2 -2
- package/run-python3.js +1 -7
- package/venvtools.py +2 -2
|
@@ -3,9 +3,9 @@
|
|
|
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 Dict, List, Optional, Any
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from jinja2 import PackageLoader, Environment
|
|
8
|
+
from jinja2 import PackageLoader, Environment, FileSystemLoader, StrictUndefined
|
|
9
9
|
from autorest.codegen.models.operation_group import OperationGroup
|
|
10
10
|
|
|
11
11
|
from ...jsonrpc import AutorestAPI
|
|
@@ -13,6 +13,7 @@ from ..models import (
|
|
|
13
13
|
CodeModel,
|
|
14
14
|
OperationGroup,
|
|
15
15
|
RequestBuilder,
|
|
16
|
+
TokenCredentialSchema
|
|
16
17
|
)
|
|
17
18
|
from .enum_serializer import EnumSerializer
|
|
18
19
|
from .general_serializer import GeneralSerializer
|
|
@@ -29,11 +30,30 @@ __all__ = [
|
|
|
29
30
|
"JinjaSerializer",
|
|
30
31
|
]
|
|
31
32
|
|
|
33
|
+
_PACKAGE_FILES = [
|
|
34
|
+
"CHANGELOG.md.jinja2",
|
|
35
|
+
"dev_requirements.txt.jinja2",
|
|
36
|
+
"LICENSE.jinja2",
|
|
37
|
+
"MANIFEST.in.jinja2",
|
|
38
|
+
"README.md.jinja2",
|
|
39
|
+
"setup.py.jinja2",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
_REGENERATE_FILES = {
|
|
43
|
+
"setup.py",
|
|
44
|
+
"MANIFEST.in"
|
|
45
|
+
}
|
|
46
|
+
|
|
32
47
|
class JinjaSerializer:
|
|
33
|
-
def __init__(self, autorestapi: AutorestAPI) -> None:
|
|
48
|
+
def __init__(self, autorestapi: AutorestAPI, code_model: CodeModel) -> None:
|
|
34
49
|
self._autorestapi = autorestapi
|
|
50
|
+
self.code_model = code_model
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def has_aio_folder(self) -> bool:
|
|
54
|
+
return not self.code_model.options["no_async"] and bool(self.code_model.rest.request_builders)
|
|
35
55
|
|
|
36
|
-
def serialize(self
|
|
56
|
+
def serialize(self) -> None:
|
|
37
57
|
env = Environment(
|
|
38
58
|
loader=PackageLoader("autorest.codegen", "templates"),
|
|
39
59
|
keep_trailing_newline=True,
|
|
@@ -44,85 +64,162 @@ class JinjaSerializer:
|
|
|
44
64
|
)
|
|
45
65
|
|
|
46
66
|
namespace_path = (
|
|
47
|
-
Path(".")
|
|
67
|
+
Path(".")
|
|
68
|
+
if self.code_model.options["no_namespace_folders"]
|
|
69
|
+
else Path(*(self.code_model.namespace.split(".")))
|
|
48
70
|
)
|
|
49
|
-
|
|
50
71
|
# if there was a patch file before, we keep it
|
|
51
72
|
self._keep_patch_file(namespace_path / Path("_patch.py"), env)
|
|
52
|
-
self.
|
|
73
|
+
if self.has_aio_folder:
|
|
74
|
+
self._keep_patch_file(namespace_path / Path("aio") / Path("_patch.py"), env)
|
|
75
|
+
|
|
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:
|
|
79
|
+
self._keep_patch_file(
|
|
80
|
+
namespace_path / Path(self.code_model.operations_folder_name) / Path("_patch.py"), env
|
|
81
|
+
)
|
|
82
|
+
if self.has_aio_folder:
|
|
83
|
+
self._keep_patch_file(
|
|
84
|
+
namespace_path / Path("aio") / Path(self.code_model.operations_folder_name) / Path("_patch.py"), env
|
|
85
|
+
)
|
|
53
86
|
|
|
54
|
-
self._serialize_and_write_top_level_folder(
|
|
87
|
+
self._serialize_and_write_top_level_folder(env=env, namespace_path=namespace_path)
|
|
55
88
|
|
|
56
|
-
if code_model.rest.request_builders:
|
|
57
|
-
if code_model.options["builders_visibility"] != "embedded":
|
|
58
|
-
self._serialize_and_write_rest_layer(
|
|
59
|
-
if
|
|
89
|
+
if self.code_model.rest.request_builders:
|
|
90
|
+
if self.code_model.options["builders_visibility"] != "embedded":
|
|
91
|
+
self._serialize_and_write_rest_layer(env=env, namespace_path=namespace_path)
|
|
92
|
+
if self.has_aio_folder:
|
|
60
93
|
self._serialize_and_write_aio_top_level_folder(
|
|
61
|
-
|
|
94
|
+
env=env, namespace_path=namespace_path,
|
|
62
95
|
)
|
|
63
96
|
|
|
64
|
-
if code_model.options["show_operations"] and code_model.operation_groups:
|
|
65
|
-
self._serialize_and_write_operations_folder(
|
|
66
|
-
if code_model.options["multiapi"]:
|
|
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)
|
|
99
|
+
if self.code_model.options["multiapi"]:
|
|
67
100
|
self._serialize_and_write_metadata(
|
|
68
|
-
|
|
101
|
+
env=env, namespace_path=namespace_path
|
|
69
102
|
)
|
|
70
103
|
|
|
71
|
-
if code_model.options["models_mode"] and (code_model.schemas or code_model.enums):
|
|
72
|
-
self._serialize_and_write_models_folder(
|
|
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)
|
|
106
|
+
if not self.code_model.options["models_mode"]:
|
|
107
|
+
# keep models file if users ended up just writing a models file
|
|
108
|
+
if self._autorestapi.read_file(namespace_path / Path("models.py")):
|
|
109
|
+
self._autorestapi.write_file(
|
|
110
|
+
namespace_path / Path("models.py"), self._autorestapi.read_file(namespace_path / Path("models.py"))
|
|
111
|
+
)
|
|
73
112
|
|
|
113
|
+
if self.code_model.options["package_mode"]:
|
|
114
|
+
self._serialize_and_write_package_files(out_path=namespace_path)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _serialize_and_write_package_files(self, out_path: Path) -> None:
|
|
118
|
+
def _serialize_and_write_package_files_proc(**kwargs: Any):
|
|
119
|
+
for template_name in package_files:
|
|
120
|
+
file = template_name.replace(".jinja2", "")
|
|
121
|
+
output_name = out_path / file
|
|
122
|
+
if not self._autorestapi.read_file(output_name) or file in _REGENERATE_FILES:
|
|
123
|
+
template = env.get_template(template_name)
|
|
124
|
+
render_result = template.render(**kwargs)
|
|
125
|
+
self._autorestapi.write_file(output_name, render_result)
|
|
126
|
+
|
|
127
|
+
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
|
|
136
|
+
version = self.code_model.options["package_version"]
|
|
137
|
+
if any(x in version for x in ["a", "b", "rc"]) or version[0] == '0':
|
|
138
|
+
dev_status = "4 - Beta"
|
|
139
|
+
else:
|
|
140
|
+
dev_status = "5 - Production/Stable"
|
|
141
|
+
params = {
|
|
142
|
+
"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
|
|
146
|
+
}
|
|
147
|
+
params.update(self.code_model.options)
|
|
148
|
+
params.update(self.code_model.package_dependency)
|
|
149
|
+
return params
|
|
150
|
+
|
|
151
|
+
count = self.code_model.options["package_name"].count("-") + 1
|
|
152
|
+
for _ in range(count):
|
|
153
|
+
out_path = out_path / Path("..")
|
|
154
|
+
|
|
155
|
+
if self.code_model.options["package_mode"] in ("dataplane", "mgmtplane"):
|
|
156
|
+
env = Environment(
|
|
157
|
+
loader=PackageLoader("autorest.codegen", "templates"),
|
|
158
|
+
undefined=StrictUndefined)
|
|
159
|
+
package_files = _PACKAGE_FILES
|
|
160
|
+
_serialize_and_write_package_files_proc(**_prepare_params())
|
|
161
|
+
elif Path(self.code_model.options["package_mode"]).exists():
|
|
162
|
+
env = Environment(
|
|
163
|
+
loader=FileSystemLoader(str(Path(self.code_model.options["package_mode"]))),
|
|
164
|
+
keep_trailing_newline=True,
|
|
165
|
+
undefined=StrictUndefined
|
|
166
|
+
)
|
|
167
|
+
package_files = env.list_templates()
|
|
168
|
+
params = self.code_model.options["package_configuration"] or {}
|
|
169
|
+
_serialize_and_write_package_files_proc(**params)
|
|
74
170
|
|
|
75
171
|
|
|
76
172
|
def _keep_patch_file(self, path_file: Path, env: Environment):
|
|
77
173
|
if self._autorestapi.read_file(path_file):
|
|
78
174
|
self._autorestapi.write_file(path_file, self._autorestapi.read_file(path_file))
|
|
79
175
|
else:
|
|
80
|
-
self._autorestapi.write_file(path_file, PatchSerializer(env=env).serialize())
|
|
81
|
-
|
|
176
|
+
self._autorestapi.write_file(path_file, PatchSerializer(env=env, code_model=self.code_model).serialize())
|
|
82
177
|
|
|
83
|
-
def _serialize_and_write_models_folder(self,
|
|
178
|
+
def _serialize_and_write_models_folder(self, env: Environment, namespace_path: Path) -> None:
|
|
84
179
|
# Write the models folder
|
|
85
180
|
models_path = namespace_path / Path("models")
|
|
86
|
-
if code_model.schemas:
|
|
87
|
-
if not code_model.options['python3_only']:
|
|
181
|
+
if self.code_model.schemas:
|
|
182
|
+
if not self.code_model.options['python3_only']:
|
|
88
183
|
self._autorestapi.write_file(
|
|
89
|
-
models_path / Path("
|
|
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()
|
|
90
186
|
)
|
|
91
187
|
self._autorestapi.write_file(
|
|
92
|
-
models_path / Path("
|
|
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()
|
|
93
190
|
)
|
|
94
|
-
if code_model.enums:
|
|
191
|
+
if self.code_model.enums:
|
|
95
192
|
self._autorestapi.write_file(
|
|
96
|
-
models_path / Path(f"
|
|
97
|
-
EnumSerializer(code_model=code_model, env=env).serialize(),
|
|
193
|
+
models_path / Path(f"{self.code_model.enums_filename}.py"),
|
|
194
|
+
EnumSerializer(code_model=self.code_model, env=env).serialize(),
|
|
98
195
|
)
|
|
99
196
|
self._autorestapi.write_file(
|
|
100
|
-
models_path / Path("__init__.py"), ModelInitSerializer(code_model=code_model, env=env).serialize()
|
|
197
|
+
models_path / Path("__init__.py"), ModelInitSerializer(code_model=self.code_model, env=env).serialize()
|
|
101
198
|
)
|
|
102
199
|
|
|
103
200
|
def _serialize_and_write_rest_layer(
|
|
104
|
-
self,
|
|
201
|
+
self, env: Environment, namespace_path: Path
|
|
105
202
|
) -> None:
|
|
106
|
-
rest_path = namespace_path / Path(code_model.rest_layer_name)
|
|
203
|
+
rest_path = namespace_path / Path(self.code_model.rest_layer_name)
|
|
107
204
|
operation_group_names = {
|
|
108
|
-
rb.operation_group_name for rb in code_model.rest.request_builders
|
|
205
|
+
rb.operation_group_name for rb in self.code_model.rest.request_builders
|
|
109
206
|
}
|
|
110
207
|
|
|
111
208
|
for operation_group_name in operation_group_names:
|
|
112
209
|
request_builders = [
|
|
113
|
-
r for r in code_model.rest.request_builders if r.operation_group_name == operation_group_name
|
|
210
|
+
r for r in self.code_model.rest.request_builders if r.operation_group_name == operation_group_name
|
|
114
211
|
]
|
|
115
212
|
self._serialize_and_write_single_rest_layer(
|
|
116
|
-
|
|
213
|
+
env, rest_path, request_builders
|
|
117
214
|
)
|
|
118
215
|
if not "" in operation_group_names:
|
|
119
216
|
self._autorestapi.write_file(
|
|
120
|
-
rest_path / Path("__init__.py"), code_model.options['license_header']
|
|
217
|
+
rest_path / Path("__init__.py"), self.code_model.options['license_header']
|
|
121
218
|
)
|
|
122
219
|
|
|
123
220
|
|
|
124
221
|
def _serialize_and_write_single_rest_layer(
|
|
125
|
-
self,
|
|
222
|
+
self, env: Environment, rest_path: Path, request_builders: List[RequestBuilder]
|
|
126
223
|
) -> None:
|
|
127
224
|
builder_group_name = request_builders[0].builder_group_name
|
|
128
225
|
output_path = rest_path / Path(builder_group_name) if builder_group_name else rest_path
|
|
@@ -130,7 +227,7 @@ class JinjaSerializer:
|
|
|
130
227
|
self._autorestapi.write_file(
|
|
131
228
|
output_path / Path("_request_builders.py"),
|
|
132
229
|
RestGenericSerializer(
|
|
133
|
-
code_model=code_model, env=env, request_builders=request_builders
|
|
230
|
+
code_model=self.code_model, env=env, request_builders=request_builders
|
|
134
231
|
).serialize_request_builders()
|
|
135
232
|
)
|
|
136
233
|
|
|
@@ -138,20 +235,19 @@ class JinjaSerializer:
|
|
|
138
235
|
self._autorestapi.write_file(
|
|
139
236
|
output_path / Path("_request_builders_py3.py"),
|
|
140
237
|
RestPython3Serializer(
|
|
141
|
-
code_model=code_model, env=env, request_builders=request_builders
|
|
238
|
+
code_model=self.code_model, env=env, request_builders=request_builders
|
|
142
239
|
).serialize_request_builders()
|
|
143
240
|
)
|
|
144
241
|
|
|
145
242
|
# write rest init file
|
|
146
243
|
self._autorestapi.write_file(
|
|
147
244
|
output_path / Path("__init__.py"), RestSerializer(
|
|
148
|
-
code_model=code_model, env=env, request_builders=request_builders
|
|
245
|
+
code_model=self.code_model, env=env, request_builders=request_builders
|
|
149
246
|
).serialize_init()
|
|
150
247
|
)
|
|
151
248
|
|
|
152
249
|
def _serialize_and_write_operations_file(
|
|
153
250
|
self,
|
|
154
|
-
code_model: CodeModel,
|
|
155
251
|
env: Environment,
|
|
156
252
|
namespace_path: Path,
|
|
157
253
|
operation_group: Optional[OperationGroup] = None
|
|
@@ -159,35 +255,35 @@ class JinjaSerializer:
|
|
|
159
255
|
filename = operation_group.filename if operation_group else "_operations"
|
|
160
256
|
# write first sync file
|
|
161
257
|
operation_group_serializer = OperationGroupsSerializer(
|
|
162
|
-
code_model=code_model,
|
|
258
|
+
code_model=self.code_model,
|
|
163
259
|
env=env,
|
|
164
260
|
async_mode=False,
|
|
165
|
-
is_python3_file=code_model.options['python3_only'],
|
|
261
|
+
is_python3_file=self.code_model.options['python3_only'],
|
|
166
262
|
operation_group=operation_group
|
|
167
263
|
)
|
|
168
264
|
self._autorestapi.write_file(
|
|
169
|
-
namespace_path / Path(code_model.operations_folder_name) / Path(f"{filename}.py"),
|
|
265
|
+
namespace_path / Path(self.code_model.operations_folder_name) / Path(f"{filename}.py"),
|
|
170
266
|
operation_group_serializer.serialize(),
|
|
171
267
|
)
|
|
172
268
|
|
|
173
|
-
if not code_model.options['python3_only'] and code_model.options["add_python3_operation_files"]:
|
|
269
|
+
if not self.code_model.options['python3_only'] and self.code_model.options["add_python3_operation_files"]:
|
|
174
270
|
# write typed second file if not python 3 only
|
|
175
271
|
operation_group_serializer = OperationGroupsSerializer(
|
|
176
|
-
code_model=code_model,
|
|
272
|
+
code_model=self.code_model,
|
|
177
273
|
env=env,
|
|
178
274
|
async_mode=False,
|
|
179
275
|
is_python3_file=True,
|
|
180
276
|
|
|
181
277
|
)
|
|
182
278
|
self._autorestapi.write_file(
|
|
183
|
-
namespace_path / Path(code_model.operations_folder_name) / Path(f"{filename}_py3.py"),
|
|
279
|
+
namespace_path / Path(self.code_model.operations_folder_name) / Path(f"{filename}_py3.py"),
|
|
184
280
|
operation_group_serializer.serialize(),
|
|
185
281
|
)
|
|
186
282
|
|
|
187
|
-
if
|
|
283
|
+
if self.has_aio_folder:
|
|
188
284
|
# write async operation group and operation files
|
|
189
285
|
operation_group_async_serializer = OperationGroupsSerializer(
|
|
190
|
-
code_model=code_model,
|
|
286
|
+
code_model=self.code_model,
|
|
191
287
|
env=env,
|
|
192
288
|
async_mode=True,
|
|
193
289
|
is_python3_file=True,
|
|
@@ -197,47 +293,47 @@ class JinjaSerializer:
|
|
|
197
293
|
(
|
|
198
294
|
namespace_path
|
|
199
295
|
/ Path("aio")
|
|
200
|
-
/ Path(code_model.operations_folder_name)
|
|
296
|
+
/ Path(self.code_model.operations_folder_name)
|
|
201
297
|
/ Path(f"{filename}.py")
|
|
202
298
|
),
|
|
203
299
|
operation_group_async_serializer.serialize(),
|
|
204
300
|
)
|
|
205
301
|
|
|
206
302
|
def _serialize_and_write_operations_folder(
|
|
207
|
-
self,
|
|
303
|
+
self, env: Environment, namespace_path: Path
|
|
208
304
|
) -> None:
|
|
209
305
|
# write sync operations init file
|
|
210
|
-
operations_init_serializer = OperationsInitSerializer(code_model=code_model, env=env, async_mode=False)
|
|
306
|
+
operations_init_serializer = OperationsInitSerializer(code_model=self.code_model, env=env, async_mode=False)
|
|
211
307
|
self._autorestapi.write_file(
|
|
212
|
-
namespace_path / Path(code_model.operations_folder_name) / Path("__init__.py"),
|
|
308
|
+
namespace_path / Path(self.code_model.operations_folder_name) / Path("__init__.py"),
|
|
213
309
|
operations_init_serializer.serialize(),
|
|
214
310
|
)
|
|
215
311
|
|
|
216
312
|
# write async operations init file
|
|
217
|
-
if
|
|
218
|
-
operations_async_init_serializer = OperationsInitSerializer(
|
|
313
|
+
if self.has_aio_folder:
|
|
314
|
+
operations_async_init_serializer = OperationsInitSerializer(
|
|
315
|
+
code_model=self.code_model, env=env, async_mode=True
|
|
316
|
+
)
|
|
219
317
|
self._autorestapi.write_file(
|
|
220
|
-
namespace_path / Path("aio") / Path(code_model.operations_folder_name) / Path("__init__.py"),
|
|
318
|
+
namespace_path / Path("aio") / Path(self.code_model.operations_folder_name) / Path("__init__.py"),
|
|
221
319
|
operations_async_init_serializer.serialize(),
|
|
222
320
|
)
|
|
223
321
|
|
|
224
|
-
if code_model.options["combine_operation_files"]:
|
|
322
|
+
if self.code_model.options["combine_operation_files"]:
|
|
225
323
|
self._serialize_and_write_operations_file(
|
|
226
|
-
code_model=code_model,
|
|
227
324
|
env=env,
|
|
228
325
|
namespace_path=namespace_path,
|
|
229
326
|
)
|
|
230
327
|
else:
|
|
231
|
-
for operation_group in code_model.operation_groups:
|
|
328
|
+
for operation_group in self.code_model.operation_groups:
|
|
232
329
|
self._serialize_and_write_operations_file(
|
|
233
|
-
code_model=code_model,
|
|
234
330
|
env=env,
|
|
235
331
|
namespace_path=namespace_path,
|
|
236
332
|
operation_group=operation_group,
|
|
237
333
|
)
|
|
238
334
|
|
|
239
335
|
def _serialize_and_write_version_file(
|
|
240
|
-
self,
|
|
336
|
+
self, namespace_path: Path, general_serializer: GeneralSerializer
|
|
241
337
|
):
|
|
242
338
|
def _read_version_file(original_version_file_name: str) -> str:
|
|
243
339
|
return self._autorestapi.read_file(namespace_path / original_version_file_name)
|
|
@@ -247,30 +343,25 @@ class JinjaSerializer:
|
|
|
247
343
|
namespace_path / Path("_version.py"),
|
|
248
344
|
_read_version_file(original_version_file_name)
|
|
249
345
|
)
|
|
250
|
-
keep_version_file = code_model.options['keep_version_file']
|
|
346
|
+
keep_version_file = self.code_model.options['keep_version_file']
|
|
251
347
|
if keep_version_file and _read_version_file("_version.py"):
|
|
252
348
|
_write_version_file(original_version_file_name="_version.py")
|
|
253
349
|
elif keep_version_file and _read_version_file("version.py"):
|
|
254
350
|
_write_version_file(original_version_file_name="version.py")
|
|
255
|
-
elif code_model.options['package_version']:
|
|
351
|
+
elif self.code_model.options['package_version']:
|
|
256
352
|
self._autorestapi.write_file(
|
|
257
353
|
namespace_path / Path("_version.py"),
|
|
258
354
|
general_serializer.serialize_version_file()
|
|
259
355
|
)
|
|
260
356
|
|
|
261
357
|
def _serialize_and_write_top_level_folder(
|
|
262
|
-
self,
|
|
358
|
+
self, env: Environment, namespace_path: Path
|
|
263
359
|
) -> None:
|
|
264
|
-
general_serializer = GeneralSerializer(code_model=code_model, env=env, async_mode=False)
|
|
360
|
+
general_serializer = GeneralSerializer(code_model=self.code_model, env=env, async_mode=False)
|
|
265
361
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
)
|
|
270
|
-
else:
|
|
271
|
-
self._autorestapi.write_file(
|
|
272
|
-
namespace_path / Path("__init__.py"), general_serializer.serialize_pkgutil_init_file()
|
|
273
|
-
)
|
|
362
|
+
self._autorestapi.write_file(
|
|
363
|
+
namespace_path / Path("__init__.py"), general_serializer.serialize_init_file()
|
|
364
|
+
)
|
|
274
365
|
p = namespace_path.parent
|
|
275
366
|
while p != Path("."):
|
|
276
367
|
# write pkgutil init file
|
|
@@ -280,37 +371,37 @@ class JinjaSerializer:
|
|
|
280
371
|
p = p.parent
|
|
281
372
|
|
|
282
373
|
# Write the service client
|
|
283
|
-
if code_model.rest.request_builders:
|
|
374
|
+
if self.code_model.rest.request_builders:
|
|
284
375
|
self._autorestapi.write_file(
|
|
285
|
-
namespace_path / Path(f"
|
|
376
|
+
namespace_path / Path(f"{self.code_model.service_client.filename}.py"),
|
|
286
377
|
general_serializer.serialize_service_client_file()
|
|
287
378
|
)
|
|
288
379
|
|
|
289
|
-
if code_model.need_vendored_code:
|
|
380
|
+
if self.code_model.need_vendored_code(async_mode=False):
|
|
290
381
|
self._autorestapi.write_file(
|
|
291
382
|
namespace_path / Path("_vendor.py"),
|
|
292
383
|
general_serializer.serialize_vendor_file()
|
|
293
384
|
)
|
|
294
385
|
|
|
295
|
-
self._serialize_and_write_version_file(
|
|
386
|
+
self._serialize_and_write_version_file(namespace_path, general_serializer)
|
|
296
387
|
|
|
297
388
|
# write the empty py.typed file
|
|
298
389
|
self._autorestapi.write_file(namespace_path / Path("py.typed"), "# Marker file for PEP 561.")
|
|
299
390
|
|
|
300
391
|
# Write the config file
|
|
301
|
-
if code_model.rest.request_builders:
|
|
392
|
+
if self.code_model.rest.request_builders:
|
|
302
393
|
self._autorestapi.write_file(
|
|
303
394
|
namespace_path / Path("_configuration.py"), general_serializer.serialize_config_file()
|
|
304
395
|
)
|
|
305
396
|
|
|
306
397
|
# Write the setup file
|
|
307
|
-
if code_model.options["basic_setup_py"]:
|
|
398
|
+
if self.code_model.options["basic_setup_py"]:
|
|
308
399
|
self._autorestapi.write_file(Path("setup.py"), general_serializer.serialize_setup_file())
|
|
309
400
|
|
|
310
401
|
def _serialize_and_write_aio_top_level_folder(
|
|
311
|
-
self,
|
|
402
|
+
self, env: Environment, namespace_path: Path
|
|
312
403
|
) -> None:
|
|
313
|
-
aio_general_serializer = GeneralSerializer(code_model=code_model, env=env, async_mode=True)
|
|
404
|
+
aio_general_serializer = GeneralSerializer(code_model=self.code_model, env=env, async_mode=True)
|
|
314
405
|
|
|
315
406
|
aio_path = namespace_path / Path("aio")
|
|
316
407
|
|
|
@@ -318,17 +409,23 @@ class JinjaSerializer:
|
|
|
318
409
|
self._autorestapi.write_file(aio_path / Path("__init__.py"), aio_general_serializer.serialize_init_file())
|
|
319
410
|
|
|
320
411
|
# Write the service client
|
|
321
|
-
self.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
412
|
+
if self.code_model.rest.request_builders:
|
|
413
|
+
self._autorestapi.write_file(
|
|
414
|
+
aio_path / Path(f"{self.code_model.service_client.filename}.py"),
|
|
415
|
+
aio_general_serializer.serialize_service_client_file(),
|
|
416
|
+
)
|
|
325
417
|
|
|
326
418
|
# Write the config file
|
|
327
419
|
self._autorestapi.write_file(
|
|
328
420
|
aio_path / Path("_configuration.py"), aio_general_serializer.serialize_config_file()
|
|
329
421
|
)
|
|
422
|
+
if self.code_model.need_vendored_code(async_mode=True):
|
|
423
|
+
self._autorestapi.write_file(
|
|
424
|
+
aio_path / Path("_vendor.py"),
|
|
425
|
+
aio_general_serializer.serialize_vendor_file()
|
|
426
|
+
)
|
|
330
427
|
|
|
331
428
|
|
|
332
|
-
def _serialize_and_write_metadata(self,
|
|
333
|
-
metadata_serializer = MetadataSerializer(code_model, env)
|
|
429
|
+
def _serialize_and_write_metadata(self, env: Environment, namespace_path: Path) -> None:
|
|
430
|
+
metadata_serializer = MetadataSerializer(self.code_model, env)
|
|
334
431
|
self._autorestapi.write_file(namespace_path / Path("_metadata.json"), metadata_serializer.serialize())
|