@typespec/http-client-python 0.13.0-dev.1 → 0.13.0-dev.3
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/dist/emitter/types.d.ts.map +1 -1
- package/dist/emitter/types.js +12 -5
- package/dist/emitter/types.js.map +1 -1
- package/emitter/src/types.ts +14 -7
- package/emitter/temp/tsconfig.tsbuildinfo +1 -1
- package/eng/scripts/setup/__pycache__/package_manager.cpython-39.pyc +0 -0
- package/eng/scripts/setup/__pycache__/venvtools.cpython-39.pyc +0 -0
- package/eng/scripts/setup/build_pygen_wheel.py +9 -10
- package/eng/scripts/setup/install.py +13 -17
- package/eng/scripts/setup/package_manager.py +139 -0
- package/eng/scripts/setup/prepare.py +4 -12
- package/eng/scripts/setup/venvtools.py +1 -42
- package/generator/build/lib/pygen/__init__.py +176 -2
- package/generator/build/lib/pygen/black.py +1 -1
- package/generator/build/lib/pygen/codegen/__init__.py +4 -256
- package/generator/build/lib/pygen/codegen/_utils.py +0 -3
- package/generator/build/lib/pygen/codegen/models/__init__.py +1 -1
- package/generator/build/lib/pygen/codegen/models/base_builder.py +1 -1
- package/generator/build/lib/pygen/codegen/models/client.py +12 -12
- package/generator/build/lib/pygen/codegen/models/code_model.py +10 -9
- package/generator/build/lib/pygen/codegen/models/enum_type.py +4 -4
- package/generator/build/lib/pygen/codegen/models/imports.py +1 -1
- package/generator/build/lib/pygen/codegen/models/list_type.py +6 -6
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +1 -1
- package/generator/build/lib/pygen/codegen/models/operation.py +16 -16
- package/generator/build/lib/pygen/codegen/models/operation_group.py +4 -4
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +4 -4
- package/generator/build/lib/pygen/codegen/models/parameter.py +8 -8
- package/generator/build/lib/pygen/codegen/models/property.py +7 -1
- package/generator/build/lib/pygen/codegen/models/request_builder.py +2 -2
- package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +2 -2
- package/generator/build/lib/pygen/codegen/models/response.py +3 -3
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +27 -28
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +31 -31
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +4 -4
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +4 -4
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +5 -5
- package/generator/build/lib/pygen/codegen/templates/config.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +2 -2
- package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +2 -2
- package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +38 -7
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +9 -9
- package/generator/build/lib/pygen/codegen/templates/request_builder.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +6 -6
- package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +1 -1
- package/generator/build/lib/pygen/preprocess/__init__.py +1 -1
- package/generator/build/lib/pygen/utils.py +4 -0
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/__init__.py +176 -2
- package/generator/pygen/black.py +1 -1
- package/generator/pygen/codegen/__init__.py +4 -256
- package/generator/pygen/codegen/_utils.py +0 -3
- package/generator/pygen/codegen/models/__init__.py +1 -1
- package/generator/pygen/codegen/models/base_builder.py +1 -1
- package/generator/pygen/codegen/models/client.py +12 -12
- package/generator/pygen/codegen/models/code_model.py +10 -9
- package/generator/pygen/codegen/models/enum_type.py +4 -4
- package/generator/pygen/codegen/models/imports.py +1 -1
- package/generator/pygen/codegen/models/list_type.py +6 -6
- package/generator/pygen/codegen/models/lro_operation.py +1 -1
- package/generator/pygen/codegen/models/operation.py +16 -16
- package/generator/pygen/codegen/models/operation_group.py +4 -4
- package/generator/pygen/codegen/models/paging_operation.py +4 -4
- package/generator/pygen/codegen/models/parameter.py +8 -8
- package/generator/pygen/codegen/models/property.py +7 -1
- package/generator/pygen/codegen/models/request_builder.py +2 -2
- package/generator/pygen/codegen/models/request_builder_parameter.py +2 -2
- package/generator/pygen/codegen/models/response.py +3 -3
- package/generator/pygen/codegen/serializers/__init__.py +27 -28
- package/generator/pygen/codegen/serializers/builder_serializer.py +31 -31
- package/generator/pygen/codegen/serializers/client_serializer.py +4 -4
- package/generator/pygen/codegen/serializers/general_serializer.py +4 -4
- package/generator/pygen/codegen/serializers/metadata_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/model_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/sample_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/test_serializer.py +5 -5
- package/generator/pygen/codegen/templates/config.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/conftest.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/metadata.json.jinja2 +2 -2
- package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +2 -2
- package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operation_tools.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +38 -7
- package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +9 -9
- package/generator/pygen/codegen/templates/request_builder.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/sample.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/test.py.jinja2 +6 -6
- package/generator/pygen/codegen/templates/version.py.jinja2 +1 -1
- package/generator/pygen/preprocess/__init__.py +1 -1
- package/generator/pygen/utils.py +4 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py +31 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_largeheader_async.py +30 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_nonresource_async.py +36 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py +9 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_deserialize_empty_string_as_null_async.py +20 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py +7 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_encode_duration_async.py +19 -0
- package/generator/test/azure/mock_api_tests/test_azure_arm_commonproperties.py +29 -0
- package/generator/test/azure/mock_api_tests/test_azure_arm_largeheader.py +27 -0
- package/generator/test/azure/mock_api_tests/test_azure_arm_nonresource.py +34 -0
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py +8 -0
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_deserialize_empty_string_as_null.py +19 -0
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py +4 -0
- package/generator/test/azure/mock_api_tests/test_azure_encode_duration.py +18 -0
- package/generator/test/azure/requirements.txt +4 -0
- package/generator/test/unittests/test_optional_return_type.py +5 -5
- package/generator/test/unittests/test_parameter_ordering.py +5 -5
- package/generator/test/unittests/test_sort_schema.py +4 -4
- package/package.json +1 -1
|
@@ -326,7 +326,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
|
|
|
326
326
|
|
|
327
327
|
if (
|
|
328
328
|
isinstance(body_param.type, (ListType, DictionaryType))
|
|
329
|
-
and self.code_model.options["
|
|
329
|
+
and self.code_model.options["models-mode"] == "msrest"
|
|
330
330
|
):
|
|
331
331
|
return template
|
|
332
332
|
|
|
@@ -351,7 +351,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
|
|
|
351
351
|
)
|
|
352
352
|
for idx in range(
|
|
353
353
|
min(
|
|
354
|
-
self.code_model.options["
|
|
354
|
+
self.code_model.options["polymorphic-examples"],
|
|
355
355
|
len(polymorphic_subtypes),
|
|
356
356
|
)
|
|
357
357
|
):
|
|
@@ -494,7 +494,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
|
|
|
494
494
|
return retval
|
|
495
495
|
|
|
496
496
|
def construct_url(self, builder: RequestBuilderType) -> str:
|
|
497
|
-
if any(o for o in ["
|
|
497
|
+
if any(o for o in ["low-level-client", "version-tolerant"] if self.code_model.options.get(o)):
|
|
498
498
|
url_value = _escape_str(builder.url)
|
|
499
499
|
else:
|
|
500
500
|
url_value = f'kwargs.pop("template_url", {_escape_str(builder.url)})'
|
|
@@ -522,7 +522,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
522
522
|
return "response"
|
|
523
523
|
|
|
524
524
|
def example_template(self, builder: OperationType) -> List[str]:
|
|
525
|
-
if self.code_model.options["
|
|
525
|
+
if self.code_model.options["models-mode"] in ("msrest", "dpg"):
|
|
526
526
|
return []
|
|
527
527
|
retval = super().example_template(builder)
|
|
528
528
|
for response in builder.responses:
|
|
@@ -540,7 +540,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
540
540
|
)
|
|
541
541
|
for idx in range(
|
|
542
542
|
min(
|
|
543
|
-
self.code_model.options["
|
|
543
|
+
self.code_model.options["polymorphic-examples"],
|
|
544
544
|
len(polymorphic_subtypes),
|
|
545
545
|
)
|
|
546
546
|
):
|
|
@@ -559,7 +559,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
559
559
|
def make_pipeline_call(self, builder: OperationType) -> List[str]:
|
|
560
560
|
retval = []
|
|
561
561
|
type_ignore = self.async_mode and builder.group_name == "" # is in a mixin
|
|
562
|
-
if builder.stream_value is True and not self.code_model.options["
|
|
562
|
+
if builder.stream_value is True and not self.code_model.options["version-tolerant"]:
|
|
563
563
|
retval.append("_decompress = kwargs.pop('decompress', True)")
|
|
564
564
|
pylint_disable = " # pylint: disable=protected-access" if self.code_model.is_azure_flavor else ""
|
|
565
565
|
retval.extend(
|
|
@@ -688,9 +688,9 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
688
688
|
send_xml = builder.parameters.body_parameter.type.is_xml
|
|
689
689
|
xml_serialization_ctxt = body_param.type.xml_serialization_ctxt if send_xml else None
|
|
690
690
|
ser_ctxt_name = "serialization_ctxt"
|
|
691
|
-
if xml_serialization_ctxt and self.code_model.options["
|
|
691
|
+
if xml_serialization_ctxt and self.code_model.options["models-mode"]:
|
|
692
692
|
retval.append(f'{ser_ctxt_name} = {{"xml": {{{xml_serialization_ctxt}}}}}')
|
|
693
|
-
if self.code_model.options["
|
|
693
|
+
if self.code_model.options["models-mode"] == "msrest":
|
|
694
694
|
is_xml_cmd = _xml_config(send_xml, builder.parameters.body_parameter.content_types)
|
|
695
695
|
serialization_ctxt_cmd = f", {ser_ctxt_name}={ser_ctxt_name}" if xml_serialization_ctxt else ""
|
|
696
696
|
serialization_type = body_param.type.serialization_type(serialize_namespace=self.serialize_namespace)
|
|
@@ -698,7 +698,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
698
698
|
f"_{body_kwarg_name} = self._serialize.body({body_param.client_name}, "
|
|
699
699
|
f"'{serialization_type}'{is_xml_cmd}{serialization_ctxt_cmd})"
|
|
700
700
|
)
|
|
701
|
-
elif self.code_model.options["
|
|
701
|
+
elif self.code_model.options["models-mode"] == "dpg":
|
|
702
702
|
if json_serializable(body_param.default_content_type):
|
|
703
703
|
if hasattr(body_param.type, "encode") and body_param.type.encode: # type: ignore
|
|
704
704
|
create_body_call = (
|
|
@@ -812,7 +812,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
812
812
|
is_next_request: bool = False,
|
|
813
813
|
) -> List[str]:
|
|
814
814
|
retval: List[str] = []
|
|
815
|
-
if self.code_model.options["
|
|
815
|
+
if self.code_model.options["builders-visibility"] == "embedded":
|
|
816
816
|
request_path_name = request_builder.name
|
|
817
817
|
else:
|
|
818
818
|
group_name = request_builder.group_name
|
|
@@ -873,7 +873,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
873
873
|
if builder.parameters.path:
|
|
874
874
|
retval.extend(self.serialize_path(builder))
|
|
875
875
|
url_to_format = "_request.url"
|
|
876
|
-
if self.code_model.options["
|
|
876
|
+
if self.code_model.options["version-tolerant"] and template_url:
|
|
877
877
|
url_to_format = template_url
|
|
878
878
|
retval.append(
|
|
879
879
|
"_request.url = self._client.format_url({}{})".format(
|
|
@@ -948,7 +948,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
948
948
|
deserialized = f"{'await ' if self.async_mode else ''}response.read()"
|
|
949
949
|
else:
|
|
950
950
|
stream_logic = False
|
|
951
|
-
if self.code_model.options["
|
|
951
|
+
if self.code_model.options["version-tolerant"]:
|
|
952
952
|
deserialized = "response.iter_bytes()"
|
|
953
953
|
else:
|
|
954
954
|
deserialized = (
|
|
@@ -959,13 +959,13 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
959
959
|
pylint_disable = ""
|
|
960
960
|
if isinstance(response.type, ModelType) and response.type.internal:
|
|
961
961
|
pylint_disable = " # pylint: disable=protected-access"
|
|
962
|
-
if self.code_model.options["
|
|
962
|
+
if self.code_model.options["models-mode"] == "msrest":
|
|
963
963
|
deserialize_code.append("deserialized = self._deserialize(")
|
|
964
964
|
serialization_type = response.serialization_type(serialize_namespace=self.serialize_namespace)
|
|
965
965
|
deserialize_code.append(f" '{serialization_type}',{pylint_disable}")
|
|
966
966
|
deserialize_code.append(" pipeline_response.http_response")
|
|
967
967
|
deserialize_code.append(")")
|
|
968
|
-
elif self.code_model.options["
|
|
968
|
+
elif self.code_model.options["models-mode"] == "dpg":
|
|
969
969
|
if builder.has_stream_response:
|
|
970
970
|
deserialize_code.append("deserialized = response.content")
|
|
971
971
|
else:
|
|
@@ -1019,7 +1019,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1019
1019
|
retval.extend([f" {l}" for l in response_read])
|
|
1020
1020
|
retval.append(" map_error(status_code=response.status_code, response=response, error_map=error_map)")
|
|
1021
1021
|
error_model = ""
|
|
1022
|
-
if builder.non_default_errors and self.code_model.options["
|
|
1022
|
+
if builder.non_default_errors and self.code_model.options["models-mode"]:
|
|
1023
1023
|
error_model = ", model=error"
|
|
1024
1024
|
condition = "if"
|
|
1025
1025
|
retval.append(" error = None")
|
|
@@ -1031,7 +1031,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1031
1031
|
type_annotation = e.type.type_annotation( # type: ignore
|
|
1032
1032
|
is_operation_file=True, skip_quote=True, serialize_namespace=self.serialize_namespace
|
|
1033
1033
|
)
|
|
1034
|
-
if self.code_model.options["
|
|
1034
|
+
if self.code_model.options["models-mode"] == "dpg":
|
|
1035
1035
|
retval.append(f" error = _failsafe_deserialize({type_annotation}, response.json())")
|
|
1036
1036
|
else:
|
|
1037
1037
|
retval.append(
|
|
@@ -1051,7 +1051,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1051
1051
|
" raise {}(response=response{}{})".format(
|
|
1052
1052
|
status_code_error_map[cast(int, status_code)],
|
|
1053
1053
|
error_model,
|
|
1054
|
-
(", error_format=ARMErrorFormat" if self.code_model.options["
|
|
1054
|
+
(", error_format=ARMErrorFormat" if self.code_model.options["azure-arm"] else ""),
|
|
1055
1055
|
)
|
|
1056
1056
|
)
|
|
1057
1057
|
condition = "if"
|
|
@@ -1065,7 +1065,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1065
1065
|
type_annotation = e.type.type_annotation( # type: ignore
|
|
1066
1066
|
is_operation_file=True, skip_quote=True, serialize_namespace=self.serialize_namespace
|
|
1067
1067
|
)
|
|
1068
|
-
if self.code_model.options["
|
|
1068
|
+
if self.code_model.options["models-mode"] == "dpg":
|
|
1069
1069
|
if xml_serializable(str(e.default_content_type)):
|
|
1070
1070
|
retval.append(
|
|
1071
1071
|
f" error = _failsafe_deserialize_xml({type_annotation}, response.text())"
|
|
@@ -1079,12 +1079,12 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1079
1079
|
)
|
|
1080
1080
|
condition = "elif"
|
|
1081
1081
|
# default error handling
|
|
1082
|
-
if builder.default_error_deserialization and self.code_model.options["
|
|
1082
|
+
if builder.default_error_deserialization and self.code_model.options["models-mode"]:
|
|
1083
1083
|
error_model = ", model=error"
|
|
1084
1084
|
indent = " " if builder.non_default_errors else " "
|
|
1085
1085
|
if builder.non_default_errors:
|
|
1086
1086
|
retval.append(" else:")
|
|
1087
|
-
if self.code_model.options["
|
|
1087
|
+
if self.code_model.options["models-mode"] == "dpg":
|
|
1088
1088
|
retval.append(
|
|
1089
1089
|
f"{indent}error = _failsafe_deserialize({builder.default_error_deserialization}, response.json())"
|
|
1090
1090
|
)
|
|
@@ -1096,7 +1096,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1096
1096
|
retval.append(
|
|
1097
1097
|
" raise HttpResponseError(response=response{}{})".format(
|
|
1098
1098
|
error_model,
|
|
1099
|
-
(", error_format=ARMErrorFormat" if self.code_model.options["
|
|
1099
|
+
(", error_format=ARMErrorFormat" if self.code_model.options["azure-arm"] else ""),
|
|
1100
1100
|
)
|
|
1101
1101
|
)
|
|
1102
1102
|
return retval
|
|
@@ -1144,7 +1144,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1144
1144
|
else:
|
|
1145
1145
|
retval.extend(self.response_headers_and_deserialization(builder, builder.responses[0]))
|
|
1146
1146
|
retval.append("")
|
|
1147
|
-
if builder.has_optional_return_type or self.code_model.options["
|
|
1147
|
+
if builder.has_optional_return_type or self.code_model.options["models-mode"]:
|
|
1148
1148
|
deserialized = "deserialized"
|
|
1149
1149
|
else:
|
|
1150
1150
|
deserialized = f"cast({builder.response_type_annotation(async_mode=self.async_mode)}, deserialized)"
|
|
@@ -1161,7 +1161,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1161
1161
|
):
|
|
1162
1162
|
retval.append("")
|
|
1163
1163
|
retval.append(f"return {deserialized} # type: ignore")
|
|
1164
|
-
if builder.request_builder.method == "HEAD" and self.code_model.options["
|
|
1164
|
+
if builder.request_builder.method == "HEAD" and self.code_model.options["head-as-boolean"]:
|
|
1165
1165
|
retval.append("return 200 <= response.status_code <= 299")
|
|
1166
1166
|
return retval
|
|
1167
1167
|
|
|
@@ -1180,7 +1180,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
|
|
|
1180
1180
|
|
|
1181
1181
|
def error_map(self, builder: OperationType) -> List[str]:
|
|
1182
1182
|
retval = ["error_map: MutableMapping = {"]
|
|
1183
|
-
if builder.non_default_errors and self.code_model.options["
|
|
1183
|
+
if builder.non_default_errors and self.code_model.options["models-mode"]:
|
|
1184
1184
|
# TODO: we should decide whether to add the build-in error map when there is a customized default error type
|
|
1185
1185
|
if self._need_specific_error_map(401, builder):
|
|
1186
1186
|
retval.append(" 401: ClientAuthenticationError,")
|
|
@@ -1326,7 +1326,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
|
|
|
1326
1326
|
retval = [f"{'async ' if self.async_mode else ''}def extract_data(pipeline_response):"]
|
|
1327
1327
|
response = builder.responses[0]
|
|
1328
1328
|
deserialized = "pipeline_response.http_response.json()"
|
|
1329
|
-
if self.code_model.options["
|
|
1329
|
+
if self.code_model.options["models-mode"] == "msrest":
|
|
1330
1330
|
suffix = ".http_response" if hasattr(builder, "initial_operation") else ""
|
|
1331
1331
|
deserialize_type = response.serialization_type(serialize_namespace=self.serialize_namespace)
|
|
1332
1332
|
pylint_disable = " # pylint: disable=protected-access"
|
|
@@ -1337,13 +1337,13 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
|
|
|
1337
1337
|
f"self._deserialize(\n {deserialize_type},{pylint_disable}\n pipeline_response{suffix}\n)"
|
|
1338
1338
|
)
|
|
1339
1339
|
retval.append(f" deserialized = {deserialized}")
|
|
1340
|
-
elif self.code_model.options["
|
|
1340
|
+
elif self.code_model.options["models-mode"] == "dpg":
|
|
1341
1341
|
# we don't want to generate paging models for DPG
|
|
1342
1342
|
retval.append(f" deserialized = {deserialized}")
|
|
1343
1343
|
else:
|
|
1344
1344
|
retval.append(f" deserialized = {deserialized}")
|
|
1345
1345
|
item_name = builder.item_name
|
|
1346
|
-
if self.code_model.options["
|
|
1346
|
+
if self.code_model.options["models-mode"] == "msrest":
|
|
1347
1347
|
access = f".{item_name}"
|
|
1348
1348
|
else:
|
|
1349
1349
|
item_name_array = item_name.split(".")
|
|
@@ -1351,7 +1351,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
|
|
|
1351
1351
|
"".join([f'.get("{i}", {{}})' for i in item_name_array[:-1]]) + f'.get("{item_name_array[-1]}", [])'
|
|
1352
1352
|
)
|
|
1353
1353
|
list_of_elem_deserialized = ""
|
|
1354
|
-
if self.code_model.options["
|
|
1354
|
+
if self.code_model.options["models-mode"] == "dpg":
|
|
1355
1355
|
item_type = builder.item_type.type_annotation(
|
|
1356
1356
|
is_operation_file=True, serialize_namespace=self.serialize_namespace
|
|
1357
1357
|
)
|
|
@@ -1377,7 +1377,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
|
|
|
1377
1377
|
next_link_name = builder.next_link_name
|
|
1378
1378
|
if not next_link_name:
|
|
1379
1379
|
cont_token_property = "None"
|
|
1380
|
-
elif self.code_model.options["
|
|
1380
|
+
elif self.code_model.options["models-mode"] == "msrest":
|
|
1381
1381
|
cont_token_property = f"deserialized.{next_link_name} or None"
|
|
1382
1382
|
else:
|
|
1383
1383
|
cont_token_property = f'deserialized.get("{next_link_name}") or None'
|
|
@@ -1498,8 +1498,8 @@ class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
|
|
|
1498
1498
|
if builder.lro_response.headers:
|
|
1499
1499
|
retval.append(" response_headers = {}")
|
|
1500
1500
|
if (
|
|
1501
|
-
not self.code_model.options["
|
|
1502
|
-
or self.code_model.options["
|
|
1501
|
+
not self.code_model.options["models-mode"]
|
|
1502
|
+
or self.code_model.options["models-mode"] == "dpg"
|
|
1503
1503
|
or builder.lro_response.headers
|
|
1504
1504
|
):
|
|
1505
1505
|
retval.append(" response = pipeline_response.http_response")
|
|
@@ -137,7 +137,7 @@ class ClientSerializer:
|
|
|
137
137
|
if not self.client.code_model.is_legacy and self.client.request_id_header_name:
|
|
138
138
|
result.append(f'kwargs["request_id_header_name"] = "{self.client.request_id_header_name}"')
|
|
139
139
|
policies = build_policies(
|
|
140
|
-
self.client.code_model.options["
|
|
140
|
+
self.client.code_model.options["azure-arm"],
|
|
141
141
|
async_mode,
|
|
142
142
|
is_azure_flavor=self.client.code_model.is_azure_flavor,
|
|
143
143
|
tracing=self.client.code_model.options["tracing"],
|
|
@@ -161,7 +161,7 @@ class ClientSerializer:
|
|
|
161
161
|
return f"{{k: v for k, v in {models_dict_name}.__dict__.items() if isinstance(v, type)}}"
|
|
162
162
|
return "{}"
|
|
163
163
|
|
|
164
|
-
is_msrest_model = self.client.code_model.options["
|
|
164
|
+
is_msrest_model = self.client.code_model.options["models-mode"] == "msrest"
|
|
165
165
|
if is_msrest_model:
|
|
166
166
|
add_private_models = len(self.client.code_model.model_types) != len(
|
|
167
167
|
self.client.code_model.public_model_types
|
|
@@ -177,7 +177,7 @@ class ClientSerializer:
|
|
|
177
177
|
client_models_str = "client_models" if is_msrest_model else ""
|
|
178
178
|
retval.append(f"self._serialize = Serializer({client_models_str})")
|
|
179
179
|
retval.append(f"self._deserialize = Deserializer({client_models_str})")
|
|
180
|
-
if not self.client.code_model.options["
|
|
180
|
+
if not self.client.code_model.options["client-side-validation"]:
|
|
181
181
|
retval.append("self._serialize.client_side_validation = False")
|
|
182
182
|
operation_groups = [og for og in self.client.operation_groups if not og.is_mixin]
|
|
183
183
|
for og in operation_groups:
|
|
@@ -252,7 +252,7 @@ class ClientSerializer:
|
|
|
252
252
|
rest_library = f"{self.client.code_model.core_library}.rest"
|
|
253
253
|
retval = ['"""Runs the network request through the client\'s chained policies.']
|
|
254
254
|
retval.append("")
|
|
255
|
-
if self.client.code_model.options["
|
|
255
|
+
if self.client.code_model.options["builders-visibility"] != "embedded":
|
|
256
256
|
retval.extend(self._request_builder_example(async_mode))
|
|
257
257
|
else:
|
|
258
258
|
retval.extend(self._rest_request_example(async_mode))
|
|
@@ -39,7 +39,7 @@ class GeneralSerializer(BaseSerializer):
|
|
|
39
39
|
"MIN_PYTHON_VERSION": MIN_PYTHON_VERSION,
|
|
40
40
|
"MAX_PYTHON_VERSION": MAX_PYTHON_VERSION,
|
|
41
41
|
}
|
|
42
|
-
params.update(self.code_model.options)
|
|
42
|
+
params.update({"options": self.code_model.options})
|
|
43
43
|
return template.render(code_model=self.code_model, **params)
|
|
44
44
|
|
|
45
45
|
def serialize_package_file(self, template_name: str, **kwargs: Any) -> str:
|
|
@@ -47,12 +47,12 @@ class GeneralSerializer(BaseSerializer):
|
|
|
47
47
|
package_parts = (
|
|
48
48
|
self.code_model.namespace.split(".")[:-1]
|
|
49
49
|
if self.code_model.is_tsp
|
|
50
|
-
else (self.code_model.options
|
|
50
|
+
else (self.code_model.options.get("package-name", "")).split("-")[:-1]
|
|
51
51
|
)
|
|
52
52
|
token_credential = any(
|
|
53
53
|
c for c in self.code_model.clients if isinstance(getattr(c.credential, "type", None), TokenCredentialType)
|
|
54
54
|
)
|
|
55
|
-
version = self.code_model.options
|
|
55
|
+
version = self.code_model.options.get("package-version", "")
|
|
56
56
|
if any(x in version for x in ["a", "b", "rc"]) or version[0] == "0":
|
|
57
57
|
dev_status = "4 - Beta"
|
|
58
58
|
else:
|
|
@@ -68,7 +68,7 @@ class GeneralSerializer(BaseSerializer):
|
|
|
68
68
|
"MIN_PYTHON_VERSION": MIN_PYTHON_VERSION,
|
|
69
69
|
"MAX_PYTHON_VERSION": MAX_PYTHON_VERSION,
|
|
70
70
|
}
|
|
71
|
-
params.update(self.code_model.options)
|
|
71
|
+
params.update({"options": self.code_model.options})
|
|
72
72
|
params.update(kwargs)
|
|
73
73
|
return template.render(file_import=FileImport(self.code_model), **params)
|
|
74
74
|
|
|
@@ -158,7 +158,7 @@ class MetadataSerializer(BaseSerializer):
|
|
|
158
158
|
chosen_version, total_api_version_list = self._choose_api_version()
|
|
159
159
|
|
|
160
160
|
# setting to true, because for multiapi we always generate with a version file with version 0.1.0
|
|
161
|
-
self.code_model.options["
|
|
161
|
+
self.code_model.options["package-version"] = "0.1.0"
|
|
162
162
|
template = self.env.get_template("metadata.json.jinja2")
|
|
163
163
|
|
|
164
164
|
client_serialize_namespace = self.code_model.get_serialize_namespace(self.client_namespace, async_mode=False)
|
|
@@ -164,7 +164,7 @@ class MsrestModelSerializer(_ModelSerializer):
|
|
|
164
164
|
def declare_model(self, model: ModelType) -> str:
|
|
165
165
|
basename = (
|
|
166
166
|
"msrest.serialization.Model"
|
|
167
|
-
if self.code_model.options["
|
|
167
|
+
if self.code_model.options["client-side-validation"]
|
|
168
168
|
else "_serialization.Model"
|
|
169
169
|
)
|
|
170
170
|
if model.parents:
|
|
@@ -24,7 +24,7 @@ class OperationsInitSerializer:
|
|
|
24
24
|
|
|
25
25
|
def operation_group_imports(self) -> List[str]:
|
|
26
26
|
def _get_filename(operation_group: OperationGroup) -> str:
|
|
27
|
-
return "_operations" if self.code_model.options["
|
|
27
|
+
return "_operations" if self.code_model.options["combine-operation-files"] else operation_group.filename
|
|
28
28
|
|
|
29
29
|
return [f"from .{_get_filename(og)} import {og.class_name} # type: ignore" for og in self.operation_groups]
|
|
30
30
|
|
|
@@ -147,7 +147,7 @@ class SampleSerializer(BaseSerializer):
|
|
|
147
147
|
name = self.sample.get("x-ms-original-file", "")
|
|
148
148
|
if "specification" in name:
|
|
149
149
|
return "specification" + name.split("specification")[-1]
|
|
150
|
-
return name if self.code_model.options["
|
|
150
|
+
return name if self.code_model.options["from-typespec"] else ""
|
|
151
151
|
|
|
152
152
|
def serialize(self) -> str:
|
|
153
153
|
operation_result, return_var = self._operation_result()
|
|
@@ -54,13 +54,13 @@ class TestName:
|
|
|
54
54
|
|
|
55
55
|
@property
|
|
56
56
|
def preparer_name(self) -> str:
|
|
57
|
-
if self.code_model.options["
|
|
57
|
+
if self.code_model.options["azure-arm"]:
|
|
58
58
|
return "RandomNameResourceGroupPreparer"
|
|
59
59
|
return self.prefix + "Preparer"
|
|
60
60
|
|
|
61
61
|
@property
|
|
62
62
|
def base_test_class_name(self) -> str:
|
|
63
|
-
if self.code_model.options["
|
|
63
|
+
if self.code_model.options["azure-arm"]:
|
|
64
64
|
return "AzureMgmtRecordedTestCase"
|
|
65
65
|
return f"{self.client_name}TestBase{self.async_suffix_capt}"
|
|
66
66
|
|
|
@@ -196,12 +196,12 @@ class TestSerializer(TestGeneralSerializer):
|
|
|
196
196
|
test_name = TestName(self.code_model, self.client.name, async_mode=self.async_mode)
|
|
197
197
|
async_suffix = "_async" if self.async_mode else ""
|
|
198
198
|
imports.add_submodule_import(
|
|
199
|
-
"devtools_testutils" if self.code_model.options["
|
|
199
|
+
"devtools_testutils" if self.code_model.options["azure-arm"] else "testpreparer" + async_suffix,
|
|
200
200
|
test_name.base_test_class_name,
|
|
201
201
|
ImportType.LOCAL,
|
|
202
202
|
)
|
|
203
203
|
imports.add_submodule_import(
|
|
204
|
-
"devtools_testutils" if self.code_model.options["
|
|
204
|
+
"devtools_testutils" if self.code_model.options["azure-arm"] else "testpreparer",
|
|
205
205
|
test_name.preparer_name,
|
|
206
206
|
ImportType.LOCAL,
|
|
207
207
|
)
|
|
@@ -210,7 +210,7 @@ class TestSerializer(TestGeneralSerializer):
|
|
|
210
210
|
"recorded_by_proxy" + async_suffix,
|
|
211
211
|
ImportType.LOCAL,
|
|
212
212
|
)
|
|
213
|
-
if self.code_model.options["
|
|
213
|
+
if self.code_model.options["azure-arm"]:
|
|
214
214
|
self.add_import_client(imports)
|
|
215
215
|
return FileImportSerializer(imports, self.async_mode)
|
|
216
216
|
|
|
@@ -46,7 +46,7 @@ class {{ client.name }}Configuration: {{ client.config.pylint_disable() }}
|
|
|
46
46
|
self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
|
|
47
47
|
self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
|
|
48
48
|
{% if code_model.is_azure_flavor %}
|
|
49
|
-
self.http_logging_policy = kwargs.get('http_logging_policy') or {{ "ARM" if client.code_model.options[
|
|
49
|
+
self.http_logging_policy = kwargs.get('http_logging_policy') or {{ "ARM" if client.code_model.options["azure-arm"] else "policies." }}HttpLoggingPolicy(**kwargs)
|
|
50
50
|
self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
|
|
51
51
|
self.redirect_policy = kwargs.get('redirect_policy') or policies.{{ keywords.async_class }}RedirectPolicy(**kwargs)
|
|
52
52
|
{% endif %}
|
|
@@ -13,7 +13,7 @@ load_dotenv()
|
|
|
13
13
|
@pytest.fixture(scope="session", autouse=True)
|
|
14
14
|
def add_sanitizers(test_proxy):
|
|
15
15
|
{% for test_name in test_names %}
|
|
16
|
-
{% set prefix_upper = "AZURE" if code_model.options["
|
|
16
|
+
{% set prefix_upper = "AZURE" if code_model.options["azure-arm"] else test_name.prefix|upper %}
|
|
17
17
|
{% set prefix_lower = test_name.prefix|lower %}
|
|
18
18
|
{{ prefix_lower }}_subscription_id = os.environ.get("{{ prefix_upper }}_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000")
|
|
19
19
|
{{ prefix_lower }}_tenant_id = os.environ.get("{{ prefix_upper }}_TENANT_ID", "00000000-0000-0000-0000-000000000000")
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
from .{{ client.filename }} import {{ client.name }} # type: ignore
|
|
10
10
|
{% endfor %}
|
|
11
11
|
{% endif %}
|
|
12
|
-
{% if not async_mode and code_model.options
|
|
12
|
+
{% if not async_mode and code_model.options.get("package-version") %}
|
|
13
13
|
from {{ code_model.get_relative_import_path(serialize_namespace, module_name="_version") }} import VERSION
|
|
14
14
|
|
|
15
15
|
__version__ = VERSION
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"description": {{ client.description | tojson }},
|
|
10
10
|
"host_value": {{ (client.parameters.host.client_default_value_declaration if not client.has_parameterized_host else None) | tojson }},
|
|
11
11
|
"parameterized_host_template": {{ (keywords.escape_str(client.url) if client.has_parameterized_host else None) | tojson }},
|
|
12
|
-
"azure_arm": {{ client.code_model.options["
|
|
12
|
+
"azure_arm": {{ client.code_model.options["azure-arm"] | tojson }},
|
|
13
13
|
"has_public_lro_operations": {{ client.has_public_lro_operations | tojson }},
|
|
14
|
-
"
|
|
14
|
+
"client-side-validation": {{ client.code_model.options["client-side-validation"] | tojson }},
|
|
15
15
|
"sync_imports": {{ sync_client_imports | tojson }},
|
|
16
16
|
"async_imports": {{ async_client_imports | tojson }}
|
|
17
17
|
},
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
{% endif %}
|
|
30
30
|
{% endfor %}
|
|
31
31
|
|
|
32
|
-
{% if code_model.options["
|
|
32
|
+
{% if code_model.options["models-mode"] == "dpg" and model.flattened_property %}
|
|
33
33
|
__flattened_items = ["{{ model.flattened_items|join('\", \"') }}"]
|
|
34
34
|
{% endif %}
|
|
35
35
|
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
{% for initialize_property in initialize_properties %}
|
|
66
66
|
{{ initialize_property }}
|
|
67
67
|
{% endfor %}
|
|
68
|
-
{% if code_model.options["
|
|
68
|
+
{% if code_model.options["models-mode"] == "dpg" and model.flattened_property %}
|
|
69
69
|
{% set flattened_property_attr = model.flattened_property.client_name %}
|
|
70
70
|
|
|
71
71
|
def __getattr__(self, name: str) -> Any:
|
|
@@ -25,7 +25,7 @@ class {{ operation_group.class_name }}: {{ operation_group.pylint_disable() }}
|
|
|
25
25
|
:attr:`{{ operation_group.property_name }}` attribute.
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
|
-
{% if code_model.public_model_types and code_model.options["
|
|
28
|
+
{% if code_model.public_model_types and code_model.options["models-mode"] == "msrest" %}
|
|
29
29
|
models = _models
|
|
30
30
|
|
|
31
31
|
{% endif %}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
{% endif %}
|
|
7
7
|
{{ imports }}
|
|
8
8
|
{{ unset }}
|
|
9
|
-
{% if code_model.options["
|
|
9
|
+
{% if code_model.options["builders-visibility"] == "embedded" and not async_mode %}
|
|
10
10
|
{% if need_declare_serializer %}
|
|
11
11
|
{{ op_tools.declare_serializer(code_model) }}
|
|
12
12
|
{% endif %}
|
|
@@ -61,7 +61,7 @@ Example:
|
|
|
61
61
|
{% macro declare_serializer(code_model) %}
|
|
62
62
|
{% if code_model.has_non_abstract_operations %}
|
|
63
63
|
_SERIALIZER = Serializer()
|
|
64
|
-
{% if not code_model.options["
|
|
64
|
+
{% if not code_model.options["client-side-validation"] %}
|
|
65
65
|
_SERIALIZER.client_side_validation = False
|
|
66
66
|
{% endif %}
|
|
67
67
|
{% endif %}
|
|
@@ -3,7 +3,7 @@ include LICENSE
|
|
|
3
3
|
{% if code_model.is_tsp %}
|
|
4
4
|
include {{ code_model.namespace.replace('.', '/') }}/py.typed
|
|
5
5
|
{% else %}
|
|
6
|
-
include {{
|
|
6
|
+
include {{ options.get("package-name", "").replace('-', '/') }}/py.typed
|
|
7
7
|
{% endif %}
|
|
8
8
|
recursive-include tests *.py
|
|
9
9
|
recursive-include samples *.py *.md
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{% if code_model.is_azure_flavor %}
|
|
2
|
-
{% if
|
|
2
|
+
{% if options["package-mode"] == "mgmtplane" %}
|
|
3
3
|
# Microsoft Azure SDK for Python
|
|
4
4
|
|
|
5
|
-
This is the Microsoft {{
|
|
5
|
+
This is the Microsoft {{options["package-pprint-name"]}} Client Library.
|
|
6
6
|
This package has been tested with Python 3.9+.
|
|
7
7
|
For a more complete view of Azure libraries, see the [azure sdk python release](https://aka.ms/azsdk/python/all).
|
|
8
8
|
|
|
@@ -11,7 +11,7 @@ For a more complete view of Azure libraries, see the [azure sdk python release](
|
|
|
11
11
|
To learn how to use this package, see the [quickstart guide](https://aka.ms/azsdk/python/mgmt)
|
|
12
12
|
|
|
13
13
|
For docs and references, see [Python SDK References](https://docs.microsoft.com/python/api/overview/azure)
|
|
14
|
-
Code samples for this package can be found at [{{
|
|
14
|
+
Code samples for this package can be found at [{{options["package-pprint-name"]}}](https://docs.microsoft.com/samples/browse/?languages=python&term=Getting%20started%20-%20Managing&terms=Getting%20started%20-%20Managing) on docs.microsoft.com.
|
|
15
15
|
Additional code samples for different Azure services are available at [Samples Repo](https://aka.ms/azsdk/python/mgmt/samples)
|
|
16
16
|
|
|
17
17
|
# Provide Feedback
|
|
@@ -21,9 +21,9 @@ If you encounter any bugs or have suggestions, please file an issue in the
|
|
|
21
21
|
section of the project.
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-

|
|
25
25
|
{% else %}
|
|
26
|
-
# {{
|
|
26
|
+
# {{ options["package-pprint-name"] }} client library for Python
|
|
27
27
|
<!-- write necessary description of service -->
|
|
28
28
|
|
|
29
29
|
## Getting started
|
|
@@ -31,14 +31,14 @@ section of the project.
|
|
|
31
31
|
### Install the package
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
python -m pip install {{
|
|
34
|
+
python -m pip install {{ options["package-name"] }}
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
#### Prequisites
|
|
38
38
|
|
|
39
39
|
- Python 3.9 or later is required to use this package.
|
|
40
40
|
- You need an [Azure subscription][azure_sub] to use this package.
|
|
41
|
-
- An existing {{
|
|
41
|
+
- An existing {{ options["package-pprint-name"] }} instance.
|
|
42
42
|
|
|
43
43
|
{% if token_credential and client_name %}
|
|
44
44
|
#### Create with an Azure Active Directory Credential
|
|
@@ -104,4 +104,35 @@ additional questions or comments.
|
|
|
104
104
|
[pip]: https://pypi.org/project/pip/
|
|
105
105
|
[azure_sub]: https://azure.microsoft.com/free/
|
|
106
106
|
{% endif %}
|
|
107
|
+
{% else %}
|
|
108
|
+
# Overview
|
|
109
|
+
|
|
110
|
+
This package is generated by `@typespec/http-client-python` with Typespec.
|
|
111
|
+
|
|
112
|
+
## Getting started
|
|
113
|
+
|
|
114
|
+
### Prequisites
|
|
115
|
+
|
|
116
|
+
- Python 3.9 or later is required to use this package.
|
|
117
|
+
|
|
118
|
+
### Install the package
|
|
119
|
+
|
|
120
|
+
Step into folder where setup.py is then run:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
pip install -e .
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Examples
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
>>> from {{ code_model.namespace }} import {{ client_name }}
|
|
130
|
+
>>> from {{ code_model.core_library }}.exceptions import HttpResponseError
|
|
131
|
+
|
|
132
|
+
>>> client = {{ client_name }}(endpoint='<endpoint>')
|
|
133
|
+
>>> try:
|
|
134
|
+
<!-- write code here -->
|
|
135
|
+
except HttpResponseError as e:
|
|
136
|
+
print('service responds error: {}'.format(e.response.json()))
|
|
137
|
+
```
|
|
107
138
|
{% endif %}
|