@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.
- package/ChangeLog.md +98 -4
- package/README.md +30 -4
- package/autorest/__init__.py +2 -3
- package/autorest/black/__init__.py +12 -5
- package/autorest/codegen/__init__.py +122 -211
- 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} +68 -45
- package/autorest/codegen/models/client.py +193 -40
- package/autorest/codegen/models/code_model.py +145 -245
- 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 +131 -0
- package/autorest/codegen/models/enum_type.py +195 -0
- package/autorest/codegen/models/imports.py +93 -41
- package/autorest/codegen/models/list_type.py +149 -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 +262 -0
- package/autorest/codegen/models/operation.py +412 -259
- package/autorest/codegen/models/operation_group.py +80 -91
- package/autorest/codegen/models/paging_operation.py +101 -117
- package/autorest/codegen/models/parameter.py +302 -341
- package/autorest/codegen/models/parameter_list.py +373 -357
- package/autorest/codegen/models/primitive_types.py +544 -0
- package/autorest/codegen/models/property.py +136 -134
- package/autorest/codegen/models/request_builder.py +138 -86
- package/autorest/codegen/models/request_builder_parameter.py +122 -86
- package/autorest/codegen/models/response.py +325 -0
- package/autorest/codegen/models/utils.py +13 -17
- package/autorest/codegen/serializers/__init__.py +212 -112
- package/autorest/codegen/serializers/builder_serializer.py +931 -1040
- package/autorest/codegen/serializers/client_serializer.py +140 -84
- package/autorest/codegen/serializers/general_serializer.py +26 -50
- 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 +62 -34
- 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 -19
- 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 +4 -1
- package/autorest/codegen/serializers/request_builders_serializer.py +57 -0
- package/autorest/codegen/serializers/utils.py +0 -126
- 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 -1
- package/autorest/codegen/templates/init.py.jinja2 +3 -3
- 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 -24
- package/autorest/codegen/templates/model_container.py.jinja2 +2 -1
- package/autorest/codegen/templates/model_init.py.jinja2 +3 -5
- package/autorest/codegen/templates/operation.py.jinja2 +10 -14
- package/autorest/codegen/templates/operation_group.py.jinja2 +9 -15
- package/autorest/codegen/templates/operation_groups_container.py.jinja2 +1 -1
- package/autorest/codegen/templates/operation_tools.jinja2 +8 -2
- package/autorest/codegen/templates/paging_operation.py.jinja2 +7 -8
- package/autorest/codegen/templates/request_builder.py.jinja2 +19 -10
- package/autorest/codegen/templates/setup.py.jinja2 +9 -3
- package/autorest/codegen/templates/vendor.py.jinja2 +1 -1
- 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 +1126 -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 +24 -17
- 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 -17
- 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 +210 -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 -101
- package/autorest/codegen/models/credential_model.py +0 -47
- package/autorest/codegen/models/credential_schema.py +0 -91
- 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 -215
- package/autorest/codegen/models/list_schema.py +0 -123
- package/autorest/codegen/models/object_schema.py +0 -253
- package/autorest/codegen/models/primitive_schemas.py +0 -466
- 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 -136
- 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,10 +36,8 @@ _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:
|
|
@@ -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(
|
|
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 (
|
|
77
|
-
self.
|
|
78
|
-
|
|
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
|
|
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
|
|
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(
|
|
98
|
+
self._serialize_and_write_top_level_folder(
|
|
99
|
+
env=env, namespace_path=namespace_path
|
|
100
|
+
)
|
|
88
101
|
|
|
89
|
-
if self.code_model.
|
|
102
|
+
if self.code_model.request_builders:
|
|
90
103
|
if self.code_model.options["builders_visibility"] != "embedded":
|
|
91
|
-
self._serialize_and_write_rest_layer(
|
|
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,
|
|
109
|
+
env=env,
|
|
110
|
+
namespace_path=namespace_path,
|
|
95
111
|
)
|
|
96
112
|
|
|
97
|
-
if
|
|
98
|
-
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
|
+
)
|
|
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 (
|
|
105
|
-
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
|
+
)
|
|
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"),
|
|
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
|
|
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 =
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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] ==
|
|
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": [
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
212
|
+
self._autorestapi.write_file(
|
|
213
|
+
path_file, self._autorestapi.read_file(path_file)
|
|
214
|
+
)
|
|
175
215
|
else:
|
|
176
|
-
self._autorestapi.write_file(
|
|
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(
|
|
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.
|
|
182
|
-
if not self.code_model.options[
|
|
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
|
|
185
|
-
|
|
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
|
|
189
|
-
|
|
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"),
|
|
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
|
-
|
|
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
|
|
260
|
+
for group_name in group_names:
|
|
209
261
|
request_builders = [
|
|
210
|
-
r
|
|
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
|
|
269
|
+
if not "" in group_names:
|
|
216
270
|
self._autorestapi.write_file(
|
|
217
|
-
rest_path / Path("__init__.py"),
|
|
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,
|
|
276
|
+
self,
|
|
277
|
+
env: Environment,
|
|
278
|
+
rest_path: Path,
|
|
279
|
+
request_builders: List[Union[RequestBuilder, OverloadedRequestBuilder]],
|
|
223
280
|
) -> None:
|
|
224
|
-
|
|
225
|
-
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
|
|
226
283
|
# write generic request builders file
|
|
227
284
|
self._autorestapi.write_file(
|
|
228
285
|
output_path / Path("_request_builders.py"),
|
|
229
|
-
|
|
230
|
-
code_model=self.code_model,
|
|
231
|
-
|
|
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
|
-
|
|
238
|
-
code_model=self.code_model,
|
|
239
|
-
|
|
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"),
|
|
245
|
-
|
|
246
|
-
|
|
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[
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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
|
-
|
|
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[
|
|
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(
|
|
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"),
|
|
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"),
|
|
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.
|
|
461
|
+
if self.code_model.request_builders:
|
|
375
462
|
self._autorestapi.write_file(
|
|
376
|
-
namespace_path / Path(f"{self.code_model.
|
|
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(
|
|
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.
|
|
481
|
+
if self.code_model.request_builders:
|
|
393
482
|
self._autorestapi.write_file(
|
|
394
|
-
namespace_path / Path("_configuration.py"),
|
|
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(
|
|
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(
|
|
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(
|
|
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.
|
|
508
|
+
if self.code_model.request_builders:
|
|
413
509
|
self._autorestapi.write_file(
|
|
414
|
-
aio_path / Path(f"{self.code_model.
|
|
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"),
|
|
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
|
-
|
|
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(
|
|
529
|
+
self._autorestapi.write_file(
|
|
530
|
+
namespace_path / Path("_metadata.json"), metadata_serializer.serialize()
|
|
531
|
+
)
|