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