@autorest/python 6.1.11 → 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 +11 -8
- 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 +14 -11
- 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 +50 -49
- 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
|
@@ -12,7 +12,7 @@ from typing import Any, Generic, List, Type, TypeVar, Dict, Union, Optional, cas
|
|
|
12
12
|
|
|
13
13
|
from ..models import (
|
|
14
14
|
Operation,
|
|
15
|
-
|
|
15
|
+
NamespaceModel,
|
|
16
16
|
PagingOperation,
|
|
17
17
|
LROOperation,
|
|
18
18
|
LROPagingOperation,
|
|
@@ -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, namespace_model: NamespaceModel, async_mode: bool) -> None:
|
|
194
|
+
self.namespace_model = namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_model.options["models_mode"]:
|
|
676
676
|
retval.append(f'{ser_ctxt_name} = {{"xml": {{{xml_serialization_ctxt}}}}}')
|
|
677
|
-
if self.
|
|
677
|
+
if self.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_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.namespace_model.options["models_mode"]
|
|
999
999
|
):
|
|
1000
|
-
if self.
|
|
1000
|
+
if self.namespace_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.namespace_model.options["azure_arm"]
|
|
1015
1015
|
else "",
|
|
1016
1016
|
)
|
|
1017
1017
|
)
|
|
@@ -1046,7 +1046,10 @@ class _OperationSerializer(
|
|
|
1046
1046
|
self.response_headers_and_deserialization(builder.responses[0])
|
|
1047
1047
|
)
|
|
1048
1048
|
retval.append("")
|
|
1049
|
-
if
|
|
1049
|
+
if (
|
|
1050
|
+
builder.has_optional_return_type
|
|
1051
|
+
or self.namespace_model.options["models_mode"]
|
|
1052
|
+
):
|
|
1050
1053
|
deserialized = "deserialized"
|
|
1051
1054
|
else:
|
|
1052
1055
|
deserialized = f"cast({builder.response_type_annotation(async_mode=self.async_mode)}, deserialized)"
|
|
@@ -1062,7 +1065,7 @@ class _OperationSerializer(
|
|
|
1062
1065
|
retval.append(f"return {deserialized}")
|
|
1063
1066
|
if (
|
|
1064
1067
|
builder.request_builder.method == "HEAD"
|
|
1065
|
-
and self.
|
|
1068
|
+
and self.namespace_model.options["head_as_boolean"]
|
|
1066
1069
|
):
|
|
1067
1070
|
retval.append("return 200 <= response.status_code <= 299")
|
|
1068
1071
|
return retval
|
|
@@ -1081,16 +1084,16 @@ class _OperationSerializer(
|
|
|
1081
1084
|
for excep in builder.non_default_errors:
|
|
1082
1085
|
error_model_str = ""
|
|
1083
1086
|
if isinstance(excep.type, ModelType):
|
|
1084
|
-
if self.
|
|
1087
|
+
if self.namespace_model.options["models_mode"] == "msrest":
|
|
1085
1088
|
error_model_str = (
|
|
1086
1089
|
f", model=self._deserialize("
|
|
1087
1090
|
f"_models.{excep.type.serialization_type}, response)"
|
|
1088
1091
|
)
|
|
1089
|
-
elif self.
|
|
1092
|
+
elif self.namespace_model.options["models_mode"] == "dpg":
|
|
1090
1093
|
error_model_str = f", model=_deserialize(_models.{excep.type.name}, response.json())"
|
|
1091
1094
|
error_format_str = (
|
|
1092
1095
|
", error_format=ARMErrorFormat"
|
|
1093
|
-
if self.
|
|
1096
|
+
if self.namespace_model.options["azure_arm"]
|
|
1094
1097
|
else ""
|
|
1095
1098
|
)
|
|
1096
1099
|
for status_code in excep.status_codes:
|
|
@@ -1154,11 +1157,11 @@ PagingOperationType = TypeVar(
|
|
|
1154
1157
|
class _PagingOperationSerializer(
|
|
1155
1158
|
_OperationSerializer[PagingOperationType]
|
|
1156
1159
|
): # pylint: disable=abstract-method
|
|
1157
|
-
def __init__(self,
|
|
1160
|
+
def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
|
|
1158
1161
|
# for pylint reasons need to redefine init
|
|
1159
1162
|
# probably because inheritance is going too deep
|
|
1160
|
-
super().__init__(
|
|
1161
|
-
self.
|
|
1163
|
+
super().__init__(namespace_model, async_mode)
|
|
1164
|
+
self.namespace_model = namespace_model
|
|
1162
1165
|
self.async_mode = async_mode
|
|
1163
1166
|
self.parameter_serializer = ParameterSerializer()
|
|
1164
1167
|
|
|
@@ -1172,7 +1175,7 @@ class _PagingOperationSerializer(
|
|
|
1172
1175
|
retval: List[str] = []
|
|
1173
1176
|
if builder.is_overload:
|
|
1174
1177
|
return ["@overload"]
|
|
1175
|
-
if self.
|
|
1178
|
+
if self.namespace_model.options["tracing"] and builder.want_tracing:
|
|
1176
1179
|
retval.append("@distributed_trace")
|
|
1177
1180
|
if _api_version_validation(builder):
|
|
1178
1181
|
retval.append(_api_version_validation(builder))
|
|
@@ -1183,7 +1186,7 @@ class _PagingOperationSerializer(
|
|
|
1183
1186
|
request_builder = builder.next_request_builder
|
|
1184
1187
|
template_url = (
|
|
1185
1188
|
None
|
|
1186
|
-
if self.
|
|
1189
|
+
if self.namespace_model.options["version_tolerant"]
|
|
1187
1190
|
else f"'{request_builder.url}'"
|
|
1188
1191
|
)
|
|
1189
1192
|
else:
|
|
@@ -1203,9 +1206,7 @@ class _PagingOperationSerializer(
|
|
|
1203
1206
|
next_link_str = "next_link"
|
|
1204
1207
|
try:
|
|
1205
1208
|
api_version_param = next(
|
|
1206
|
-
p
|
|
1207
|
-
for p in self.code_model.client.parameters
|
|
1208
|
-
if p.rest_api_name == "api-version"
|
|
1209
|
+
p for p in builder.client.parameters if p.rest_api_name == "api-version"
|
|
1209
1210
|
)
|
|
1210
1211
|
retval.append("# make call to next link with the client's api-version")
|
|
1211
1212
|
retval.append("_parsed_next_link = urllib.parse.urlparse(next_link)")
|
|
@@ -1245,7 +1246,7 @@ class _PagingOperationSerializer(
|
|
|
1245
1246
|
retval.extend(
|
|
1246
1247
|
[f" {line}" for line in self.call_next_link_request_builder(builder)]
|
|
1247
1248
|
)
|
|
1248
|
-
if not builder.next_request_builder and self.
|
|
1249
|
+
if not builder.next_request_builder and self.namespace_model.is_legacy:
|
|
1249
1250
|
retval.append(' request.method = "GET"')
|
|
1250
1251
|
else:
|
|
1251
1252
|
retval.append("")
|
|
@@ -1262,14 +1263,14 @@ class _PagingOperationSerializer(
|
|
|
1262
1263
|
]
|
|
1263
1264
|
response = builder.responses[0]
|
|
1264
1265
|
deserialized = "pipeline_response.http_response.json()"
|
|
1265
|
-
if self.
|
|
1266
|
+
if self.namespace_model.options["models_mode"] == "msrest":
|
|
1266
1267
|
deserialize_type = response.serialization_type
|
|
1267
1268
|
pylint_disable = " # pylint: disable=protected-access"
|
|
1268
1269
|
if isinstance(response.type, ModelType) and response.type.is_public:
|
|
1269
1270
|
deserialize_type = f'"{response.serialization_type}"'
|
|
1270
1271
|
pylint_disable = ""
|
|
1271
1272
|
deserialized = f"self._deserialize(\n {deserialize_type}, pipeline_response{pylint_disable}\n)"
|
|
1272
|
-
elif self.
|
|
1273
|
+
elif self.namespace_model.options["models_mode"] == "dpg":
|
|
1273
1274
|
deserialized = (
|
|
1274
1275
|
f"_deserialize({response.serialization_type}, pipeline_response)"
|
|
1275
1276
|
)
|
|
@@ -1277,7 +1278,7 @@ class _PagingOperationSerializer(
|
|
|
1277
1278
|
item_name = builder.item_name
|
|
1278
1279
|
list_of_elem = (
|
|
1279
1280
|
f".{item_name}"
|
|
1280
|
-
if self.
|
|
1281
|
+
if self.namespace_model.options["models_mode"]
|
|
1281
1282
|
else f'["{item_name}"]'
|
|
1282
1283
|
)
|
|
1283
1284
|
retval.append(f" list_of_elem = deserialized{list_of_elem}")
|
|
@@ -1287,7 +1288,7 @@ class _PagingOperationSerializer(
|
|
|
1287
1288
|
continuation_token_name = builder.continuation_token_name
|
|
1288
1289
|
if not continuation_token_name:
|
|
1289
1290
|
cont_token_property = "None"
|
|
1290
|
-
elif self.
|
|
1291
|
+
elif self.namespace_model.options["models_mode"]:
|
|
1291
1292
|
cont_token_property = f"deserialized.{continuation_token_name} or None"
|
|
1292
1293
|
else:
|
|
1293
1294
|
cont_token_property = f'deserialized.get("{continuation_token_name}", None)'
|
|
@@ -1330,11 +1331,11 @@ LROOperationType = TypeVar(
|
|
|
1330
1331
|
|
|
1331
1332
|
|
|
1332
1333
|
class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
|
|
1333
|
-
def __init__(self,
|
|
1334
|
+
def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
|
|
1334
1335
|
# for pylint reasons need to redefine init
|
|
1335
1336
|
# probably because inheritance is going too deep
|
|
1336
|
-
super().__init__(
|
|
1337
|
-
self.
|
|
1337
|
+
super().__init__(namespace_model, async_mode)
|
|
1338
|
+
self.namespace_model = namespace_model
|
|
1338
1339
|
self.async_mode = async_mode
|
|
1339
1340
|
self.parameter_serializer = ParameterSerializer()
|
|
1340
1341
|
|
|
@@ -1447,8 +1448,8 @@ class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
|
|
|
1447
1448
|
if builder.lro_response.headers:
|
|
1448
1449
|
retval.append(" response_headers = {}")
|
|
1449
1450
|
if (
|
|
1450
|
-
not self.
|
|
1451
|
-
or self.
|
|
1451
|
+
not self.namespace_model.options["models_mode"]
|
|
1452
|
+
or self.namespace_model.options["models_mode"] == "dpg"
|
|
1452
1453
|
or builder.lro_response.headers
|
|
1453
1454
|
):
|
|
1454
1455
|
retval.append(" response = pipeline_response.http_response")
|
|
@@ -1514,7 +1515,7 @@ class LROPagingOperationSerializer(
|
|
|
1514
1515
|
|
|
1515
1516
|
def get_operation_serializer(
|
|
1516
1517
|
builder: Operation,
|
|
1517
|
-
|
|
1518
|
+
namespace_model,
|
|
1518
1519
|
async_mode: bool,
|
|
1519
1520
|
) -> Union[
|
|
1520
1521
|
OperationSerializer,
|
|
@@ -1534,4 +1535,4 @@ def get_operation_serializer(
|
|
|
1534
1535
|
retcls = LROOperationSerializer
|
|
1535
1536
|
elif builder.operation_type == "paging":
|
|
1536
1537
|
retcls = PagingOperationSerializer
|
|
1537
|
-
return retcls(
|
|
1538
|
+
return retcls(namespace_model, async_mode)
|
|
@@ -6,18 +6,18 @@
|
|
|
6
6
|
from typing import List
|
|
7
7
|
|
|
8
8
|
from . import utils
|
|
9
|
-
from ..models import
|
|
9
|
+
from ..models import Client, ParameterMethodLocation
|
|
10
10
|
from .parameter_serializer import ParameterSerializer, PopKwargType
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class ClientSerializer:
|
|
14
|
-
def __init__(self,
|
|
15
|
-
self.
|
|
14
|
+
def __init__(self, client: Client) -> None:
|
|
15
|
+
self.client = client
|
|
16
16
|
self.parameter_serializer = ParameterSerializer()
|
|
17
17
|
|
|
18
18
|
def _init_signature(self, async_mode: bool) -> str:
|
|
19
19
|
pylint_disable = ""
|
|
20
|
-
if not self.
|
|
20
|
+
if not self.client.parameters.credential:
|
|
21
21
|
pylint_disable = (
|
|
22
22
|
" # pylint: disable=missing-client-constructor-parameter-credential"
|
|
23
23
|
)
|
|
@@ -25,9 +25,7 @@ class ClientSerializer:
|
|
|
25
25
|
function_def="def",
|
|
26
26
|
method_name="__init__",
|
|
27
27
|
need_self_param=True,
|
|
28
|
-
method_param_signatures=self.
|
|
29
|
-
async_mode
|
|
30
|
-
),
|
|
28
|
+
method_param_signatures=self.client.parameters.method_signature(async_mode),
|
|
31
29
|
pylint_disable=pylint_disable,
|
|
32
30
|
)
|
|
33
31
|
|
|
@@ -40,7 +38,7 @@ class ClientSerializer:
|
|
|
40
38
|
|
|
41
39
|
def pop_kwargs_from_signature(self) -> List[str]:
|
|
42
40
|
return self.parameter_serializer.pop_kwargs_from_signature(
|
|
43
|
-
self.
|
|
41
|
+
self.client.parameters.kwargs_to_pop,
|
|
44
42
|
check_kwarg_dict=False,
|
|
45
43
|
pop_headers_kwarg=PopKwargType.NO,
|
|
46
44
|
pop_params_kwarg=PopKwargType.NO,
|
|
@@ -48,12 +46,12 @@ class ClientSerializer:
|
|
|
48
46
|
|
|
49
47
|
@property
|
|
50
48
|
def class_definition(self) -> str:
|
|
51
|
-
class_name = self.
|
|
52
|
-
has_mixin_og = any(og for og in self.
|
|
49
|
+
class_name = self.client.name
|
|
50
|
+
has_mixin_og = any(og for og in self.client.operation_groups if og.is_mixin)
|
|
53
51
|
base_class = ""
|
|
54
52
|
if has_mixin_og:
|
|
55
53
|
base_class = f"{class_name}OperationsMixin"
|
|
56
|
-
pylint_disable = self.
|
|
54
|
+
pylint_disable = self.client.pylint_disable
|
|
57
55
|
if base_class:
|
|
58
56
|
return f"class {class_name}({base_class}):{pylint_disable}"
|
|
59
57
|
return f"class {class_name}:{pylint_disable}"
|
|
@@ -61,19 +59,18 @@ class ClientSerializer:
|
|
|
61
59
|
def property_descriptions(self, async_mode: bool) -> List[str]:
|
|
62
60
|
retval: List[str] = []
|
|
63
61
|
operations_folder = ".aio.operations." if async_mode else ".operations."
|
|
64
|
-
for og in [og for og in self.
|
|
62
|
+
for og in [og for og in self.client.operation_groups if not og.is_mixin]:
|
|
65
63
|
retval.append(f":ivar {og.property_name}: {og.class_name} operations")
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
for param in self.code_model.client.parameters.method:
|
|
64
|
+
property_type = f"{self.client.namespace_model.namespace}{operations_folder}{og.class_name}"
|
|
65
|
+
retval.append(f":vartype {og.property_name}: {property_type}")
|
|
66
|
+
for param in self.client.parameters.method:
|
|
70
67
|
retval.append(
|
|
71
68
|
f":{param.description_keyword} {param.client_name}: {param.description}"
|
|
72
69
|
)
|
|
73
70
|
retval.append(
|
|
74
71
|
f":{param.docstring_type_keyword} {param.client_name}: {param.docstring_type(async_mode=async_mode)}"
|
|
75
72
|
)
|
|
76
|
-
if self.
|
|
73
|
+
if self.client.has_lro_operations:
|
|
77
74
|
retval.append(
|
|
78
75
|
":keyword int polling_interval: Default waiting time between two polls for LRO operations "
|
|
79
76
|
"if no Retry-After header is present."
|
|
@@ -82,11 +79,11 @@ class ClientSerializer:
|
|
|
82
79
|
return retval
|
|
83
80
|
|
|
84
81
|
def initialize_config(self) -> str:
|
|
85
|
-
config_name = f"{self.
|
|
82
|
+
config_name = f"{self.client.name}Configuration"
|
|
86
83
|
config_call = ", ".join(
|
|
87
84
|
[
|
|
88
85
|
f"{p.client_name}={p.client_name}"
|
|
89
|
-
for p in self.
|
|
86
|
+
for p in self.client.config.parameters.method
|
|
90
87
|
if p.method_location != ParameterMethodLocation.KWARG
|
|
91
88
|
]
|
|
92
89
|
+ ["**kwargs"]
|
|
@@ -96,9 +93,7 @@ class ClientSerializer:
|
|
|
96
93
|
@property
|
|
97
94
|
def host_variable_name(self) -> str:
|
|
98
95
|
try:
|
|
99
|
-
return next(
|
|
100
|
-
p for p in self.code_model.client.parameters if p.is_host
|
|
101
|
-
).client_name
|
|
96
|
+
return next(p for p in self.client.parameters if p.is_host).client_name
|
|
102
97
|
except StopIteration:
|
|
103
98
|
return "_endpoint"
|
|
104
99
|
|
|
@@ -106,12 +101,12 @@ class ClientSerializer:
|
|
|
106
101
|
def should_init_super(self) -> bool:
|
|
107
102
|
return any(
|
|
108
103
|
og
|
|
109
|
-
for og in self.
|
|
104
|
+
for og in self.client.operation_groups
|
|
110
105
|
if og.is_mixin and og.has_abstract_operations
|
|
111
106
|
)
|
|
112
107
|
|
|
113
108
|
def initialize_pipeline_client(self, async_mode: bool) -> str:
|
|
114
|
-
pipeline_client_name = self.
|
|
109
|
+
pipeline_client_name = self.client.pipeline_class(async_mode)
|
|
115
110
|
return (
|
|
116
111
|
f"self._client = {pipeline_client_name}(base_url={self.host_variable_name}, "
|
|
117
112
|
"config=self._config, **kwargs)"
|
|
@@ -119,22 +114,22 @@ class ClientSerializer:
|
|
|
119
114
|
|
|
120
115
|
def serializers_and_operation_groups_properties(self) -> List[str]:
|
|
121
116
|
retval = []
|
|
122
|
-
if self.
|
|
117
|
+
if self.client.namespace_model.model_types:
|
|
123
118
|
client_models_value = (
|
|
124
119
|
"{k: v for k, v in models.__dict__.items() if isinstance(v, type)}"
|
|
125
120
|
)
|
|
126
121
|
else:
|
|
127
122
|
client_models_value = "{} # type: Dict[str, Any]"
|
|
128
|
-
is_msrest_model = self.
|
|
123
|
+
is_msrest_model = self.client.namespace_model.options["models_mode"] == "msrest"
|
|
129
124
|
if is_msrest_model:
|
|
130
125
|
retval.append(f"client_models = {client_models_value}")
|
|
131
126
|
client_models_str = "client_models" if is_msrest_model else ""
|
|
132
127
|
retval.append(f"self._serialize = Serializer({client_models_str})")
|
|
133
128
|
retval.append(f"self._deserialize = Deserializer({client_models_str})")
|
|
134
|
-
if not self.
|
|
129
|
+
if not self.client.namespace_model.options["client_side_validation"]:
|
|
135
130
|
retval.append("self._serialize.client_side_validation = False")
|
|
136
131
|
operation_groups = [
|
|
137
|
-
og for og in self.
|
|
132
|
+
og for og in self.client.operation_groups if not og.is_mixin
|
|
138
133
|
]
|
|
139
134
|
for og in operation_groups:
|
|
140
135
|
retval.extend(
|
|
@@ -149,10 +144,10 @@ class ClientSerializer:
|
|
|
149
144
|
def _send_request_signature(self) -> str:
|
|
150
145
|
send_request_signature = [
|
|
151
146
|
"request: HttpRequest,"
|
|
152
|
-
] + self.
|
|
147
|
+
] + self.client.parameters.method_signature_kwargs
|
|
153
148
|
return self.parameter_serializer.serialize_method(
|
|
154
149
|
function_def="def",
|
|
155
|
-
method_name=self.
|
|
150
|
+
method_name=self.client.send_request_name,
|
|
156
151
|
need_self_param=True,
|
|
157
152
|
method_param_signatures=send_request_signature,
|
|
158
153
|
)
|
|
@@ -171,7 +166,7 @@ class ClientSerializer:
|
|
|
171
166
|
def _example_make_call(self, async_mode: bool) -> List[str]:
|
|
172
167
|
http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
|
|
173
168
|
retval = [
|
|
174
|
-
f">>> response = {'await ' if async_mode else ''}client.{self.
|
|
169
|
+
f">>> response = {'await ' if async_mode else ''}client.{self.client.send_request_name}(request)"
|
|
175
170
|
]
|
|
176
171
|
retval.append(f"<{http_response}: 200 OK>")
|
|
177
172
|
return retval
|
|
@@ -179,14 +174,14 @@ class ClientSerializer:
|
|
|
179
174
|
def _request_builder_example(self, async_mode: bool) -> List[str]:
|
|
180
175
|
retval = [
|
|
181
176
|
"We have helper methods to create requests specific to this service in "
|
|
182
|
-
+ f"`{self.
|
|
177
|
+
+ f"`{self.client.namespace_model.namespace}.{self.client.namespace_model.rest_layer_name}`."
|
|
183
178
|
]
|
|
184
179
|
retval.append(
|
|
185
180
|
"Use these helper methods to create the request you pass to this method."
|
|
186
181
|
)
|
|
187
182
|
retval.append("")
|
|
188
183
|
|
|
189
|
-
request_builder = self.
|
|
184
|
+
request_builder = self.client.request_builders[0]
|
|
190
185
|
request_builder_signature = ", ".join(request_builder.parameters.call)
|
|
191
186
|
if request_builder.group_name:
|
|
192
187
|
rest_imported = request_builder.group_name
|
|
@@ -196,9 +191,8 @@ class ClientSerializer:
|
|
|
196
191
|
else:
|
|
197
192
|
rest_imported = request_builder.name
|
|
198
193
|
request_builder_name = request_builder.name
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
)
|
|
194
|
+
full_path = f"{self.client.namespace_model.namespace}.{self.client.namespace_model.rest_layer_name}"
|
|
195
|
+
retval.append(f">>> from {full_path} import {rest_imported}")
|
|
202
196
|
retval.append(
|
|
203
197
|
f">>> request = {request_builder_name}({request_builder_signature})"
|
|
204
198
|
)
|
|
@@ -218,7 +212,7 @@ class ClientSerializer:
|
|
|
218
212
|
def send_request_description(self, async_mode: bool) -> List[str]:
|
|
219
213
|
retval = ['"""Runs the network request through the client\'s chained policies.']
|
|
220
214
|
retval.append("")
|
|
221
|
-
if self.
|
|
215
|
+
if self.client.namespace_model.options["builders_visibility"] != "embedded":
|
|
222
216
|
retval.extend(self._request_builder_example(async_mode))
|
|
223
217
|
else:
|
|
224
218
|
retval.extend(self._rest_request_example(async_mode))
|
|
@@ -242,13 +236,13 @@ class ClientSerializer:
|
|
|
242
236
|
|
|
243
237
|
def serialize_path(self) -> List[str]:
|
|
244
238
|
return self.parameter_serializer.serialize_path(
|
|
245
|
-
self.
|
|
239
|
+
self.client.parameters.path, "self._serialize"
|
|
246
240
|
)
|
|
247
241
|
|
|
248
242
|
|
|
249
243
|
class ConfigSerializer:
|
|
250
|
-
def __init__(self,
|
|
251
|
-
self.
|
|
244
|
+
def __init__(self, client: Client) -> None:
|
|
245
|
+
self.client = client
|
|
252
246
|
self.parameter_serializer = ParameterSerializer()
|
|
253
247
|
|
|
254
248
|
def _init_signature(self, async_mode: bool) -> str:
|
|
@@ -256,7 +250,7 @@ class ConfigSerializer:
|
|
|
256
250
|
function_def="def",
|
|
257
251
|
method_name="__init__",
|
|
258
252
|
need_self_param=True,
|
|
259
|
-
method_param_signatures=self.
|
|
253
|
+
method_param_signatures=self.client.config.parameters.method_signature(
|
|
260
254
|
async_mode
|
|
261
255
|
),
|
|
262
256
|
)
|
|
@@ -270,7 +264,7 @@ class ConfigSerializer:
|
|
|
270
264
|
|
|
271
265
|
def pop_kwargs_from_signature(self) -> List[str]:
|
|
272
266
|
return self.parameter_serializer.pop_kwargs_from_signature(
|
|
273
|
-
self.
|
|
267
|
+
self.client.config.parameters.kwargs_to_pop,
|
|
274
268
|
check_kwarg_dict=False,
|
|
275
269
|
pop_headers_kwarg=PopKwargType.NO,
|
|
276
270
|
pop_params_kwarg=PopKwargType.NO,
|
|
@@ -279,21 +273,21 @@ class ConfigSerializer:
|
|
|
279
273
|
def set_constants(self) -> List[str]:
|
|
280
274
|
return [
|
|
281
275
|
f"self.{p.client_name} = {p.client_default_value_declaration}"
|
|
282
|
-
for p in self.
|
|
283
|
-
if p not in self.
|
|
276
|
+
for p in self.client.config.parameters.constant
|
|
277
|
+
if p not in self.client.config.parameters.method
|
|
284
278
|
]
|
|
285
279
|
|
|
286
280
|
def check_required_parameters(self) -> List[str]:
|
|
287
281
|
return [
|
|
288
282
|
f"if {p.client_name} is None:\n"
|
|
289
283
|
f" raise ValueError(\"Parameter '{p.client_name}' must not be None.\")"
|
|
290
|
-
for p in self.
|
|
284
|
+
for p in self.client.config.parameters.method
|
|
291
285
|
if not (p.optional or p.constant)
|
|
292
286
|
]
|
|
293
287
|
|
|
294
288
|
def property_descriptions(self, async_mode: bool) -> List[str]:
|
|
295
289
|
retval: List[str] = []
|
|
296
|
-
for p in self.
|
|
290
|
+
for p in self.client.config.parameters.method:
|
|
297
291
|
retval.append(f":{p.description_keyword} {p.client_name}: {p.description}")
|
|
298
292
|
retval.append(
|
|
299
293
|
f":{p.docstring_type_keyword} {p.client_name}: {p.docstring_type(async_mode=async_mode)}"
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
|
|
7
7
|
from jinja2 import Environment
|
|
8
|
-
from ..models import
|
|
8
|
+
from ..models import NamespaceModel
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class EnumSerializer:
|
|
12
|
-
def __init__(self,
|
|
13
|
-
self.
|
|
12
|
+
def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
|
|
13
|
+
self.namespace_model = namespace_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(namespace_model=self.namespace_model)
|