@autorest/python 6.2.0 → 6.2.1
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/codegen/__init__.py +9 -74
- package/autorest/codegen/models/__init__.py +11 -12
- package/autorest/codegen/models/{base_type.py → base.py} +29 -10
- package/autorest/codegen/models/base_builder.py +8 -10
- package/autorest/codegen/models/client.py +111 -40
- package/autorest/codegen/models/code_model.py +131 -90
- package/autorest/codegen/models/combined_type.py +7 -7
- package/autorest/codegen/models/constant_type.py +44 -10
- package/autorest/codegen/models/credential_types.py +17 -19
- package/autorest/codegen/models/dictionary_type.py +7 -9
- package/autorest/codegen/models/enum_type.py +19 -24
- package/autorest/codegen/models/imports.py +82 -33
- package/autorest/codegen/models/list_type.py +11 -15
- package/autorest/codegen/models/lro_operation.py +6 -10
- package/autorest/codegen/models/model_type.py +20 -21
- package/autorest/codegen/models/operation.py +49 -42
- package/autorest/codegen/models/operation_group.py +11 -11
- package/autorest/codegen/models/paging_operation.py +8 -10
- package/autorest/codegen/models/parameter.py +44 -31
- package/autorest/codegen/models/parameter_list.py +16 -22
- package/autorest/codegen/models/primitive_types.py +12 -23
- package/autorest/codegen/models/property.py +11 -11
- package/autorest/codegen/models/request_builder.py +19 -19
- package/autorest/codegen/models/request_builder_parameter.py +14 -16
- package/autorest/codegen/models/response.py +24 -28
- package/autorest/codegen/serializers/__init__.py +202 -187
- package/autorest/codegen/serializers/builder_serializer.py +46 -49
- package/autorest/codegen/serializers/client_serializer.py +9 -7
- package/autorest/codegen/serializers/enum_serializer.py +4 -4
- package/autorest/codegen/serializers/general_serializer.py +26 -36
- package/autorest/codegen/serializers/import_serializer.py +30 -36
- package/autorest/codegen/serializers/metadata_serializer.py +35 -17
- package/autorest/codegen/serializers/model_init_serializer.py +6 -10
- package/autorest/codegen/serializers/model_serializer.py +42 -27
- package/autorest/codegen/serializers/operation_groups_serializer.py +12 -8
- package/autorest/codegen/serializers/operations_init_serializer.py +13 -6
- 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 +10 -12
- package/autorest/codegen/templates/client_container.py.jinja2 +2 -2
- package/autorest/codegen/templates/config.py.jinja2 +1 -1
- package/autorest/codegen/templates/config_container.py.jinja2 +3 -3
- package/autorest/codegen/templates/enum_container.py.jinja2 +2 -2
- package/autorest/codegen/templates/init.py.jinja2 +2 -2
- package/autorest/codegen/templates/lro_operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/lro_paging_operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/metadata.json.jinja2 +2 -2
- package/autorest/codegen/templates/model_container.py.jinja2 +3 -3
- package/autorest/codegen/templates/model_dpg.py.jinja2 +4 -4
- package/autorest/codegen/templates/model_init.py.jinja2 +3 -3
- package/autorest/codegen/templates/operation.py.jinja2 +1 -1
- package/autorest/codegen/templates/operation_group.py.jinja2 +2 -2
- package/autorest/codegen/templates/operation_groups_container.py.jinja2 +3 -3
- package/autorest/codegen/templates/operation_tools.jinja2 +3 -3
- package/autorest/codegen/templates/operations_folder_init.py.jinja2 +4 -4
- package/autorest/codegen/templates/packaging_templates/setup.py.jinja2 +4 -1
- 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 +2 -2
- package/autorest/codegen/templates/rest_init.py.jinja2 +1 -1
- package/autorest/codegen/templates/sample.py.jinja2 +5 -5
- package/autorest/codegen/templates/validation.py.jinja2 +1 -1
- package/autorest/codegen/templates/vendor.py.jinja2 +6 -6
- package/autorest/codegen/templates/version.py.jinja2 +2 -2
- package/autorest/m4reformatter/__init__.py +7 -6
- package/autorest/multiapi/models/imports.py +89 -18
- package/autorest/multiapi/serializers/import_serializer.py +88 -7
- package/autorest/multiapi/utils.py +6 -0
- package/autorest/preprocess/__init__.py +23 -26
- package/package.json +1 -1
- package/run_cadl.py +0 -1
- package/autorest/cadlflags/__init__.py +0 -130
- package/autorest/codegen/models/base_model.py +0 -30
|
@@ -12,8 +12,8 @@ from typing import Any, Generic, List, Type, TypeVar, Dict, Union, Optional, cas
|
|
|
12
12
|
|
|
13
13
|
from ..models import (
|
|
14
14
|
Operation,
|
|
15
|
-
NamespaceModel,
|
|
16
15
|
PagingOperation,
|
|
16
|
+
CodeModel,
|
|
17
17
|
LROOperation,
|
|
18
18
|
LROPagingOperation,
|
|
19
19
|
ModelType,
|
|
@@ -190,8 +190,8 @@ def _api_version_validation(builder: OperationType) -> str:
|
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|
class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-method
|
|
193
|
-
def __init__(self,
|
|
194
|
-
self.
|
|
193
|
+
def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
|
|
194
|
+
self.code_model = code_model
|
|
195
195
|
self.async_mode = async_mode
|
|
196
196
|
self.parameter_serializer = ParameterSerializer()
|
|
197
197
|
|
|
@@ -227,7 +227,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-
|
|
|
227
227
|
retval: List[str] = []
|
|
228
228
|
if builder.is_overload:
|
|
229
229
|
return ["@overload"]
|
|
230
|
-
if self.
|
|
230
|
+
if self.code_model.options["tracing"] and builder.want_tracing:
|
|
231
231
|
retval.append(f"@distributed_trace{'_async' if self.async_mode else ''}")
|
|
232
232
|
return retval
|
|
233
233
|
|
|
@@ -315,7 +315,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-
|
|
|
315
315
|
|
|
316
316
|
def _json_input_example_template(self, builder: BuilderType) -> List[str]:
|
|
317
317
|
template: List[str] = []
|
|
318
|
-
if self.
|
|
318
|
+
if self.code_model.options["models_mode"]:
|
|
319
319
|
# No input template if we have models
|
|
320
320
|
return template
|
|
321
321
|
if (
|
|
@@ -345,7 +345,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-
|
|
|
345
345
|
)
|
|
346
346
|
for idx in range(
|
|
347
347
|
min(
|
|
348
|
-
self.
|
|
348
|
+
self.code_model.options["polymorphic_examples"],
|
|
349
349
|
len(polymorphic_subtypes),
|
|
350
350
|
)
|
|
351
351
|
):
|
|
@@ -513,7 +513,7 @@ class RequestBuilderSerializer(
|
|
|
513
513
|
if any(
|
|
514
514
|
o
|
|
515
515
|
for o in ["low_level_client", "version_tolerant"]
|
|
516
|
-
if self.
|
|
516
|
+
if self.code_model.options.get(o)
|
|
517
517
|
):
|
|
518
518
|
url_value = _escape_str(builder.url)
|
|
519
519
|
else:
|
|
@@ -541,7 +541,7 @@ class _OperationSerializer(
|
|
|
541
541
|
|
|
542
542
|
def example_template(self, builder: OperationType) -> List[str]:
|
|
543
543
|
retval = super().example_template(builder)
|
|
544
|
-
if self.
|
|
544
|
+
if self.code_model.options["models_mode"]:
|
|
545
545
|
return retval
|
|
546
546
|
for response in builder.responses:
|
|
547
547
|
polymorphic_subtypes: List[ModelType] = []
|
|
@@ -559,7 +559,7 @@ class _OperationSerializer(
|
|
|
559
559
|
)
|
|
560
560
|
for idx in range(
|
|
561
561
|
min(
|
|
562
|
-
self.
|
|
562
|
+
self.code_model.options["polymorphic_examples"],
|
|
563
563
|
len(polymorphic_subtypes),
|
|
564
564
|
)
|
|
565
565
|
):
|
|
@@ -615,7 +615,7 @@ class _OperationSerializer(
|
|
|
615
615
|
self, builder: OperationType
|
|
616
616
|
) -> List[str]: # pylint: disable=no-self-use
|
|
617
617
|
description_list = super().param_description(builder)
|
|
618
|
-
if not self.
|
|
618
|
+
if not self.code_model.options["version_tolerant"]:
|
|
619
619
|
description_list.append(
|
|
620
620
|
":keyword callable cls: A custom type or function that will be passed the direct response"
|
|
621
621
|
)
|
|
@@ -636,7 +636,7 @@ class _OperationSerializer(
|
|
|
636
636
|
kwargs_to_pop, ParameterLocation.QUERY
|
|
637
637
|
)
|
|
638
638
|
else PopKwargType.SIMPLE,
|
|
639
|
-
check_client_input=not self.
|
|
639
|
+
check_client_input=not self.code_model.options["multiapi"],
|
|
640
640
|
)
|
|
641
641
|
kwargs.append(
|
|
642
642
|
f"cls = kwargs.pop('cls', None) {self.cls_type_annotation(builder)}"
|
|
@@ -672,9 +672,9 @@ class _OperationSerializer(
|
|
|
672
672
|
body_param.type.xml_serialization_ctxt if send_xml else None
|
|
673
673
|
)
|
|
674
674
|
ser_ctxt_name = "serialization_ctxt"
|
|
675
|
-
if xml_serialization_ctxt and self.
|
|
675
|
+
if xml_serialization_ctxt and self.code_model.options["models_mode"]:
|
|
676
676
|
retval.append(f'{ser_ctxt_name} = {{"xml": {{{xml_serialization_ctxt}}}}}')
|
|
677
|
-
if self.
|
|
677
|
+
if self.code_model.options["models_mode"] == "msrest":
|
|
678
678
|
is_xml_cmd = ", is_xml=True" if send_xml else ""
|
|
679
679
|
serialization_ctxt_cmd = (
|
|
680
680
|
f", {ser_ctxt_name}={ser_ctxt_name}" if xml_serialization_ctxt else ""
|
|
@@ -683,7 +683,7 @@ class _OperationSerializer(
|
|
|
683
683
|
f"_{body_kwarg_name} = self._serialize.body({body_param.client_name}, "
|
|
684
684
|
f"'{body_param.type.serialization_type}'{is_xml_cmd}{serialization_ctxt_cmd})"
|
|
685
685
|
)
|
|
686
|
-
elif self.
|
|
686
|
+
elif self.code_model.options["models_mode"] == "dpg":
|
|
687
687
|
create_body_call = f"_{body_kwarg_name} = json.dumps({body_param.client_name}, cls=AzureJSONEncoder)"
|
|
688
688
|
else:
|
|
689
689
|
create_body_call = f"_{body_kwarg_name} = {body_param.client_name}"
|
|
@@ -825,7 +825,7 @@ class _OperationSerializer(
|
|
|
825
825
|
is_next_request: bool = False,
|
|
826
826
|
) -> List[str]:
|
|
827
827
|
retval: List[str] = []
|
|
828
|
-
if self.
|
|
828
|
+
if self.code_model.options["builders_visibility"] == "embedded":
|
|
829
829
|
request_path_name = request_builder.name
|
|
830
830
|
else:
|
|
831
831
|
group_name = request_builder.group_name
|
|
@@ -871,7 +871,7 @@ class _OperationSerializer(
|
|
|
871
871
|
retval.append(
|
|
872
872
|
f" {body_param.client_name}={body_param.name_in_high_level_operation},"
|
|
873
873
|
)
|
|
874
|
-
if not self.
|
|
874
|
+
if not self.code_model.options["version_tolerant"]:
|
|
875
875
|
template_url = template_url or f"self.{builder.name}.metadata['url']"
|
|
876
876
|
retval.append(f" template_url={template_url},")
|
|
877
877
|
retval.append(" headers=_headers,")
|
|
@@ -883,7 +883,7 @@ class _OperationSerializer(
|
|
|
883
883
|
self, builder: OperationType, template_url: Optional[str] = None
|
|
884
884
|
) -> List[str]:
|
|
885
885
|
retval: List[str] = []
|
|
886
|
-
if not self.
|
|
886
|
+
if not self.code_model.options["version_tolerant"]:
|
|
887
887
|
pass_files = ""
|
|
888
888
|
if (
|
|
889
889
|
builder.parameters.has_body
|
|
@@ -894,7 +894,7 @@ class _OperationSerializer(
|
|
|
894
894
|
if builder.parameters.path:
|
|
895
895
|
retval.extend(self.serialize_path(builder))
|
|
896
896
|
url_to_format = "request.url"
|
|
897
|
-
if self.
|
|
897
|
+
if self.code_model.options["version_tolerant"] and template_url:
|
|
898
898
|
url_to_format = template_url
|
|
899
899
|
retval.append(
|
|
900
900
|
"request.url = self._client.format_url({}{}) # type: ignore".format(
|
|
@@ -958,16 +958,16 @@ class _OperationSerializer(
|
|
|
958
958
|
retval.append(
|
|
959
959
|
"deserialized = {}".format(
|
|
960
960
|
"response.iter_bytes()"
|
|
961
|
-
if self.
|
|
961
|
+
if self.code_model.options["version_tolerant"]
|
|
962
962
|
else "response.stream_download(self._client._pipeline)"
|
|
963
963
|
)
|
|
964
964
|
)
|
|
965
965
|
elif response.type:
|
|
966
|
-
if self.
|
|
966
|
+
if self.code_model.options["models_mode"] == "msrest":
|
|
967
967
|
retval.append(
|
|
968
968
|
f"deserialized = self._deserialize('{response.serialization_type}', pipeline_response)"
|
|
969
969
|
)
|
|
970
|
-
elif self.
|
|
970
|
+
elif self.code_model.options["models_mode"] == "dpg" and isinstance(
|
|
971
971
|
response.type, ModelType
|
|
972
972
|
):
|
|
973
973
|
retval.append(
|
|
@@ -995,9 +995,9 @@ class _OperationSerializer(
|
|
|
995
995
|
error_model = ""
|
|
996
996
|
if (
|
|
997
997
|
builder.default_error_deserialization
|
|
998
|
-
and self.
|
|
998
|
+
and self.code_model.options["models_mode"]
|
|
999
999
|
):
|
|
1000
|
-
if self.
|
|
1000
|
+
if self.code_model.options["models_mode"] == "dpg":
|
|
1001
1001
|
retval.append(
|
|
1002
1002
|
f" error = _deserialize({builder.default_error_deserialization}, response.json())"
|
|
1003
1003
|
)
|
|
@@ -1011,7 +1011,7 @@ class _OperationSerializer(
|
|
|
1011
1011
|
" raise HttpResponseError(response=response{}{})".format(
|
|
1012
1012
|
error_model,
|
|
1013
1013
|
", error_format=ARMErrorFormat"
|
|
1014
|
-
if self.
|
|
1014
|
+
if self.code_model.options["azure_arm"]
|
|
1015
1015
|
else "",
|
|
1016
1016
|
)
|
|
1017
1017
|
)
|
|
@@ -1046,10 +1046,7 @@ class _OperationSerializer(
|
|
|
1046
1046
|
self.response_headers_and_deserialization(builder.responses[0])
|
|
1047
1047
|
)
|
|
1048
1048
|
retval.append("")
|
|
1049
|
-
if
|
|
1050
|
-
builder.has_optional_return_type
|
|
1051
|
-
or self.namespace_model.options["models_mode"]
|
|
1052
|
-
):
|
|
1049
|
+
if builder.has_optional_return_type or self.code_model.options["models_mode"]:
|
|
1053
1050
|
deserialized = "deserialized"
|
|
1054
1051
|
else:
|
|
1055
1052
|
deserialized = f"cast({builder.response_type_annotation(async_mode=self.async_mode)}, deserialized)"
|
|
@@ -1065,7 +1062,7 @@ class _OperationSerializer(
|
|
|
1065
1062
|
retval.append(f"return {deserialized}")
|
|
1066
1063
|
if (
|
|
1067
1064
|
builder.request_builder.method == "HEAD"
|
|
1068
|
-
and self.
|
|
1065
|
+
and self.code_model.options["head_as_boolean"]
|
|
1069
1066
|
):
|
|
1070
1067
|
retval.append("return 200 <= response.status_code <= 299")
|
|
1071
1068
|
return retval
|
|
@@ -1084,16 +1081,16 @@ class _OperationSerializer(
|
|
|
1084
1081
|
for excep in builder.non_default_errors:
|
|
1085
1082
|
error_model_str = ""
|
|
1086
1083
|
if isinstance(excep.type, ModelType):
|
|
1087
|
-
if self.
|
|
1084
|
+
if self.code_model.options["models_mode"] == "msrest":
|
|
1088
1085
|
error_model_str = (
|
|
1089
1086
|
f", model=self._deserialize("
|
|
1090
1087
|
f"_models.{excep.type.serialization_type}, response)"
|
|
1091
1088
|
)
|
|
1092
|
-
elif self.
|
|
1089
|
+
elif self.code_model.options["models_mode"] == "dpg":
|
|
1093
1090
|
error_model_str = f", model=_deserialize(_models.{excep.type.name}, response.json())"
|
|
1094
1091
|
error_format_str = (
|
|
1095
1092
|
", error_format=ARMErrorFormat"
|
|
1096
|
-
if self.
|
|
1093
|
+
if self.code_model.options["azure_arm"]
|
|
1097
1094
|
else ""
|
|
1098
1095
|
)
|
|
1099
1096
|
for status_code in excep.status_codes:
|
|
@@ -1157,11 +1154,11 @@ PagingOperationType = TypeVar(
|
|
|
1157
1154
|
class _PagingOperationSerializer(
|
|
1158
1155
|
_OperationSerializer[PagingOperationType]
|
|
1159
1156
|
): # pylint: disable=abstract-method
|
|
1160
|
-
def __init__(self,
|
|
1157
|
+
def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
|
|
1161
1158
|
# for pylint reasons need to redefine init
|
|
1162
1159
|
# probably because inheritance is going too deep
|
|
1163
|
-
super().__init__(
|
|
1164
|
-
self.
|
|
1160
|
+
super().__init__(code_model, async_mode)
|
|
1161
|
+
self.code_model = code_model
|
|
1165
1162
|
self.async_mode = async_mode
|
|
1166
1163
|
self.parameter_serializer = ParameterSerializer()
|
|
1167
1164
|
|
|
@@ -1175,7 +1172,7 @@ class _PagingOperationSerializer(
|
|
|
1175
1172
|
retval: List[str] = []
|
|
1176
1173
|
if builder.is_overload:
|
|
1177
1174
|
return ["@overload"]
|
|
1178
|
-
if self.
|
|
1175
|
+
if self.code_model.options["tracing"] and builder.want_tracing:
|
|
1179
1176
|
retval.append("@distributed_trace")
|
|
1180
1177
|
if _api_version_validation(builder):
|
|
1181
1178
|
retval.append(_api_version_validation(builder))
|
|
@@ -1186,7 +1183,7 @@ class _PagingOperationSerializer(
|
|
|
1186
1183
|
request_builder = builder.next_request_builder
|
|
1187
1184
|
template_url = (
|
|
1188
1185
|
None
|
|
1189
|
-
if self.
|
|
1186
|
+
if self.code_model.options["version_tolerant"]
|
|
1190
1187
|
else f"'{request_builder.url}'"
|
|
1191
1188
|
)
|
|
1192
1189
|
else:
|
|
@@ -1246,7 +1243,7 @@ class _PagingOperationSerializer(
|
|
|
1246
1243
|
retval.extend(
|
|
1247
1244
|
[f" {line}" for line in self.call_next_link_request_builder(builder)]
|
|
1248
1245
|
)
|
|
1249
|
-
if not builder.next_request_builder and self.
|
|
1246
|
+
if not builder.next_request_builder and self.code_model.is_legacy:
|
|
1250
1247
|
retval.append(' request.method = "GET"')
|
|
1251
1248
|
else:
|
|
1252
1249
|
retval.append("")
|
|
@@ -1263,14 +1260,14 @@ class _PagingOperationSerializer(
|
|
|
1263
1260
|
]
|
|
1264
1261
|
response = builder.responses[0]
|
|
1265
1262
|
deserialized = "pipeline_response.http_response.json()"
|
|
1266
|
-
if self.
|
|
1263
|
+
if self.code_model.options["models_mode"] == "msrest":
|
|
1267
1264
|
deserialize_type = response.serialization_type
|
|
1268
1265
|
pylint_disable = " # pylint: disable=protected-access"
|
|
1269
1266
|
if isinstance(response.type, ModelType) and response.type.is_public:
|
|
1270
1267
|
deserialize_type = f'"{response.serialization_type}"'
|
|
1271
1268
|
pylint_disable = ""
|
|
1272
1269
|
deserialized = f"self._deserialize(\n {deserialize_type}, pipeline_response{pylint_disable}\n)"
|
|
1273
|
-
elif self.
|
|
1270
|
+
elif self.code_model.options["models_mode"] == "dpg":
|
|
1274
1271
|
deserialized = (
|
|
1275
1272
|
f"_deserialize({response.serialization_type}, pipeline_response)"
|
|
1276
1273
|
)
|
|
@@ -1278,7 +1275,7 @@ class _PagingOperationSerializer(
|
|
|
1278
1275
|
item_name = builder.item_name
|
|
1279
1276
|
list_of_elem = (
|
|
1280
1277
|
f".{item_name}"
|
|
1281
|
-
if self.
|
|
1278
|
+
if self.code_model.options["models_mode"]
|
|
1282
1279
|
else f'["{item_name}"]'
|
|
1283
1280
|
)
|
|
1284
1281
|
retval.append(f" list_of_elem = deserialized{list_of_elem}")
|
|
@@ -1288,7 +1285,7 @@ class _PagingOperationSerializer(
|
|
|
1288
1285
|
continuation_token_name = builder.continuation_token_name
|
|
1289
1286
|
if not continuation_token_name:
|
|
1290
1287
|
cont_token_property = "None"
|
|
1291
|
-
elif self.
|
|
1288
|
+
elif self.code_model.options["models_mode"]:
|
|
1292
1289
|
cont_token_property = f"deserialized.{continuation_token_name} or None"
|
|
1293
1290
|
else:
|
|
1294
1291
|
cont_token_property = f'deserialized.get("{continuation_token_name}", None)'
|
|
@@ -1331,11 +1328,11 @@ LROOperationType = TypeVar(
|
|
|
1331
1328
|
|
|
1332
1329
|
|
|
1333
1330
|
class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
|
|
1334
|
-
def __init__(self,
|
|
1331
|
+
def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
|
|
1335
1332
|
# for pylint reasons need to redefine init
|
|
1336
1333
|
# probably because inheritance is going too deep
|
|
1337
|
-
super().__init__(
|
|
1338
|
-
self.
|
|
1334
|
+
super().__init__(code_model, async_mode)
|
|
1335
|
+
self.code_model = code_model
|
|
1339
1336
|
self.async_mode = async_mode
|
|
1340
1337
|
self.parameter_serializer = ParameterSerializer()
|
|
1341
1338
|
|
|
@@ -1448,8 +1445,8 @@ class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
|
|
|
1448
1445
|
if builder.lro_response.headers:
|
|
1449
1446
|
retval.append(" response_headers = {}")
|
|
1450
1447
|
if (
|
|
1451
|
-
not self.
|
|
1452
|
-
or self.
|
|
1448
|
+
not self.code_model.options["models_mode"]
|
|
1449
|
+
or self.code_model.options["models_mode"] == "dpg"
|
|
1453
1450
|
or builder.lro_response.headers
|
|
1454
1451
|
):
|
|
1455
1452
|
retval.append(" response = pipeline_response.http_response")
|
|
@@ -1515,7 +1512,7 @@ class LROPagingOperationSerializer(
|
|
|
1515
1512
|
|
|
1516
1513
|
def get_operation_serializer(
|
|
1517
1514
|
builder: Operation,
|
|
1518
|
-
|
|
1515
|
+
code_model,
|
|
1519
1516
|
async_mode: bool,
|
|
1520
1517
|
) -> Union[
|
|
1521
1518
|
OperationSerializer,
|
|
@@ -1535,4 +1532,4 @@ def get_operation_serializer(
|
|
|
1535
1532
|
retcls = LROOperationSerializer
|
|
1536
1533
|
elif builder.operation_type == "paging":
|
|
1537
1534
|
retcls = PagingOperationSerializer
|
|
1538
|
-
return retcls(
|
|
1535
|
+
return retcls(code_model, async_mode)
|
|
@@ -61,7 +61,9 @@ class ClientSerializer:
|
|
|
61
61
|
operations_folder = ".aio.operations." if async_mode else ".operations."
|
|
62
62
|
for og in [og for og in self.client.operation_groups if not og.is_mixin]:
|
|
63
63
|
retval.append(f":ivar {og.property_name}: {og.class_name} operations")
|
|
64
|
-
property_type =
|
|
64
|
+
property_type = (
|
|
65
|
+
f"{self.client.code_model.namespace}{operations_folder}{og.class_name}"
|
|
66
|
+
)
|
|
65
67
|
retval.append(f":vartype {og.property_name}: {property_type}")
|
|
66
68
|
for param in self.client.parameters.method:
|
|
67
69
|
retval.append(
|
|
@@ -114,19 +116,19 @@ class ClientSerializer:
|
|
|
114
116
|
|
|
115
117
|
def serializers_and_operation_groups_properties(self) -> List[str]:
|
|
116
118
|
retval = []
|
|
117
|
-
if self.client.
|
|
119
|
+
if self.client.code_model.model_types:
|
|
118
120
|
client_models_value = (
|
|
119
121
|
"{k: v for k, v in models.__dict__.items() if isinstance(v, type)}"
|
|
120
122
|
)
|
|
121
123
|
else:
|
|
122
124
|
client_models_value = "{} # type: Dict[str, Any]"
|
|
123
|
-
is_msrest_model = self.client.
|
|
125
|
+
is_msrest_model = self.client.code_model.options["models_mode"] == "msrest"
|
|
124
126
|
if is_msrest_model:
|
|
125
127
|
retval.append(f"client_models = {client_models_value}")
|
|
126
128
|
client_models_str = "client_models" if is_msrest_model else ""
|
|
127
129
|
retval.append(f"self._serialize = Serializer({client_models_str})")
|
|
128
130
|
retval.append(f"self._deserialize = Deserializer({client_models_str})")
|
|
129
|
-
if not self.client.
|
|
131
|
+
if not self.client.code_model.options["client_side_validation"]:
|
|
130
132
|
retval.append("self._serialize.client_side_validation = False")
|
|
131
133
|
operation_groups = [
|
|
132
134
|
og for og in self.client.operation_groups if not og.is_mixin
|
|
@@ -174,7 +176,7 @@ class ClientSerializer:
|
|
|
174
176
|
def _request_builder_example(self, async_mode: bool) -> List[str]:
|
|
175
177
|
retval = [
|
|
176
178
|
"We have helper methods to create requests specific to this service in "
|
|
177
|
-
+ f"`{self.client.
|
|
179
|
+
+ f"`{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}`."
|
|
178
180
|
]
|
|
179
181
|
retval.append(
|
|
180
182
|
"Use these helper methods to create the request you pass to this method."
|
|
@@ -191,7 +193,7 @@ class ClientSerializer:
|
|
|
191
193
|
else:
|
|
192
194
|
rest_imported = request_builder.name
|
|
193
195
|
request_builder_name = request_builder.name
|
|
194
|
-
full_path = f"{self.client.
|
|
196
|
+
full_path = f"{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}"
|
|
195
197
|
retval.append(f">>> from {full_path} import {rest_imported}")
|
|
196
198
|
retval.append(
|
|
197
199
|
f">>> request = {request_builder_name}({request_builder_signature})"
|
|
@@ -212,7 +214,7 @@ class ClientSerializer:
|
|
|
212
214
|
def send_request_description(self, async_mode: bool) -> List[str]:
|
|
213
215
|
retval = ['"""Runs the network request through the client\'s chained policies.']
|
|
214
216
|
retval.append("")
|
|
215
|
-
if self.client.
|
|
217
|
+
if self.client.code_model.options["builders_visibility"] != "embedded":
|
|
216
218
|
retval.extend(self._request_builder_example(async_mode))
|
|
217
219
|
else:
|
|
218
220
|
retval.extend(self._rest_request_example(async_mode))
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
|
|
7
7
|
from jinja2 import Environment
|
|
8
|
-
from ..models import
|
|
8
|
+
from ..models import CodeModel
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class EnumSerializer:
|
|
12
|
-
def __init__(self,
|
|
13
|
-
self.
|
|
12
|
+
def __init__(self, code_model: CodeModel, env: Environment) -> None:
|
|
13
|
+
self.code_model = code_model
|
|
14
14
|
self.env = env
|
|
15
15
|
|
|
16
16
|
def serialize(self) -> str:
|
|
17
17
|
# Generate the enum file
|
|
18
18
|
template = self.env.get_template("enum_container.py.jinja2")
|
|
19
|
-
return template.render(
|
|
19
|
+
return template.render(code_model=self.code_model)
|
|
@@ -3,16 +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 Any
|
|
6
|
+
from typing import Any, List
|
|
7
7
|
from jinja2 import Environment
|
|
8
8
|
from .import_serializer import FileImportSerializer, TypingSection
|
|
9
9
|
from ..models.imports import MsrestImportType
|
|
10
10
|
from ..models import (
|
|
11
11
|
FileImport,
|
|
12
12
|
ImportType,
|
|
13
|
-
NamespaceModel,
|
|
14
13
|
CodeModel,
|
|
15
14
|
TokenCredentialType,
|
|
15
|
+
Client,
|
|
16
16
|
)
|
|
17
17
|
from .client_serializer import ClientSerializer, ConfigSerializer
|
|
18
18
|
|
|
@@ -28,9 +28,10 @@ _PACKAGE_MODE_FILES = [
|
|
|
28
28
|
class GeneralSerializer:
|
|
29
29
|
"""General serializer for SDK root level files"""
|
|
30
30
|
|
|
31
|
-
def __init__(self, code_model: CodeModel, env: Environment):
|
|
31
|
+
def __init__(self, code_model: CodeModel, env: Environment, async_mode: bool):
|
|
32
32
|
self.code_model = code_model
|
|
33
33
|
self.env = env
|
|
34
|
+
self.async_mode = async_mode
|
|
34
35
|
|
|
35
36
|
def serialize_setup_file(self) -> str:
|
|
36
37
|
template = self.env.get_template("packaging_templates/setup.py.jinja2")
|
|
@@ -43,8 +44,7 @@ class GeneralSerializer:
|
|
|
43
44
|
package_parts = (self.code_model.options["package_name"] or "").split("-")[:-1]
|
|
44
45
|
token_credential = any(
|
|
45
46
|
c
|
|
46
|
-
for
|
|
47
|
-
for c in nm.clients
|
|
47
|
+
for c in self.code_model.clients
|
|
48
48
|
if isinstance(getattr(c.credential, "type", None), TokenCredentialType)
|
|
49
49
|
)
|
|
50
50
|
version = self.code_model.options["package_version"]
|
|
@@ -63,47 +63,36 @@ class GeneralSerializer:
|
|
|
63
63
|
"/".join(package_parts[: i + 1]) + "/__init__.py"
|
|
64
64
|
for i in range(len(package_parts))
|
|
65
65
|
],
|
|
66
|
-
"client_name": self.code_model.
|
|
67
|
-
"namespace": self.code_model.
|
|
66
|
+
"client_name": self.code_model.clients[0].name,
|
|
67
|
+
"namespace": self.code_model.namespace,
|
|
68
68
|
}
|
|
69
69
|
params.update(self.code_model.options)
|
|
70
70
|
params.update(kwargs)
|
|
71
71
|
return template.render(**params)
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
class GeneralNamespaceSerializer:
|
|
75
|
-
"""General serializer for namespace level files"""
|
|
76
|
-
|
|
77
|
-
def __init__(
|
|
78
|
-
self, namespace_model: NamespaceModel, env: Environment, async_mode: bool
|
|
79
|
-
) -> None:
|
|
80
|
-
self.namespace_model = namespace_model
|
|
81
|
-
self.env = env
|
|
82
|
-
self.async_mode = async_mode
|
|
83
|
-
|
|
84
73
|
def serialize_pkgutil_init_file(self) -> str:
|
|
85
74
|
template = self.env.get_template("pkgutil_init.py.jinja2")
|
|
86
75
|
return template.render()
|
|
87
76
|
|
|
88
|
-
def serialize_init_file(self) -> str:
|
|
77
|
+
def serialize_init_file(self, clients: List[Client]) -> str:
|
|
89
78
|
template = self.env.get_template("init.py.jinja2")
|
|
90
|
-
clients = [c for c in self.namespace_model.clients if c.request_builders]
|
|
91
79
|
return template.render(
|
|
92
|
-
|
|
80
|
+
code_model=self.code_model,
|
|
93
81
|
clients=clients,
|
|
94
82
|
async_mode=self.async_mode,
|
|
95
83
|
)
|
|
96
84
|
|
|
97
|
-
def serialize_service_client_file(self) -> str:
|
|
85
|
+
def serialize_service_client_file(self, clients: List[Client]) -> str:
|
|
98
86
|
|
|
99
87
|
template = self.env.get_template("client_container.py.jinja2")
|
|
100
88
|
|
|
101
89
|
imports = FileImport()
|
|
102
|
-
for client in
|
|
90
|
+
for client in clients:
|
|
103
91
|
imports.merge(client.imports(self.async_mode))
|
|
104
92
|
|
|
105
93
|
return template.render(
|
|
106
|
-
|
|
94
|
+
code_model=self.code_model,
|
|
95
|
+
clients=clients,
|
|
107
96
|
async_mode=self.async_mode,
|
|
108
97
|
get_serializer=ClientSerializer,
|
|
109
98
|
imports=FileImportSerializer(imports),
|
|
@@ -114,14 +103,14 @@ class GeneralNamespaceSerializer:
|
|
|
114
103
|
|
|
115
104
|
# configure imports
|
|
116
105
|
file_import = FileImport()
|
|
117
|
-
if self.
|
|
106
|
+
if self.code_model.need_request_converter:
|
|
118
107
|
file_import.add_submodule_import(
|
|
119
108
|
"azure.core.pipeline.transport",
|
|
120
109
|
"HttpRequest",
|
|
121
110
|
ImportType.AZURECORE,
|
|
122
111
|
)
|
|
123
112
|
|
|
124
|
-
if self.
|
|
113
|
+
if self.code_model.need_mixin_abc:
|
|
125
114
|
file_import.add_submodule_import(
|
|
126
115
|
"abc",
|
|
127
116
|
"ABC",
|
|
@@ -134,12 +123,12 @@ class GeneralNamespaceSerializer:
|
|
|
134
123
|
TypingSection.TYPING,
|
|
135
124
|
)
|
|
136
125
|
file_import.add_msrest_import(
|
|
137
|
-
self.
|
|
126
|
+
self.code_model,
|
|
138
127
|
".." if self.async_mode else ".",
|
|
139
128
|
MsrestImportType.SerializerDeserializer,
|
|
140
129
|
TypingSection.TYPING,
|
|
141
130
|
)
|
|
142
|
-
for client in self.
|
|
131
|
+
for client in self.code_model.clients:
|
|
143
132
|
file_import.add_submodule_import(
|
|
144
133
|
"._configuration",
|
|
145
134
|
f"{client.name}Configuration",
|
|
@@ -147,37 +136,38 @@ class GeneralNamespaceSerializer:
|
|
|
147
136
|
)
|
|
148
137
|
|
|
149
138
|
return template.render(
|
|
150
|
-
|
|
139
|
+
code_model=self.code_model,
|
|
151
140
|
imports=FileImportSerializer(
|
|
152
141
|
file_import,
|
|
153
142
|
),
|
|
154
143
|
async_mode=self.async_mode,
|
|
155
144
|
)
|
|
156
145
|
|
|
157
|
-
def serialize_config_file(self) -> str:
|
|
146
|
+
def serialize_config_file(self, clients: List[Client]) -> str:
|
|
158
147
|
template = self.env.get_template("config_container.py.jinja2")
|
|
159
148
|
imports = FileImport()
|
|
160
|
-
for client in self.
|
|
149
|
+
for client in self.code_model.clients:
|
|
161
150
|
imports.merge(client.config.imports(self.async_mode))
|
|
162
151
|
return template.render(
|
|
163
|
-
|
|
152
|
+
code_model=self.code_model,
|
|
164
153
|
async_mode=self.async_mode,
|
|
165
154
|
imports=FileImportSerializer(imports),
|
|
166
155
|
get_serializer=ConfigSerializer,
|
|
156
|
+
clients=clients,
|
|
167
157
|
)
|
|
168
158
|
|
|
169
159
|
def serialize_version_file(self) -> str:
|
|
170
160
|
template = self.env.get_template("version.py.jinja2")
|
|
171
|
-
return template.render(
|
|
161
|
+
return template.render(code_model=self.code_model)
|
|
172
162
|
|
|
173
163
|
def serialize_serialization_file(self) -> str:
|
|
174
164
|
template = self.env.get_template("serialization.py.jinja2")
|
|
175
|
-
return template.render(
|
|
165
|
+
return template.render(code_model=self.code_model)
|
|
176
166
|
|
|
177
167
|
def serialize_model_base_file(self) -> str:
|
|
178
168
|
template = self.env.get_template("model_base.py.jinja2")
|
|
179
|
-
return template.render(
|
|
169
|
+
return template.render(code_model=self.code_model)
|
|
180
170
|
|
|
181
171
|
def serialize_validation_file(self) -> str:
|
|
182
172
|
template = self.env.get_template("validation.py.jinja2")
|
|
183
|
-
return template.render(
|
|
173
|
+
return template.render(code_model=self.code_model)
|