@autorest/python 6.1.10 → 6.2.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/autorest/_utils.py +2 -1
- package/autorest/codegen/__init__.py +87 -80
- package/autorest/codegen/models/__init__.py +12 -9
- package/autorest/codegen/models/base_builder.py +11 -5
- package/autorest/codegen/models/base_model.py +5 -3
- package/autorest/codegen/models/base_type.py +7 -5
- package/autorest/codegen/models/client.py +131 -32
- package/autorest/codegen/models/code_model.py +92 -120
- package/autorest/codegen/models/combined_type.py +9 -6
- package/autorest/codegen/models/constant_type.py +6 -6
- package/autorest/codegen/models/credential_types.py +18 -16
- package/autorest/codegen/models/dictionary_type.py +8 -6
- package/autorest/codegen/models/enum_type.py +24 -17
- package/autorest/codegen/models/imports.py +4 -4
- package/autorest/codegen/models/list_type.py +14 -10
- package/autorest/codegen/models/lro_operation.py +14 -6
- package/autorest/codegen/models/model_type.py +19 -19
- package/autorest/codegen/models/operation.py +50 -33
- package/autorest/codegen/models/operation_group.py +23 -12
- package/autorest/codegen/models/paging_operation.py +15 -20
- package/autorest/codegen/models/parameter.py +25 -25
- package/autorest/codegen/models/parameter_list.py +22 -16
- package/autorest/codegen/models/primitive_types.py +21 -11
- package/autorest/codegen/models/property.py +7 -7
- package/autorest/codegen/models/request_builder.py +31 -20
- package/autorest/codegen/models/request_builder_parameter.py +18 -13
- package/autorest/codegen/models/response.py +29 -22
- package/autorest/codegen/serializers/__init__.py +196 -139
- package/autorest/codegen/serializers/builder_serializer.py +59 -53
- package/autorest/codegen/serializers/client_serializer.py +40 -46
- package/autorest/codegen/serializers/enum_serializer.py +4 -4
- package/autorest/codegen/serializers/general_serializer.py +96 -43
- package/autorest/codegen/serializers/metadata_serializer.py +20 -16
- package/autorest/codegen/serializers/model_init_serializer.py +10 -6
- package/autorest/codegen/serializers/model_serializer.py +8 -8
- package/autorest/codegen/serializers/operation_groups_serializer.py +24 -12
- package/autorest/codegen/serializers/operations_init_serializer.py +6 -7
- package/autorest/codegen/serializers/patch_serializer.py +4 -4
- package/autorest/codegen/serializers/request_builders_serializer.py +6 -6
- package/autorest/codegen/serializers/sample_serializer.py +146 -0
- package/autorest/codegen/templates/client.py.jinja2 +7 -15
- package/autorest/codegen/templates/client_container.py.jinja2 +12 -0
- package/autorest/codegen/templates/config.py.jinja2 +13 -26
- package/autorest/codegen/templates/config_container.py.jinja2 +16 -0
- package/autorest/codegen/templates/enum_container.py.jinja2 +3 -3
- package/autorest/codegen/templates/init.py.jinja2 +11 -5
- package/autorest/codegen/templates/lro_operation.py.jinja2 +2 -2
- package/autorest/codegen/templates/lro_paging_operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/metadata.json.jinja2 +13 -14
- package/autorest/codegen/templates/model_container.py.jinja2 +3 -3
- package/autorest/codegen/templates/model_init.py.jinja2 +4 -4
- package/autorest/codegen/templates/operation.py.jinja2 +2 -2
- package/autorest/codegen/templates/operation_group.py.jinja2 +3 -3
- package/autorest/codegen/templates/operation_groups_container.py.jinja2 +7 -7
- package/autorest/codegen/templates/operation_tools.jinja2 +3 -3
- package/autorest/codegen/templates/operations_folder_init.py.jinja2 +4 -4
- package/autorest/codegen/templates/{CHANGELOG.md.jinja2 → packaging_templates/CHANGELOG.md.jinja2} +0 -0
- package/autorest/codegen/templates/{LICENSE.jinja2 → packaging_templates/LICENSE.jinja2} +0 -0
- package/autorest/codegen/templates/{MANIFEST.in.jinja2 → packaging_templates/MANIFEST.in.jinja2} +0 -0
- package/autorest/codegen/templates/{README.md.jinja2 → packaging_templates/README.md.jinja2} +0 -0
- package/autorest/codegen/templates/{dev_requirements.txt.jinja2 → packaging_templates/dev_requirements.txt.jinja2} +0 -0
- package/autorest/codegen/templates/{setup.py.jinja2 → packaging_templates/setup.py.jinja2} +9 -9
- package/autorest/codegen/templates/paging_operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/request_builder.py.jinja2 +1 -1
- package/autorest/codegen/templates/request_builders.py.jinja2 +3 -3
- package/autorest/codegen/templates/rest_init.py.jinja2 +1 -1
- package/autorest/codegen/templates/sample.py.jinja2 +44 -0
- package/autorest/codegen/templates/validation.py.jinja2 +1 -1
- package/autorest/codegen/templates/vendor.py.jinja2 +9 -7
- package/autorest/codegen/templates/version.py.jinja2 +2 -2
- package/autorest/m4reformatter/__init__.py +20 -7
- package/autorest/preprocess/__init__.py +38 -23
- package/package.json +1 -1
|
@@ -3,22 +3,81 @@
|
|
|
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 Any
|
|
6
7
|
from jinja2 import Environment
|
|
7
8
|
from .import_serializer import FileImportSerializer, TypingSection
|
|
8
9
|
from ..models.imports import MsrestImportType
|
|
9
10
|
from ..models import (
|
|
10
11
|
FileImport,
|
|
11
12
|
ImportType,
|
|
13
|
+
NamespaceModel,
|
|
12
14
|
CodeModel,
|
|
15
|
+
TokenCredentialType,
|
|
13
16
|
)
|
|
14
17
|
from .client_serializer import ClientSerializer, ConfigSerializer
|
|
15
18
|
|
|
19
|
+
_PACKAGE_MODE_FILES = [
|
|
20
|
+
"CHANGELOG.md.jinja2",
|
|
21
|
+
"dev_requirements.txt.jinja2",
|
|
22
|
+
"LICENSE.jinja2",
|
|
23
|
+
"MANIFEST.in.jinja2",
|
|
24
|
+
"README.md.jinja2",
|
|
25
|
+
]
|
|
26
|
+
|
|
16
27
|
|
|
17
28
|
class GeneralSerializer:
|
|
29
|
+
"""General serializer for SDK root level files"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, code_model: CodeModel, env: Environment):
|
|
32
|
+
self.code_model = code_model
|
|
33
|
+
self.env = env
|
|
34
|
+
|
|
35
|
+
def serialize_setup_file(self) -> str:
|
|
36
|
+
template = self.env.get_template("packaging_templates/setup.py.jinja2")
|
|
37
|
+
params = {}
|
|
38
|
+
params.update(self.code_model.options)
|
|
39
|
+
return template.render(code_model=self.code_model, **params)
|
|
40
|
+
|
|
41
|
+
def serialize_package_file(self, template_name: str, **kwargs: Any) -> str:
|
|
42
|
+
template = self.env.get_template(template_name)
|
|
43
|
+
package_parts = (self.code_model.options["package_name"] or "").split("-")[:-1]
|
|
44
|
+
token_credential = any(
|
|
45
|
+
c
|
|
46
|
+
for nm in self.code_model.namespace_models
|
|
47
|
+
for c in nm.clients
|
|
48
|
+
if isinstance(getattr(c.credential, "type", None), TokenCredentialType)
|
|
49
|
+
)
|
|
50
|
+
version = self.code_model.options["package_version"]
|
|
51
|
+
if any(x in version for x in ["a", "b", "rc"]) or version[0] == "0":
|
|
52
|
+
dev_status = "4 - Beta"
|
|
53
|
+
else:
|
|
54
|
+
dev_status = "5 - Production/Stable"
|
|
55
|
+
params = {
|
|
56
|
+
"code_model": self.code_model,
|
|
57
|
+
"dev_status": dev_status,
|
|
58
|
+
"token_credential": token_credential,
|
|
59
|
+
"pkgutil_names": [
|
|
60
|
+
".".join(package_parts[: i + 1]) for i in range(len(package_parts))
|
|
61
|
+
],
|
|
62
|
+
"init_names": [
|
|
63
|
+
"/".join(package_parts[: i + 1]) + "/__init__.py"
|
|
64
|
+
for i in range(len(package_parts))
|
|
65
|
+
],
|
|
66
|
+
"client_name": self.code_model.namespace_models[0].clients[0].name,
|
|
67
|
+
"namespace": self.code_model.namespace_models[0],
|
|
68
|
+
}
|
|
69
|
+
params.update(self.code_model.options)
|
|
70
|
+
params.update(kwargs)
|
|
71
|
+
return template.render(**params)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class GeneralNamespaceSerializer:
|
|
75
|
+
"""General serializer for namespace level files"""
|
|
76
|
+
|
|
18
77
|
def __init__(
|
|
19
|
-
self,
|
|
78
|
+
self, namespace_model: NamespaceModel, env: Environment, async_mode: bool
|
|
20
79
|
) -> None:
|
|
21
|
-
self.
|
|
80
|
+
self.namespace_model = namespace_model
|
|
22
81
|
self.env = env
|
|
23
82
|
self.async_mode = async_mode
|
|
24
83
|
|
|
@@ -28,19 +87,26 @@ class GeneralSerializer:
|
|
|
28
87
|
|
|
29
88
|
def serialize_init_file(self) -> str:
|
|
30
89
|
template = self.env.get_template("init.py.jinja2")
|
|
31
|
-
|
|
90
|
+
clients = [c for c in self.namespace_model.clients if c.request_builders]
|
|
91
|
+
return template.render(
|
|
92
|
+
namespace_model=self.namespace_model,
|
|
93
|
+
clients=clients,
|
|
94
|
+
async_mode=self.async_mode,
|
|
95
|
+
)
|
|
32
96
|
|
|
33
97
|
def serialize_service_client_file(self) -> str:
|
|
34
98
|
|
|
35
|
-
template = self.env.get_template("
|
|
99
|
+
template = self.env.get_template("client_container.py.jinja2")
|
|
100
|
+
|
|
101
|
+
imports = FileImport()
|
|
102
|
+
for client in self.namespace_model.clients:
|
|
103
|
+
imports.merge(client.imports(self.async_mode))
|
|
36
104
|
|
|
37
105
|
return template.render(
|
|
38
|
-
|
|
106
|
+
namespace_model=self.namespace_model,
|
|
39
107
|
async_mode=self.async_mode,
|
|
40
|
-
|
|
41
|
-
imports=FileImportSerializer(
|
|
42
|
-
self.code_model.client.imports(self.async_mode),
|
|
43
|
-
),
|
|
108
|
+
get_serializer=ClientSerializer,
|
|
109
|
+
imports=FileImportSerializer(imports),
|
|
44
110
|
)
|
|
45
111
|
|
|
46
112
|
def serialize_vendor_file(self) -> str:
|
|
@@ -48,14 +114,14 @@ class GeneralSerializer:
|
|
|
48
114
|
|
|
49
115
|
# configure imports
|
|
50
116
|
file_import = FileImport()
|
|
51
|
-
if self.
|
|
117
|
+
if self.namespace_model.need_request_converter:
|
|
52
118
|
file_import.add_submodule_import(
|
|
53
119
|
"azure.core.pipeline.transport",
|
|
54
120
|
"HttpRequest",
|
|
55
121
|
ImportType.AZURECORE,
|
|
56
122
|
)
|
|
57
123
|
|
|
58
|
-
if self.
|
|
124
|
+
if self.namespace_model.need_mixin_abc:
|
|
59
125
|
file_import.add_submodule_import(
|
|
60
126
|
"abc",
|
|
61
127
|
"ABC",
|
|
@@ -67,20 +133,21 @@ class GeneralSerializer:
|
|
|
67
133
|
ImportType.AZURECORE,
|
|
68
134
|
TypingSection.TYPING,
|
|
69
135
|
)
|
|
70
|
-
file_import.add_submodule_import(
|
|
71
|
-
"._configuration",
|
|
72
|
-
f"{self.code_model.client.name}Configuration",
|
|
73
|
-
ImportType.LOCAL,
|
|
74
|
-
)
|
|
75
136
|
file_import.add_msrest_import(
|
|
76
|
-
self.
|
|
137
|
+
self.namespace_model,
|
|
77
138
|
".." if self.async_mode else ".",
|
|
78
139
|
MsrestImportType.SerializerDeserializer,
|
|
79
140
|
TypingSection.TYPING,
|
|
80
141
|
)
|
|
142
|
+
for client in self.namespace_model.clients:
|
|
143
|
+
file_import.add_submodule_import(
|
|
144
|
+
"._configuration",
|
|
145
|
+
f"{client.name}Configuration",
|
|
146
|
+
ImportType.LOCAL,
|
|
147
|
+
)
|
|
81
148
|
|
|
82
149
|
return template.render(
|
|
83
|
-
|
|
150
|
+
namespace_model=self.namespace_model,
|
|
84
151
|
imports=FileImportSerializer(
|
|
85
152
|
file_import,
|
|
86
153
|
),
|
|
@@ -88,43 +155,29 @@ class GeneralSerializer:
|
|
|
88
155
|
)
|
|
89
156
|
|
|
90
157
|
def serialize_config_file(self) -> str:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
sdk_moniker = (
|
|
96
|
-
package_name if package_name else self.code_model.client.name.lower()
|
|
97
|
-
)
|
|
98
|
-
template = self.env.get_template("config.py.jinja2")
|
|
158
|
+
template = self.env.get_template("config_container.py.jinja2")
|
|
159
|
+
imports = FileImport()
|
|
160
|
+
for client in self.namespace_model.clients:
|
|
161
|
+
imports.merge(client.config.imports(self.async_mode))
|
|
99
162
|
return template.render(
|
|
100
|
-
|
|
163
|
+
namespace_model=self.namespace_model,
|
|
101
164
|
async_mode=self.async_mode,
|
|
102
|
-
imports=FileImportSerializer(
|
|
103
|
-
|
|
104
|
-
),
|
|
105
|
-
serializer=ConfigSerializer(self.code_model),
|
|
106
|
-
sdk_moniker=sdk_moniker,
|
|
165
|
+
imports=FileImportSerializer(imports),
|
|
166
|
+
get_serializer=ConfigSerializer,
|
|
107
167
|
)
|
|
108
168
|
|
|
109
169
|
def serialize_version_file(self) -> str:
|
|
110
170
|
template = self.env.get_template("version.py.jinja2")
|
|
111
|
-
return template.render(
|
|
112
|
-
|
|
113
|
-
def serialize_setup_file(self) -> str:
|
|
114
|
-
template = self.env.get_template("setup.py.jinja2")
|
|
115
|
-
params = {}
|
|
116
|
-
params.update(self.code_model.options)
|
|
117
|
-
params.update(self.code_model.package_dependency)
|
|
118
|
-
return template.render(code_model=self.code_model, **params)
|
|
171
|
+
return template.render(namespace_model=self.namespace_model)
|
|
119
172
|
|
|
120
173
|
def serialize_serialization_file(self) -> str:
|
|
121
174
|
template = self.env.get_template("serialization.py.jinja2")
|
|
122
|
-
return template.render(
|
|
175
|
+
return template.render(namespace_model=self.namespace_model)
|
|
123
176
|
|
|
124
177
|
def serialize_model_base_file(self) -> str:
|
|
125
178
|
template = self.env.get_template("model_base.py.jinja2")
|
|
126
|
-
return template.render(
|
|
179
|
+
return template.render(namespace_model=self.namespace_model)
|
|
127
180
|
|
|
128
181
|
def serialize_validation_file(self) -> str:
|
|
129
182
|
template = self.env.get_template("validation.py.jinja2")
|
|
130
|
-
return template.render(
|
|
183
|
+
return template.render(namespace_model=self.namespace_model)
|
|
@@ -8,12 +8,12 @@ import json
|
|
|
8
8
|
from typing import List, Optional, Set, Tuple, Dict, Union
|
|
9
9
|
from jinja2 import Environment
|
|
10
10
|
from ..models import (
|
|
11
|
-
CodeModel,
|
|
12
11
|
OperationGroup,
|
|
13
12
|
LROOperation,
|
|
14
13
|
PagingOperation,
|
|
15
14
|
TypingSection,
|
|
16
15
|
ImportType,
|
|
16
|
+
NamespaceModel,
|
|
17
17
|
)
|
|
18
18
|
from .builder_serializer import get_operation_serializer
|
|
19
19
|
|
|
@@ -62,14 +62,17 @@ def _mixin_imports(
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
class MetadataSerializer:
|
|
65
|
-
def __init__(self,
|
|
66
|
-
self.
|
|
65
|
+
def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
|
|
66
|
+
self.namespace_model = namespace_model
|
|
67
|
+
self.client = self.namespace_model.clients[
|
|
68
|
+
0
|
|
69
|
+
] # we only do one client for multiapi
|
|
67
70
|
self.env = env
|
|
68
71
|
|
|
69
72
|
def _choose_api_version(self) -> Tuple[str, List[str]]:
|
|
70
73
|
chosen_version = ""
|
|
71
74
|
total_api_version_set: Set[str] = set()
|
|
72
|
-
for operation_group in self.
|
|
75
|
+
for operation_group in self.namespace_model.operation_groups:
|
|
73
76
|
total_api_version_set.update(operation_group.api_versions)
|
|
74
77
|
|
|
75
78
|
total_api_version_list = list(total_api_version_set)
|
|
@@ -82,7 +85,7 @@ class MetadataSerializer:
|
|
|
82
85
|
if len(total_api_version_list) == 1:
|
|
83
86
|
chosen_version = total_api_version_list[0]
|
|
84
87
|
elif len(total_api_version_list) > 1:
|
|
85
|
-
module_version = self.
|
|
88
|
+
module_version = self.namespace_model.namespace.split(".")[-1]
|
|
86
89
|
for api_version in total_api_version_list:
|
|
87
90
|
if "v{}".format(api_version.replace("-", "_")) == module_version:
|
|
88
91
|
chosen_version = api_version
|
|
@@ -99,7 +102,7 @@ class MetadataSerializer:
|
|
|
99
102
|
mixin_operation_group: Optional[OperationGroup] = next(
|
|
100
103
|
(
|
|
101
104
|
operation_group
|
|
102
|
-
for operation_group in self.
|
|
105
|
+
for operation_group in self.namespace_model.operation_groups
|
|
103
106
|
if operation_group.is_mixin
|
|
104
107
|
),
|
|
105
108
|
None,
|
|
@@ -112,14 +115,15 @@ class MetadataSerializer:
|
|
|
112
115
|
chosen_version, total_api_version_list = self._choose_api_version()
|
|
113
116
|
|
|
114
117
|
# setting to true, because for multiapi we always generate with a version file with version 0.1.0
|
|
115
|
-
self.
|
|
118
|
+
self.namespace_model.options["package_version"] = "0.1.0"
|
|
116
119
|
template = self.env.get_template("metadata.json.jinja2")
|
|
117
120
|
|
|
118
121
|
return template.render(
|
|
122
|
+
namespace_model=self.namespace_model,
|
|
119
123
|
chosen_version=chosen_version,
|
|
120
124
|
total_api_version_list=total_api_version_list,
|
|
121
|
-
|
|
122
|
-
global_parameters=self.
|
|
125
|
+
client=self.client,
|
|
126
|
+
global_parameters=self.client.parameters,
|
|
123
127
|
mixin_operations=mixin_operations,
|
|
124
128
|
any=any,
|
|
125
129
|
is_lro=_is_lro,
|
|
@@ -128,26 +132,26 @@ class MetadataSerializer:
|
|
|
128
132
|
sync_mixin_imports=sync_mixin_imports,
|
|
129
133
|
async_mixin_imports=async_mixin_imports,
|
|
130
134
|
sync_client_imports=_json_serialize_imports(
|
|
131
|
-
self.
|
|
135
|
+
self.client.imports_for_multiapi(async_mode=False).to_dict()
|
|
132
136
|
),
|
|
133
137
|
async_client_imports=_json_serialize_imports(
|
|
134
|
-
self.
|
|
138
|
+
self.client.imports_for_multiapi(async_mode=True).to_dict()
|
|
135
139
|
),
|
|
136
140
|
sync_config_imports=_json_serialize_imports(
|
|
137
|
-
self.
|
|
141
|
+
self.client.config.imports(async_mode=False).to_dict()
|
|
138
142
|
),
|
|
139
143
|
async_config_imports=_json_serialize_imports(
|
|
140
|
-
self.
|
|
144
|
+
self.client.config.imports(async_mode=True).to_dict()
|
|
141
145
|
),
|
|
142
146
|
get_async_operation_serializer=functools.partial(
|
|
143
147
|
get_operation_serializer,
|
|
144
|
-
|
|
148
|
+
namespace_model=self.client.namespace_model,
|
|
145
149
|
async_mode=True,
|
|
146
150
|
),
|
|
147
151
|
get_sync_operation_serializer=functools.partial(
|
|
148
152
|
get_operation_serializer,
|
|
149
|
-
|
|
153
|
+
namespace_model=self.client.namespace_model,
|
|
150
154
|
async_mode=False,
|
|
151
155
|
),
|
|
152
|
-
has_credential=bool(self.
|
|
156
|
+
has_credential=bool(self.client.credential),
|
|
153
157
|
)
|
|
@@ -4,19 +4,21 @@
|
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
from jinja2 import Environment
|
|
7
|
-
from ..models import
|
|
7
|
+
from ..models import NamespaceModel
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class ModelInitSerializer:
|
|
11
|
-
def __init__(self,
|
|
12
|
-
self.
|
|
11
|
+
def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
|
|
12
|
+
self.namespace_model = namespace_model
|
|
13
13
|
self.env = env
|
|
14
14
|
|
|
15
15
|
def serialize(self) -> str:
|
|
16
|
-
schemas = [s.name for s in self.
|
|
16
|
+
schemas = [s.name for s in self.namespace_model.public_model_types]
|
|
17
17
|
schemas.sort()
|
|
18
18
|
enums = (
|
|
19
|
-
[e.name for e in self.
|
|
19
|
+
[e.name for e in self.namespace_model.enums]
|
|
20
|
+
if self.namespace_model.enums
|
|
21
|
+
else None
|
|
20
22
|
)
|
|
21
23
|
|
|
22
24
|
if enums:
|
|
@@ -32,4 +34,6 @@ class ModelInitSerializer:
|
|
|
32
34
|
)
|
|
33
35
|
|
|
34
36
|
template = self.env.get_template("model_init.py.jinja2")
|
|
35
|
-
return template.render(
|
|
37
|
+
return template.render(
|
|
38
|
+
namespace_model=self.namespace_model, schemas=schemas, enums=enums
|
|
39
|
+
)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import cast, List
|
|
7
7
|
from abc import ABC, abstractmethod
|
|
8
8
|
from jinja2 import Environment
|
|
9
|
-
from ..models import ModelType,
|
|
9
|
+
from ..models import ModelType, NamespaceModel, Property
|
|
10
10
|
from ..models.imports import FileImport, TypingSection, MsrestImportType, ImportType
|
|
11
11
|
from .import_serializer import FileImportSerializer
|
|
12
12
|
|
|
@@ -28,8 +28,8 @@ def _documentation_string(
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class _ModelSerializer(ABC):
|
|
31
|
-
def __init__(self,
|
|
32
|
-
self.
|
|
31
|
+
def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
|
|
32
|
+
self.namespace_model = namespace_model
|
|
33
33
|
self.env = env
|
|
34
34
|
|
|
35
35
|
@abstractmethod
|
|
@@ -40,7 +40,7 @@ class _ModelSerializer(ABC):
|
|
|
40
40
|
# Generate the models
|
|
41
41
|
template = self.env.get_template("model_container.py.jinja2")
|
|
42
42
|
return template.render(
|
|
43
|
-
|
|
43
|
+
namespace_model=self.namespace_model,
|
|
44
44
|
imports=FileImportSerializer(self.imports()),
|
|
45
45
|
str=str,
|
|
46
46
|
serializer=self,
|
|
@@ -130,9 +130,9 @@ class MsrestModelSerializer(_ModelSerializer):
|
|
|
130
130
|
def imports(self) -> FileImport:
|
|
131
131
|
file_import = FileImport()
|
|
132
132
|
file_import.add_msrest_import(
|
|
133
|
-
self.
|
|
133
|
+
self.namespace_model, "..", MsrestImportType.Module, TypingSection.REGULAR
|
|
134
134
|
)
|
|
135
|
-
for model in self.
|
|
135
|
+
for model in self.namespace_model.model_types:
|
|
136
136
|
file_import.merge(model.imports(is_operation_file=False))
|
|
137
137
|
init_line_parameters = [
|
|
138
138
|
p for p in model.properties if not p.readonly and not p.is_discriminator
|
|
@@ -144,7 +144,7 @@ class MsrestModelSerializer(_ModelSerializer):
|
|
|
144
144
|
def declare_model(self, model: ModelType) -> str:
|
|
145
145
|
basename = (
|
|
146
146
|
"msrest.serialization.Model"
|
|
147
|
-
if self.
|
|
147
|
+
if self.namespace_model.options["client_side_validation"]
|
|
148
148
|
else "_serialization.Model"
|
|
149
149
|
)
|
|
150
150
|
if model.parents:
|
|
@@ -207,7 +207,7 @@ class DpgModelSerializer(_ModelSerializer):
|
|
|
207
207
|
file_import.add_submodule_import("typing", "Mapping", ImportType.STDLIB)
|
|
208
208
|
file_import.add_submodule_import("typing", "Any", ImportType.STDLIB)
|
|
209
209
|
|
|
210
|
-
for model in self.
|
|
210
|
+
for model in self.namespace_model.model_types:
|
|
211
211
|
file_import.merge(model.imports(is_operation_file=False))
|
|
212
212
|
for param in model.properties:
|
|
213
213
|
file_import.merge(param.imports())
|
|
@@ -3,14 +3,16 @@
|
|
|
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 Optional
|
|
6
|
+
from typing import Optional, List, Union
|
|
7
7
|
import functools
|
|
8
8
|
from jinja2 import Environment
|
|
9
9
|
|
|
10
10
|
from ..models import (
|
|
11
|
-
|
|
11
|
+
NamespaceModel,
|
|
12
12
|
OperationGroup,
|
|
13
13
|
FileImport,
|
|
14
|
+
RequestBuilder,
|
|
15
|
+
OverloadedRequestBuilder,
|
|
14
16
|
)
|
|
15
17
|
from .import_serializer import FileImportSerializer
|
|
16
18
|
from .builder_serializer import get_operation_serializer, RequestBuilderSerializer
|
|
@@ -19,21 +21,33 @@ from .builder_serializer import get_operation_serializer, RequestBuilderSerializ
|
|
|
19
21
|
class OperationGroupsSerializer:
|
|
20
22
|
def __init__(
|
|
21
23
|
self,
|
|
22
|
-
|
|
24
|
+
namespace_model: NamespaceModel,
|
|
23
25
|
env: Environment,
|
|
24
26
|
async_mode: bool,
|
|
25
27
|
operation_group: Optional[OperationGroup] = None,
|
|
26
|
-
)
|
|
27
|
-
self.
|
|
28
|
+
):
|
|
29
|
+
self.namespace_model = namespace_model
|
|
28
30
|
self.env = env
|
|
29
31
|
self.async_mode = async_mode
|
|
30
32
|
self.operation_group = operation_group
|
|
31
33
|
|
|
34
|
+
def _get_request_builders(
|
|
35
|
+
self, operation_group: OperationGroup
|
|
36
|
+
) -> List[Union[OverloadedRequestBuilder, RequestBuilder]]:
|
|
37
|
+
return [
|
|
38
|
+
r
|
|
39
|
+
for r in self.namespace_model.request_builders
|
|
40
|
+
if r.client.name == operation_group.client.name
|
|
41
|
+
and r.group_name == operation_group.property_name
|
|
42
|
+
and not r.is_overload
|
|
43
|
+
and not r.abstract
|
|
44
|
+
]
|
|
45
|
+
|
|
32
46
|
def serialize(self) -> str:
|
|
33
47
|
operation_groups = (
|
|
34
48
|
[self.operation_group]
|
|
35
49
|
if self.operation_group
|
|
36
|
-
else self.
|
|
50
|
+
else self.namespace_model.operation_groups
|
|
37
51
|
)
|
|
38
52
|
imports = FileImport()
|
|
39
53
|
for operation_group in operation_groups:
|
|
@@ -47,7 +61,7 @@ class OperationGroupsSerializer:
|
|
|
47
61
|
"operation_groups_container.py.jinja2"
|
|
48
62
|
)
|
|
49
63
|
return template.render(
|
|
50
|
-
|
|
64
|
+
namespace_model=self.namespace_model,
|
|
51
65
|
operation_groups=operation_groups,
|
|
52
66
|
imports=FileImportSerializer(
|
|
53
67
|
imports,
|
|
@@ -56,14 +70,12 @@ class OperationGroupsSerializer:
|
|
|
56
70
|
async_mode=self.async_mode,
|
|
57
71
|
get_operation_serializer=functools.partial(
|
|
58
72
|
get_operation_serializer,
|
|
59
|
-
|
|
73
|
+
namespace_model=self.namespace_model,
|
|
60
74
|
async_mode=self.async_mode,
|
|
61
75
|
),
|
|
62
76
|
request_builder_serializer=RequestBuilderSerializer(
|
|
63
|
-
self.
|
|
77
|
+
self.namespace_model,
|
|
64
78
|
async_mode=False,
|
|
65
79
|
),
|
|
66
|
-
|
|
67
|
-
rb for rb in self.code_model.request_builders if not rb.abstract
|
|
68
|
-
],
|
|
80
|
+
get_request_builders=self._get_request_builders,
|
|
69
81
|
)
|
|
@@ -7,14 +7,14 @@ from typing import List
|
|
|
7
7
|
from jinja2 import Environment
|
|
8
8
|
|
|
9
9
|
from autorest.codegen.models.operation_group import OperationGroup
|
|
10
|
-
from ..models import
|
|
10
|
+
from ..models import NamespaceModel
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class OperationsInitSerializer:
|
|
14
14
|
def __init__(
|
|
15
|
-
self,
|
|
15
|
+
self, namespace_model: NamespaceModel, env: Environment, async_mode: bool
|
|
16
16
|
) -> None:
|
|
17
|
-
self.
|
|
17
|
+
self.namespace_model = namespace_model
|
|
18
18
|
self.env = env
|
|
19
19
|
self.async_mode = async_mode
|
|
20
20
|
|
|
@@ -22,13 +22,13 @@ class OperationsInitSerializer:
|
|
|
22
22
|
def _get_filename(operation_group: OperationGroup) -> str:
|
|
23
23
|
return (
|
|
24
24
|
"_operations"
|
|
25
|
-
if self.
|
|
25
|
+
if self.namespace_model.options["combine_operation_files"]
|
|
26
26
|
else operation_group.filename
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
return [
|
|
30
30
|
f"from .{_get_filename(og)} import {og.class_name}"
|
|
31
|
-
for og in self.
|
|
31
|
+
for og in self.namespace_model.operation_groups
|
|
32
32
|
]
|
|
33
33
|
|
|
34
34
|
def serialize(self) -> str:
|
|
@@ -37,8 +37,7 @@ class OperationsInitSerializer:
|
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
return operation_group_init_template.render(
|
|
40
|
-
|
|
41
|
-
operation_groups=self.code_model.operation_groups,
|
|
40
|
+
namespace_model=self.namespace_model,
|
|
42
41
|
async_mode=self.async_mode,
|
|
43
42
|
operation_group_imports=self.operation_group_imports,
|
|
44
43
|
)
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
from jinja2 import Environment
|
|
7
7
|
from .import_serializer import FileImportSerializer
|
|
8
|
-
from ..models import
|
|
8
|
+
from ..models import NamespaceModel, FileImport, ImportType, TypingSection
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class PatchSerializer:
|
|
12
|
-
def __init__(self, env: Environment,
|
|
12
|
+
def __init__(self, env: Environment, namespace_model: NamespaceModel) -> None:
|
|
13
13
|
self.env = env
|
|
14
|
-
self.
|
|
14
|
+
self.namespace_model = namespace_model
|
|
15
15
|
|
|
16
16
|
def serialize(self) -> str:
|
|
17
17
|
template = self.env.get_template("patch.py.jinja2")
|
|
@@ -20,6 +20,6 @@ class PatchSerializer:
|
|
|
20
20
|
"typing", "List", ImportType.STDLIB, TypingSection.CONDITIONAL
|
|
21
21
|
)
|
|
22
22
|
return template.render(
|
|
23
|
-
|
|
23
|
+
namespace_model=self.namespace_model,
|
|
24
24
|
imports=FileImportSerializer(imports),
|
|
25
25
|
)
|
|
@@ -8,18 +8,18 @@ from jinja2 import Environment
|
|
|
8
8
|
|
|
9
9
|
from ..models import FileImport
|
|
10
10
|
from .import_serializer import FileImportSerializer
|
|
11
|
-
from ..models import
|
|
11
|
+
from ..models import NamespaceModel, RequestBuilderType
|
|
12
12
|
from .builder_serializer import RequestBuilderSerializer
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class RequestBuildersSerializer:
|
|
16
16
|
def __init__(
|
|
17
17
|
self,
|
|
18
|
-
|
|
18
|
+
namespace_model: NamespaceModel,
|
|
19
19
|
env: Environment,
|
|
20
20
|
request_builders: List[RequestBuilderType],
|
|
21
21
|
) -> None:
|
|
22
|
-
self.
|
|
22
|
+
self.namespace_model = namespace_model
|
|
23
23
|
self.env = env
|
|
24
24
|
self.request_builders = request_builders
|
|
25
25
|
self.group_name = request_builders[0].group_name
|
|
@@ -35,7 +35,7 @@ class RequestBuildersSerializer:
|
|
|
35
35
|
def serialize_init(self) -> str:
|
|
36
36
|
template = self.env.get_template("rest_init.py.jinja2")
|
|
37
37
|
return template.render(
|
|
38
|
-
|
|
38
|
+
namespace_model=self.namespace_model,
|
|
39
39
|
request_builders=[r for r in self.request_builders if not r.is_overload],
|
|
40
40
|
)
|
|
41
41
|
|
|
@@ -43,12 +43,12 @@ class RequestBuildersSerializer:
|
|
|
43
43
|
template = self.env.get_template("request_builders.py.jinja2")
|
|
44
44
|
|
|
45
45
|
return template.render(
|
|
46
|
-
|
|
46
|
+
namespace_model=self.namespace_model,
|
|
47
47
|
request_builders=[rb for rb in self.request_builders if not rb.abstract],
|
|
48
48
|
imports=FileImportSerializer(
|
|
49
49
|
self.imports,
|
|
50
50
|
),
|
|
51
51
|
request_builder_serializer=RequestBuilderSerializer(
|
|
52
|
-
self.
|
|
52
|
+
self.namespace_model, async_mode=False
|
|
53
53
|
),
|
|
54
54
|
)
|