@typespec/http-client-python 0.5.0 → 0.6.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/dist/emitter/code-model.d.ts.map +1 -1
- package/dist/emitter/code-model.js +10 -7
- package/dist/emitter/code-model.js.map +1 -1
- package/dist/emitter/emitter.d.ts.map +1 -1
- package/dist/emitter/emitter.js +35 -7
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/http.js +1 -1
- package/dist/emitter/http.js.map +1 -1
- package/dist/emitter/lib.d.ts +1 -0
- package/dist/emitter/lib.d.ts.map +1 -1
- package/dist/emitter/lib.js +1 -0
- package/dist/emitter/lib.js.map +1 -1
- package/dist/emitter/types.d.ts.map +1 -1
- package/dist/emitter/types.js +7 -4
- package/dist/emitter/types.js.map +1 -1
- package/dist/emitter/utils.d.ts +1 -0
- package/dist/emitter/utils.d.ts.map +1 -1
- package/dist/emitter/utils.js +19 -0
- package/dist/emitter/utils.js.map +1 -1
- package/emitter/src/code-model.ts +16 -6
- package/emitter/src/emitter.ts +37 -11
- package/emitter/src/http.ts +1 -1
- package/emitter/src/lib.ts +4 -0
- package/emitter/src/types.ts +16 -4
- package/emitter/src/utils.ts +27 -0
- package/emitter/temp/tsconfig.tsbuildinfo +1 -1
- package/eng/scripts/Test-Packages.ps1 +1 -1
- package/eng/scripts/ci/regenerate.ts +21 -14
- package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
- package/eng/scripts/setup/install.py +0 -5
- package/eng/scripts/setup/install.ts +0 -20
- package/generator/build/lib/pygen/black.py +2 -2
- package/generator/build/lib/pygen/codegen/__init__.py +6 -4
- package/generator/build/lib/pygen/codegen/_utils.py +4 -0
- package/generator/build/lib/pygen/codegen/models/base.py +2 -3
- package/generator/build/lib/pygen/codegen/models/base_builder.py +5 -3
- package/generator/build/lib/pygen/codegen/models/client.py +28 -19
- package/generator/build/lib/pygen/codegen/models/code_model.py +200 -33
- package/generator/build/lib/pygen/codegen/models/combined_type.py +8 -5
- package/generator/build/lib/pygen/codegen/models/constant_type.py +2 -3
- package/generator/build/lib/pygen/codegen/models/credential_types.py +1 -2
- package/generator/build/lib/pygen/codegen/models/dictionary_type.py +2 -3
- package/generator/build/lib/pygen/codegen/models/enum_type.py +47 -24
- package/generator/build/lib/pygen/codegen/models/imports.py +14 -12
- package/generator/build/lib/pygen/codegen/models/list_type.py +2 -3
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +8 -4
- package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/build/lib/pygen/codegen/models/model_type.py +34 -19
- package/generator/build/lib/pygen/codegen/models/operation.py +66 -29
- package/generator/build/lib/pygen/codegen/models/operation_group.py +56 -11
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +9 -6
- package/generator/build/lib/pygen/codegen/models/parameter.py +10 -10
- package/generator/build/lib/pygen/codegen/models/parameter_list.py +7 -7
- package/generator/build/lib/pygen/codegen/models/primitive_types.py +23 -43
- package/generator/build/lib/pygen/codegen/models/property.py +7 -7
- package/generator/build/lib/pygen/codegen/models/request_builder.py +9 -15
- package/generator/build/lib/pygen/codegen/models/response.py +6 -8
- package/generator/build/lib/pygen/codegen/models/utils.py +11 -0
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +201 -242
- package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +19 -1
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +53 -35
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +9 -5
- package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +17 -3
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +26 -14
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +26 -8
- package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +9 -4
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +62 -22
- package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +19 -16
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -10
- package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +10 -7
- package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +10 -1
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +7 -10
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +24 -28
- package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +6 -1
- package/generator/build/lib/pygen/codegen/serializers/utils.py +1 -15
- package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
- package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +3 -3
- package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
- package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +4 -4
- package/generator/build/lib/pygen/preprocess/__init__.py +0 -4
- package/generator/dev_requirements.txt +2 -2
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/black.py +2 -2
- package/generator/pygen/codegen/__init__.py +6 -4
- package/generator/pygen/codegen/_utils.py +4 -0
- package/generator/pygen/codegen/models/base.py +2 -3
- package/generator/pygen/codegen/models/base_builder.py +5 -3
- package/generator/pygen/codegen/models/client.py +28 -19
- package/generator/pygen/codegen/models/code_model.py +200 -33
- package/generator/pygen/codegen/models/combined_type.py +8 -5
- package/generator/pygen/codegen/models/constant_type.py +2 -3
- package/generator/pygen/codegen/models/credential_types.py +1 -2
- package/generator/pygen/codegen/models/dictionary_type.py +2 -3
- package/generator/pygen/codegen/models/enum_type.py +47 -24
- package/generator/pygen/codegen/models/imports.py +14 -12
- package/generator/pygen/codegen/models/list_type.py +2 -3
- package/generator/pygen/codegen/models/lro_operation.py +8 -4
- package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/pygen/codegen/models/model_type.py +34 -19
- package/generator/pygen/codegen/models/operation.py +66 -29
- package/generator/pygen/codegen/models/operation_group.py +56 -11
- package/generator/pygen/codegen/models/paging_operation.py +9 -6
- package/generator/pygen/codegen/models/parameter.py +10 -10
- package/generator/pygen/codegen/models/parameter_list.py +7 -7
- package/generator/pygen/codegen/models/primitive_types.py +23 -43
- package/generator/pygen/codegen/models/property.py +7 -7
- package/generator/pygen/codegen/models/request_builder.py +9 -15
- package/generator/pygen/codegen/models/response.py +6 -8
- package/generator/pygen/codegen/models/utils.py +11 -0
- package/generator/pygen/codegen/serializers/__init__.py +201 -242
- package/generator/pygen/codegen/serializers/base_serializer.py +19 -1
- package/generator/pygen/codegen/serializers/builder_serializer.py +53 -35
- package/generator/pygen/codegen/serializers/client_serializer.py +9 -5
- package/generator/pygen/codegen/serializers/enum_serializer.py +17 -3
- package/generator/pygen/codegen/serializers/general_serializer.py +26 -14
- package/generator/pygen/codegen/serializers/metadata_serializer.py +26 -8
- package/generator/pygen/codegen/serializers/model_init_serializer.py +9 -4
- package/generator/pygen/codegen/serializers/model_serializer.py +62 -22
- package/generator/pygen/codegen/serializers/operation_groups_serializer.py +19 -16
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -10
- package/generator/pygen/codegen/serializers/parameter_serializer.py +10 -7
- package/generator/pygen/codegen/serializers/request_builders_serializer.py +10 -1
- package/generator/pygen/codegen/serializers/sample_serializer.py +7 -10
- package/generator/pygen/codegen/serializers/test_serializer.py +24 -28
- package/generator/pygen/codegen/serializers/types_serializer.py +6 -1
- package/generator/pygen/codegen/serializers/utils.py +1 -15
- package/generator/pygen/codegen/templates/client_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/model_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
- package/generator/pygen/codegen/templates/test.py.jinja2 +3 -3
- package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
- package/generator/pygen/codegen/templates/vendor.py.jinja2 +4 -4
- package/generator/pygen/preprocess/__init__.py +0 -4
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_flatten_async.py +1 -1
- package/generator/test/{generic_mock_api_tests/asynctests/test_payload_pageable_async.py → azure/mock_api_tests/asynctests/test_azure_payload_pageable_async.py} +1 -1
- package/generator/test/azure/mock_api_tests/asynctests/test_client_namespace_async.py +31 -0
- package/generator/test/azure/mock_api_tests/conftest.py +5 -4
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_flatten.py +1 -1
- package/generator/test/{generic_mock_api_tests/test_payload_pageable.py → azure/mock_api_tests/test_azure_payload_pageable.py} +1 -1
- package/generator/test/azure/mock_api_tests/test_client_namespace.py +29 -0
- package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_resiliency_srv_driven.py +4 -2
- package/generator/test/{generic_mock_api_tests/asynctests → azure/mock_api_tests}/test_resiliency_srv_driven_async.py +4 -2
- package/generator/test/azure/requirements.txt +11 -9
- package/generator/test/azure/tox.ini +2 -2
- package/generator/test/generic_mock_api_tests/conftest.py +9 -4
- package/generator/test/unbranded/mock_api_tests/conftest.py +4 -4
- package/generator/test/unbranded/mock_api_tests/test_unbranded.py +1 -1
- package/generator/test/unbranded/requirements.txt +2 -9
- package/generator/test/unbranded/tox.ini +2 -2
- package/package.json +5 -6
- package/generator/requirements.txt +0 -7
- /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/asynctests/test_client_naming_async.py +0 -0
- /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/asynctests/test_client_structure_async.py +0 -0
- /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_client_naming.py +0 -0
- /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_client_structure.py +0 -0
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
from enum import Enum
|
|
6
6
|
from {{ code_model.core_library }}{{ "" if code_model.is_azure_flavor else ".utils" }} import CaseInsensitiveEnumMeta
|
|
7
7
|
|
|
8
|
-
{% for enum in
|
|
8
|
+
{% for enum in enums | sort %}
|
|
9
9
|
{% include "enum.py.jinja2" %}
|
|
10
10
|
{% endfor %}
|
|
@@ -8,7 +8,7 @@ from .{{ client.filename }} import {{ client.name }} # type: ignore
|
|
|
8
8
|
{% endfor %}
|
|
9
9
|
{% endif %}
|
|
10
10
|
{% if not async_mode and code_model.options['package_version']%}
|
|
11
|
-
from ._version import VERSION
|
|
11
|
+
from {{ code_model.get_relative_import_path(serialize_namespace, module_name="_version") }} import VERSION
|
|
12
12
|
|
|
13
13
|
__version__ = VERSION
|
|
14
14
|
{% endif %}
|
|
@@ -7,11 +7,9 @@
|
|
|
7
7
|
{{ op_tools.serialize(operation_group_imports()) }}
|
|
8
8
|
{{ keywords.patch_imports() }}
|
|
9
9
|
__all__ = [
|
|
10
|
-
|
|
11
|
-
{% for operation_group in client.operation_groups %}
|
|
10
|
+
{% for operation_group in operation_groups %}
|
|
12
11
|
'{{ operation_group.class_name }}',
|
|
13
|
-
|
|
14
|
-
{% endfor %}
|
|
12
|
+
{% endfor %}
|
|
15
13
|
]
|
|
16
14
|
{{ keywords.extend_all }}
|
|
17
15
|
_patch_sdk()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% set prefix_lower = test.prefix|lower %}
|
|
2
2
|
{% set client_var = "self.client" if code_model.options["azure_arm"] else "client" %}
|
|
3
|
-
{% set async = "async " if test.
|
|
4
|
-
{% set async_suffix = "_async" if test.
|
|
3
|
+
{% set async = "async " if test.async_mode else "" %}
|
|
4
|
+
{% set async_suffix = "_async" if test.async_mode else "" %}
|
|
5
5
|
# coding=utf-8
|
|
6
6
|
{{ code_model.options['license_header'] }}
|
|
7
7
|
import pytest
|
|
@@ -15,7 +15,7 @@ AZURE_LOCATION = "eastus"
|
|
|
15
15
|
class {{ test.test_class_name }}({{ test.base_test_class_name }}):
|
|
16
16
|
{% if code_model.options["azure_arm"] %}
|
|
17
17
|
def setup_method(self, method):
|
|
18
|
-
{% if test.
|
|
18
|
+
{% if test.async_mode %}
|
|
19
19
|
self.client = self.create_mgmt_client({{ test.client_name }}, is_async=True)
|
|
20
20
|
{% else %}
|
|
21
21
|
self.client = self.create_mgmt_client({{ test.client_name }})
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
{{ imports }}
|
|
4
4
|
|
|
5
5
|
{% for test_name in test_names %}
|
|
6
|
-
{% set extra_async = ", is_async=True" if test_name.
|
|
6
|
+
{% set extra_async = ", is_async=True" if test_name.async_mode else ""%}
|
|
7
7
|
{% set prefix_lower = test_name.prefix|lower %}
|
|
8
8
|
class {{ test_name.base_test_class_name }}(AzureRecordedTestCase):
|
|
9
9
|
|
|
@@ -15,7 +15,7 @@ class {{ test_name.base_test_class_name }}(AzureRecordedTestCase):
|
|
|
15
15
|
endpoint=endpoint,
|
|
16
16
|
)
|
|
17
17
|
|
|
18
|
-
{% if not test_name.
|
|
18
|
+
{% if not test_name.async_mode %}
|
|
19
19
|
{{ test_name.preparer_name }} = functools.partial(
|
|
20
20
|
PowerShellPreparer,
|
|
21
21
|
"{{ prefix_lower }}",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
{{ imports }}
|
|
5
5
|
|
|
6
|
-
{% if code_model.
|
|
6
|
+
{% if code_model.need_vendored_mixin(client_namespace) %}
|
|
7
7
|
{% for client in clients | selectattr("has_mixin") %}
|
|
8
8
|
{% set pylint_disable = "# pylint: disable=name-too-long" if (client.name | length) + ("MixinABC" | length) > 40 else "" %}
|
|
9
9
|
class {{ client.name }}MixinABC( {{ pylint_disable }}
|
|
@@ -16,7 +16,7 @@ class {{ client.name }}MixinABC( {{ pylint_disable }}
|
|
|
16
16
|
_deserialize: "Deserializer"
|
|
17
17
|
{% endfor %}
|
|
18
18
|
{% endif %}
|
|
19
|
-
{% if code_model.
|
|
19
|
+
{% if code_model.need_vendored_abstract(client_namespace) %}
|
|
20
20
|
|
|
21
21
|
def raise_if_not_implemented(cls, abstract_methods):
|
|
22
22
|
not_implemented = [f for f in abstract_methods if not callable(getattr(cls, f, None))]
|
|
@@ -27,7 +27,7 @@ def raise_if_not_implemented(cls, abstract_methods):
|
|
|
27
27
|
)
|
|
28
28
|
{% endif %}
|
|
29
29
|
|
|
30
|
-
{% if code_model.
|
|
30
|
+
{% if code_model.need_vendored_etag(client_namespace) %}
|
|
31
31
|
def quote_etag(etag: Optional[str]) -> Optional[str]:
|
|
32
32
|
if not etag or etag == "*":
|
|
33
33
|
return etag
|
|
@@ -57,7 +57,7 @@ def prep_if_none_match(etag: Optional[str], match_condition: Optional[MatchCondi
|
|
|
57
57
|
return "*"
|
|
58
58
|
return None
|
|
59
59
|
{% endif %}
|
|
60
|
-
{% if code_model.
|
|
60
|
+
{% if code_model.need_vendored_form_data(async_mode, client_namespace) %}
|
|
61
61
|
# file-like tuple could be `(filename, IO (or bytes))` or `(filename, IO (or bytes), content_type)`
|
|
62
62
|
FileContent = Union[str, bytes, IO[str], IO[bytes]]
|
|
63
63
|
|
|
@@ -501,10 +501,6 @@ class PreProcessPlugin(YamlUpdatePlugin):
|
|
|
501
501
|
for client in yaml_data["clients"]:
|
|
502
502
|
self.update_client(client)
|
|
503
503
|
self.update_operation_groups(yaml_data, client)
|
|
504
|
-
for clients in yaml_data["subnamespaceToClients"].values():
|
|
505
|
-
for client in clients:
|
|
506
|
-
self.update_client(client)
|
|
507
|
-
self.update_operation_groups(yaml_data, client)
|
|
508
504
|
if yaml_data.get("namespace"):
|
|
509
505
|
yaml_data["namespace"] = pad_builtin_namespaces(yaml_data["namespace"])
|
|
510
506
|
|
|
Binary file
|
package/generator/pygen/black.py
CHANGED
|
@@ -43,8 +43,8 @@ class BlackScriptPlugin(Plugin):
|
|
|
43
43
|
"venv",
|
|
44
44
|
"env",
|
|
45
45
|
)
|
|
46
|
-
|
|
47
|
-
and Path(f).suffix == ".py"
|
|
46
|
+
# we shall also format generated files like "../../../generated_tests/test_xxx.py"
|
|
47
|
+
and (not Path(f).parts[0].startswith(".") or Path(f).parts[0] == "..") and Path(f).suffix == ".py"
|
|
48
48
|
],
|
|
49
49
|
)
|
|
50
50
|
)
|
|
@@ -40,6 +40,7 @@ class OptionsRetriever:
|
|
|
40
40
|
"generate-test": False,
|
|
41
41
|
"from-typespec": False,
|
|
42
42
|
"emit-cross-language-definition-file": False,
|
|
43
|
+
"enable-typespec-namespace": False,
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
@property
|
|
@@ -244,8 +245,8 @@ class CodeGenerator(Plugin):
|
|
|
244
245
|
@staticmethod
|
|
245
246
|
def sort_exceptions(yaml_data: Dict[str, Any]) -> None:
|
|
246
247
|
for client in yaml_data["clients"]:
|
|
247
|
-
for group in client
|
|
248
|
-
for operation in group
|
|
248
|
+
for group in client.get("operationGroups", []):
|
|
249
|
+
for operation in group.get("operations", []):
|
|
249
250
|
if not operation.get("exceptions"):
|
|
250
251
|
continue
|
|
251
252
|
# sort exceptions by status code, first single status code, then range, then default
|
|
@@ -261,8 +262,8 @@ class CodeGenerator(Plugin):
|
|
|
261
262
|
@staticmethod
|
|
262
263
|
def remove_cloud_errors(yaml_data: Dict[str, Any]) -> None:
|
|
263
264
|
for client in yaml_data["clients"]:
|
|
264
|
-
for group in client
|
|
265
|
-
for operation in group
|
|
265
|
+
for group in client.get("operationGroups", []):
|
|
266
|
+
for operation in group.get("operations", []):
|
|
266
267
|
if not operation.get("exceptions"):
|
|
267
268
|
continue
|
|
268
269
|
i = 0
|
|
@@ -316,6 +317,7 @@ class CodeGenerator(Plugin):
|
|
|
316
317
|
"flavor",
|
|
317
318
|
"company_name",
|
|
318
319
|
"emit_cross_language_definition_file",
|
|
320
|
+
"enable_typespec_namespace",
|
|
319
321
|
]
|
|
320
322
|
return {f: getattr(self.options_retriever, f) for f in flags}
|
|
321
323
|
|
|
@@ -15,3 +15,7 @@ SWAGGER_PACKAGE_MODE = ["mgmtplane", "dataplane"] # for backward compatibility
|
|
|
15
15
|
TYPESPEC_PACKAGE_MODE = ["azure-mgmt", "azure-dataplane", "generic"]
|
|
16
16
|
VALID_PACKAGE_MODE = SWAGGER_PACKAGE_MODE + TYPESPEC_PACKAGE_MODE
|
|
17
17
|
NAME_LENGTH_LIMIT = 40
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_parent_namespace(namespace: str) -> str:
|
|
21
|
+
return namespace.rsplit(".", 1)[0]
|
|
@@ -87,8 +87,7 @@ class BaseType(BaseModel, ABC): # pylint: disable=too-many-public-methods
|
|
|
87
87
|
attrs_list.append("'text': True")
|
|
88
88
|
return ", ".join(attrs_list)
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
def serialization_type(self) -> str:
|
|
90
|
+
def serialization_type(self, **kwargs: Any) -> str:
|
|
92
91
|
"""The tag recognized by 'msrest' as a serialization/deserialization.
|
|
93
92
|
|
|
94
93
|
'str', 'int', 'float', 'bool' or
|
|
@@ -103,7 +102,7 @@ class BaseType(BaseModel, ABC): # pylint: disable=too-many-public-methods
|
|
|
103
102
|
|
|
104
103
|
@property
|
|
105
104
|
def msrest_deserialization_key(self) -> str:
|
|
106
|
-
return self.serialization_type
|
|
105
|
+
return self.serialization_type()
|
|
107
106
|
|
|
108
107
|
@property
|
|
109
108
|
def client_default_value(self) -> Any:
|
|
@@ -14,6 +14,7 @@ from typing import (
|
|
|
14
14
|
Union,
|
|
15
15
|
TYPE_CHECKING,
|
|
16
16
|
cast,
|
|
17
|
+
Sequence,
|
|
17
18
|
)
|
|
18
19
|
from abc import abstractmethod
|
|
19
20
|
|
|
@@ -39,7 +40,7 @@ if TYPE_CHECKING:
|
|
|
39
40
|
from .request_builder import RequestBuilder
|
|
40
41
|
|
|
41
42
|
|
|
42
|
-
OverloadListType = TypeVar("OverloadListType", bound=Union[
|
|
43
|
+
OverloadListType = TypeVar("OverloadListType", bound=Union[Sequence["Operation"], Sequence["RequestBuilder"]])
|
|
43
44
|
|
|
44
45
|
_LOGGER = logging.getLogger(__name__)
|
|
45
46
|
|
|
@@ -72,6 +73,7 @@ class BaseBuilder(
|
|
|
72
73
|
self.api_versions: List[str] = yaml_data["apiVersions"]
|
|
73
74
|
self.added_on: Optional[str] = yaml_data.get("addedOn")
|
|
74
75
|
self.external_docs: Optional[Dict[str, Any]] = yaml_data.get("externalDocs")
|
|
76
|
+
self.client_namespace: str = yaml_data.get("clientNamespace", code_model.namespace)
|
|
75
77
|
|
|
76
78
|
if code_model.options["version_tolerant"] and yaml_data.get("abstract"):
|
|
77
79
|
_LOGGER.warning(
|
|
@@ -112,7 +114,7 @@ class BaseBuilder(
|
|
|
112
114
|
)
|
|
113
115
|
return self._description or self.name
|
|
114
116
|
|
|
115
|
-
def method_signature(self, async_mode: bool) -> List[str]:
|
|
117
|
+
def method_signature(self, async_mode: bool, **kwargs: Any) -> List[str]:
|
|
116
118
|
if self.abstract:
|
|
117
119
|
return ["*args,", "**kwargs"]
|
|
118
|
-
return self.parameters.method_signature(async_mode)
|
|
120
|
+
return self.parameters.method_signature(async_mode, **kwargs)
|
|
@@ -43,6 +43,7 @@ class _ClientConfigBase(Generic[ParameterListType], BaseModel):
|
|
|
43
43
|
self.parameters = parameters
|
|
44
44
|
self.url: str = self.yaml_data["url"] # the base endpoint of the client. Can be parameterized or not
|
|
45
45
|
self.legacy_filename: str = self.yaml_data.get("legacyFilename", "client")
|
|
46
|
+
self.client_namespace: str = self.yaml_data.get("clientNamespace", code_model.namespace)
|
|
46
47
|
|
|
47
48
|
@property
|
|
48
49
|
def description(self) -> str:
|
|
@@ -188,7 +189,7 @@ class Client(_ClientConfigBase[ClientGlobalParameterList]):
|
|
|
188
189
|
except StopIteration as exc:
|
|
189
190
|
raise KeyError(f"No operation with id {operation_id} found.") from exc
|
|
190
191
|
|
|
191
|
-
def _imports_shared(self, async_mode: bool) -> FileImport:
|
|
192
|
+
def _imports_shared(self, async_mode: bool, **kwargs) -> FileImport:
|
|
192
193
|
file_import = FileImport(self.code_model)
|
|
193
194
|
file_import.add_submodule_import("typing", "Any", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
194
195
|
if self.code_model.options["azure_arm"]:
|
|
@@ -206,8 +207,8 @@ class Client(_ClientConfigBase[ClientGlobalParameterList]):
|
|
|
206
207
|
file_import.merge(
|
|
207
208
|
gp.imports(
|
|
208
209
|
async_mode,
|
|
209
|
-
|
|
210
|
-
|
|
210
|
+
is_operation_file=True,
|
|
211
|
+
**kwargs,
|
|
211
212
|
)
|
|
212
213
|
)
|
|
213
214
|
file_import.add_submodule_import(
|
|
@@ -215,8 +216,9 @@ class Client(_ClientConfigBase[ClientGlobalParameterList]):
|
|
|
215
216
|
f"{self.name}Configuration",
|
|
216
217
|
ImportType.LOCAL,
|
|
217
218
|
)
|
|
219
|
+
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
218
220
|
file_import.add_msrest_import(
|
|
219
|
-
|
|
221
|
+
serialize_namespace=serialize_namespace,
|
|
220
222
|
msrest_import_type=MsrestImportType.SerializerDeserializer,
|
|
221
223
|
typing_section=TypingSection.REGULAR,
|
|
222
224
|
)
|
|
@@ -277,8 +279,8 @@ class Client(_ClientConfigBase[ClientGlobalParameterList]):
|
|
|
277
279
|
"""Whether there is non-abstract operation in any operation group."""
|
|
278
280
|
return any(og.has_non_abstract_operations for og in self.operation_groups)
|
|
279
281
|
|
|
280
|
-
def imports(self, async_mode: bool) -> FileImport:
|
|
281
|
-
file_import = self._imports_shared(async_mode)
|
|
282
|
+
def imports(self, async_mode: bool, **kwargs) -> FileImport:
|
|
283
|
+
file_import = self._imports_shared(async_mode, **kwargs)
|
|
282
284
|
if async_mode:
|
|
283
285
|
file_import.add_submodule_import("typing", "Awaitable", ImportType.STDLIB)
|
|
284
286
|
file_import.add_submodule_import(
|
|
@@ -300,9 +302,13 @@ class Client(_ClientConfigBase[ClientGlobalParameterList]):
|
|
|
300
302
|
ImportType.SDKCORE,
|
|
301
303
|
TypingSection.CONDITIONAL,
|
|
302
304
|
)
|
|
305
|
+
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
303
306
|
for og in self.operation_groups:
|
|
304
307
|
file_import.add_submodule_import(
|
|
305
|
-
|
|
308
|
+
self.code_model.get_relative_import_path(
|
|
309
|
+
serialize_namespace,
|
|
310
|
+
self.code_model.get_imported_namespace_for_operation(og.client_namespace, async_mode),
|
|
311
|
+
),
|
|
306
312
|
og.class_name,
|
|
307
313
|
ImportType.LOCAL,
|
|
308
314
|
)
|
|
@@ -317,8 +323,8 @@ class Client(_ClientConfigBase[ClientGlobalParameterList]):
|
|
|
317
323
|
file_import.add_submodule_import("copy", "deepcopy", ImportType.STDLIB)
|
|
318
324
|
return file_import
|
|
319
325
|
|
|
320
|
-
def imports_for_multiapi(self, async_mode: bool) -> FileImport:
|
|
321
|
-
file_import = self._imports_shared(async_mode)
|
|
326
|
+
def imports_for_multiapi(self, async_mode: bool, **kwargs) -> FileImport:
|
|
327
|
+
file_import = self._imports_shared(async_mode, **kwargs)
|
|
322
328
|
file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
323
329
|
try:
|
|
324
330
|
mixin_operation = next(og for og in self.operation_groups if og.is_mixin)
|
|
@@ -377,7 +383,7 @@ class Config(_ClientConfigBase[ConfigGlobalParameterList]):
|
|
|
377
383
|
def name(self) -> str:
|
|
378
384
|
return f"{super().name}Configuration"
|
|
379
385
|
|
|
380
|
-
def _imports_shared(self, async_mode: bool) -> FileImport:
|
|
386
|
+
def _imports_shared(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
381
387
|
file_import = FileImport(self.code_model)
|
|
382
388
|
file_import.add_submodule_import(
|
|
383
389
|
"pipeline" if self.code_model.is_azure_flavor else "runtime",
|
|
@@ -386,7 +392,12 @@ class Config(_ClientConfigBase[ConfigGlobalParameterList]):
|
|
|
386
392
|
)
|
|
387
393
|
file_import.add_submodule_import("typing", "Any", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
388
394
|
if self.code_model.options["package_version"]:
|
|
389
|
-
|
|
395
|
+
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
396
|
+
file_import.add_submodule_import(
|
|
397
|
+
self.code_model.get_relative_import_path(serialize_namespace, module_name="_version"),
|
|
398
|
+
"VERSION",
|
|
399
|
+
ImportType.LOCAL,
|
|
400
|
+
)
|
|
390
401
|
if self.code_model.options["azure_arm"]:
|
|
391
402
|
policy = "AsyncARMChallengeAuthenticationPolicy" if async_mode else "ARMChallengeAuthenticationPolicy"
|
|
392
403
|
file_import.add_submodule_import("azure.mgmt.core.policies", "ARMHttpLoggingPolicy", ImportType.SDKCORE)
|
|
@@ -394,22 +405,21 @@ class Config(_ClientConfigBase[ConfigGlobalParameterList]):
|
|
|
394
405
|
|
|
395
406
|
return file_import
|
|
396
407
|
|
|
397
|
-
def imports(self, async_mode: bool) -> FileImport:
|
|
398
|
-
file_import = self._imports_shared(async_mode)
|
|
408
|
+
def imports(self, async_mode: bool, **kwargs) -> FileImport:
|
|
409
|
+
file_import = self._imports_shared(async_mode, **kwargs)
|
|
399
410
|
for gp in self.parameters:
|
|
400
411
|
if gp.method_location == ParameterMethodLocation.KWARG and gp not in self.parameters.kwargs_to_pop:
|
|
401
412
|
continue
|
|
402
413
|
file_import.merge(
|
|
403
414
|
gp.imports(
|
|
404
415
|
async_mode=async_mode,
|
|
405
|
-
|
|
406
|
-
operation=True,
|
|
416
|
+
**kwargs,
|
|
407
417
|
)
|
|
408
418
|
)
|
|
409
419
|
return file_import
|
|
410
420
|
|
|
411
|
-
def imports_for_multiapi(self, async_mode: bool) -> FileImport:
|
|
412
|
-
file_import = self._imports_shared(async_mode)
|
|
421
|
+
def imports_for_multiapi(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
422
|
+
file_import = self._imports_shared(async_mode, **kwargs)
|
|
413
423
|
for gp in self.parameters:
|
|
414
424
|
if (
|
|
415
425
|
gp.method_location == ParameterMethodLocation.KWARG
|
|
@@ -420,8 +430,7 @@ class Config(_ClientConfigBase[ConfigGlobalParameterList]):
|
|
|
420
430
|
file_import.merge(
|
|
421
431
|
gp.imports_for_multiapi(
|
|
422
432
|
async_mode=async_mode,
|
|
423
|
-
|
|
424
|
-
operation=True,
|
|
433
|
+
**kwargs,
|
|
425
434
|
)
|
|
426
435
|
)
|
|
427
436
|
return file_import
|