@autorest/python 6.38.1 → 6.39.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/README.md +2 -27
- package/autorest/codegen.py +0 -1
- package/autorest/jsonrpc/server.py +0 -3
- package/generator/build/lib/pygen/__init__.py +14 -23
- package/generator/build/lib/pygen/codegen/__init__.py +4 -4
- package/generator/build/lib/pygen/codegen/models/__init__.py +2 -2
- package/generator/build/lib/pygen/codegen/models/base.py +9 -12
- package/generator/build/lib/pygen/codegen/models/base_builder.py +4 -6
- package/generator/build/lib/pygen/codegen/models/client.py +61 -102
- package/generator/build/lib/pygen/codegen/models/code_model.py +29 -29
- package/generator/build/lib/pygen/codegen/models/combined_type.py +7 -7
- package/generator/build/lib/pygen/codegen/models/constant_type.py +4 -11
- package/generator/build/lib/pygen/codegen/models/credential_types.py +9 -11
- package/generator/build/lib/pygen/codegen/models/dictionary_type.py +7 -8
- package/generator/build/lib/pygen/codegen/models/enum_type.py +7 -7
- package/generator/build/lib/pygen/codegen/models/imports.py +24 -29
- package/generator/build/lib/pygen/codegen/models/list_type.py +15 -14
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +6 -6
- package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/build/lib/pygen/codegen/models/model_type.py +11 -11
- package/generator/build/lib/pygen/codegen/models/operation.py +26 -56
- package/generator/build/lib/pygen/codegen/models/operation_group.py +11 -22
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +15 -19
- package/generator/build/lib/pygen/codegen/models/parameter.py +12 -21
- package/generator/build/lib/pygen/codegen/models/parameter_list.py +37 -39
- package/generator/build/lib/pygen/codegen/models/primitive_types.py +24 -18
- package/generator/build/lib/pygen/codegen/models/property.py +10 -10
- package/generator/build/lib/pygen/codegen/models/request_builder.py +7 -8
- package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +3 -3
- package/generator/build/lib/pygen/codegen/models/response.py +15 -40
- package/generator/build/lib/pygen/codegen/models/utils.py +2 -2
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +26 -42
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +103 -100
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +22 -25
- package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +2 -2
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +49 -61
- package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +6 -7
- package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +1 -2
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +15 -17
- package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -6
- package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +28 -18
- package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +1 -2
- package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +1 -2
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +9 -14
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +7 -7
- package/generator/build/lib/pygen/codegen/serializers/utils.py +2 -2
- package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +30 -24
- package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
- package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
- package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +11 -13
- package/generator/build/lib/pygen/codegen/templates/utils.py.jinja2 +6 -6
- package/generator/build/lib/pygen/preprocess/__init__.py +47 -30
- package/generator/build/lib/pygen/preprocess/helpers.py +2 -2
- package/generator/build/lib/pygen/utils.py +6 -6
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/__init__.py +14 -23
- package/generator/pygen/codegen/__init__.py +4 -4
- package/generator/pygen/codegen/models/__init__.py +2 -2
- package/generator/pygen/codegen/models/base.py +9 -12
- package/generator/pygen/codegen/models/base_builder.py +4 -6
- package/generator/pygen/codegen/models/client.py +61 -102
- package/generator/pygen/codegen/models/code_model.py +29 -29
- package/generator/pygen/codegen/models/combined_type.py +7 -7
- package/generator/pygen/codegen/models/constant_type.py +4 -11
- package/generator/pygen/codegen/models/credential_types.py +9 -11
- package/generator/pygen/codegen/models/dictionary_type.py +7 -8
- package/generator/pygen/codegen/models/enum_type.py +7 -7
- package/generator/pygen/codegen/models/imports.py +24 -29
- package/generator/pygen/codegen/models/list_type.py +15 -14
- package/generator/pygen/codegen/models/lro_operation.py +6 -6
- package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/pygen/codegen/models/model_type.py +11 -11
- package/generator/pygen/codegen/models/operation.py +26 -56
- package/generator/pygen/codegen/models/operation_group.py +11 -22
- package/generator/pygen/codegen/models/paging_operation.py +15 -19
- package/generator/pygen/codegen/models/parameter.py +12 -21
- package/generator/pygen/codegen/models/parameter_list.py +37 -39
- package/generator/pygen/codegen/models/primitive_types.py +24 -18
- package/generator/pygen/codegen/models/property.py +10 -10
- package/generator/pygen/codegen/models/request_builder.py +7 -8
- package/generator/pygen/codegen/models/request_builder_parameter.py +3 -3
- package/generator/pygen/codegen/models/response.py +15 -40
- package/generator/pygen/codegen/models/utils.py +2 -2
- package/generator/pygen/codegen/serializers/__init__.py +26 -42
- package/generator/pygen/codegen/serializers/builder_serializer.py +103 -100
- package/generator/pygen/codegen/serializers/client_serializer.py +22 -25
- package/generator/pygen/codegen/serializers/enum_serializer.py +2 -2
- package/generator/pygen/codegen/serializers/general_serializer.py +49 -61
- package/generator/pygen/codegen/serializers/import_serializer.py +6 -7
- package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -2
- package/generator/pygen/codegen/serializers/model_serializer.py +15 -17
- package/generator/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -6
- package/generator/pygen/codegen/serializers/parameter_serializer.py +28 -18
- package/generator/pygen/codegen/serializers/patch_serializer.py +1 -2
- package/generator/pygen/codegen/serializers/request_builders_serializer.py +1 -2
- package/generator/pygen/codegen/serializers/sample_serializer.py +9 -14
- package/generator/pygen/codegen/serializers/test_serializer.py +7 -7
- package/generator/pygen/codegen/serializers/utils.py +2 -2
- package/generator/pygen/codegen/templates/model_base.py.jinja2 +30 -24
- package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
- package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
- package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
- package/generator/pygen/codegen/templates/patch.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/serialization.py.jinja2 +11 -13
- package/generator/pygen/codegen/templates/utils.py.jinja2 +6 -6
- package/generator/pygen/preprocess/__init__.py +47 -30
- package/generator/pygen/preprocess/helpers.py +2 -2
- package/generator/pygen/utils.py +6 -6
- package/generator/pygen.egg-info/SOURCES.txt +0 -2
- package/package.json +2 -2
- package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
- package/autorest/multiapi/__init__.py +0 -185
- package/autorest/multiapi/models/__init__.py +0 -16
- package/autorest/multiapi/models/client.py +0 -68
- package/autorest/multiapi/models/code_model.py +0 -142
- package/autorest/multiapi/models/config.py +0 -24
- package/autorest/multiapi/models/constant_global_parameter.py +0 -11
- package/autorest/multiapi/models/global_parameter.py +0 -34
- package/autorest/multiapi/models/global_parameters.py +0 -53
- package/autorest/multiapi/models/imports.py +0 -181
- package/autorest/multiapi/models/mixin_operation.py +0 -38
- package/autorest/multiapi/models/operation_group.py +0 -29
- package/autorest/multiapi/models/operation_mixin_group.py +0 -89
- package/autorest/multiapi/serializers/__init__.py +0 -145
- package/autorest/multiapi/serializers/import_serializer.py +0 -181
- package/autorest/multiapi/templates/multiapi_config.py.jinja2 +0 -89
- package/autorest/multiapi/templates/multiapi_init.py.jinja2 +0 -22
- package/autorest/multiapi/templates/multiapi_models.py.jinja2 +0 -9
- package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +0 -39
- package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +0 -163
- package/autorest/multiapi/templates/multiapi_version.py.jinja2 +0 -8
- package/autorest/multiapi/utils.py +0 -51
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +0 -216
- package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +0 -167
- package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -216
- package/generator/pygen/codegen/templates/metadata.json.jinja2 +0 -167
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Any, TYPE_CHECKING
|
|
7
7
|
|
|
8
8
|
from .utils import OrderedSet
|
|
9
9
|
|
|
@@ -26,11 +26,11 @@ class OperationGroup(BaseModel):
|
|
|
26
26
|
|
|
27
27
|
def __init__(
|
|
28
28
|
self,
|
|
29
|
-
yaml_data:
|
|
29
|
+
yaml_data: dict[str, Any],
|
|
30
30
|
code_model: "CodeModel",
|
|
31
31
|
client: "Client",
|
|
32
|
-
operations:
|
|
33
|
-
api_versions:
|
|
32
|
+
operations: list["OperationType"],
|
|
33
|
+
api_versions: list[str],
|
|
34
34
|
) -> None:
|
|
35
35
|
super().__init__(yaml_data, code_model)
|
|
36
36
|
self.client = client
|
|
@@ -38,7 +38,7 @@ class OperationGroup(BaseModel):
|
|
|
38
38
|
self.property_name: str = yaml_data["propertyName"]
|
|
39
39
|
self.operations = operations
|
|
40
40
|
self.api_versions = api_versions
|
|
41
|
-
self.operation_groups:
|
|
41
|
+
self.operation_groups: list[OperationGroup] = []
|
|
42
42
|
if self.code_model.options["show-operations"]:
|
|
43
43
|
self.operation_groups = [
|
|
44
44
|
OperationGroup.from_yaml(op_group, code_model, client)
|
|
@@ -53,7 +53,7 @@ class OperationGroup(BaseModel):
|
|
|
53
53
|
@property
|
|
54
54
|
def class_name(self) -> str:
|
|
55
55
|
"""The class name of the operation group."""
|
|
56
|
-
if self.is_mixin
|
|
56
|
+
if self.is_mixin:
|
|
57
57
|
return "_" + self.yaml_data["className"]
|
|
58
58
|
return self.yaml_data["className"]
|
|
59
59
|
|
|
@@ -73,22 +73,11 @@ class OperationGroup(BaseModel):
|
|
|
73
73
|
pipeline_client = (
|
|
74
74
|
f"{'Async' if async_mode else ''}PipelineClient[HttpRequest, {'Async' if async_mode else ''}HttpResponse]"
|
|
75
75
|
)
|
|
76
|
-
base_classes:
|
|
76
|
+
base_classes: list[str] = []
|
|
77
77
|
if self.is_mixin:
|
|
78
78
|
base_classes.append(f"ClientMixinABC[{pipeline_client}, {self.client.name}Configuration]")
|
|
79
79
|
return ", ".join(base_classes)
|
|
80
80
|
|
|
81
|
-
def imports_for_multiapi(self, async_mode: bool, **kwargs) -> FileImport:
|
|
82
|
-
file_import = FileImport(self.code_model)
|
|
83
|
-
relative_path = ".." if async_mode else "."
|
|
84
|
-
for operation in self.operations:
|
|
85
|
-
file_import.merge(operation.imports_for_multiapi(async_mode, **kwargs))
|
|
86
|
-
if (self.code_model.model_types or self.code_model.enums) and self.code_model.options[
|
|
87
|
-
"models-mode"
|
|
88
|
-
] == "msrest":
|
|
89
|
-
file_import.add_submodule_import(relative_path, "models", ImportType.LOCAL, alias="_models")
|
|
90
|
-
return file_import
|
|
91
|
-
|
|
92
81
|
def pylint_disable(self) -> str:
|
|
93
82
|
retval: str = ""
|
|
94
83
|
if self.has_abstract_operations:
|
|
@@ -141,7 +130,7 @@ class OperationGroup(BaseModel):
|
|
|
141
130
|
og.class_name,
|
|
142
131
|
ImportType.LOCAL,
|
|
143
132
|
)
|
|
144
|
-
# for
|
|
133
|
+
# shared code for imports
|
|
145
134
|
if (
|
|
146
135
|
(self.code_model.public_model_types)
|
|
147
136
|
and self.code_model.options["models-mode"] == "msrest"
|
|
@@ -206,7 +195,7 @@ class OperationGroup(BaseModel):
|
|
|
206
195
|
return file_import
|
|
207
196
|
file_import.add_submodule_import("typing", "TypeVar", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
208
197
|
file_import.define_mypy_type("T", "TypeVar('T')")
|
|
209
|
-
type_value = "Optional[Callable[[PipelineResponse[HttpRequest, {}HttpResponse], T,
|
|
198
|
+
type_value = "Optional[Callable[[PipelineResponse[HttpRequest, {}HttpResponse], T, dict[str, Any]], Any]]"
|
|
210
199
|
file_import.define_mypy_type("ClsType", type_value.format(""), type_value.format("Async"))
|
|
211
200
|
return file_import
|
|
212
201
|
|
|
@@ -233,7 +222,7 @@ class OperationGroup(BaseModel):
|
|
|
233
222
|
raise KeyError(f"No operation with id {operation_id} found.") from exc
|
|
234
223
|
|
|
235
224
|
@property
|
|
236
|
-
def lro_operations(self) ->
|
|
225
|
+
def lro_operations(self) -> list["OperationType"]:
|
|
237
226
|
return [operation for operation in self.operations if operation.operation_type in ("lro", "lropaging")] + [
|
|
238
227
|
operation for operation_group in self.operation_groups for operation in operation_group.lro_operations
|
|
239
228
|
]
|
|
@@ -250,7 +239,7 @@ class OperationGroup(BaseModel):
|
|
|
250
239
|
@classmethod
|
|
251
240
|
def from_yaml(
|
|
252
241
|
cls,
|
|
253
|
-
yaml_data:
|
|
242
|
+
yaml_data: dict[str, Any],
|
|
254
243
|
code_model: "CodeModel",
|
|
255
244
|
client: "Client",
|
|
256
245
|
) -> "OperationGroup":
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Any, Optional, Union, TYPE_CHECKING, cast, TypeVar
|
|
7
7
|
|
|
8
8
|
from .operation import Operation, OperationBase
|
|
9
9
|
from .response import PagingResponse, LROPagingResponse, Response
|
|
@@ -28,16 +28,16 @@ PagingResponseType = TypeVar("PagingResponseType", bound=Union[PagingResponse, L
|
|
|
28
28
|
class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
29
29
|
def __init__(
|
|
30
30
|
self,
|
|
31
|
-
yaml_data:
|
|
31
|
+
yaml_data: dict[str, Any],
|
|
32
32
|
code_model: "CodeModel",
|
|
33
33
|
client: "Client",
|
|
34
34
|
name: str,
|
|
35
35
|
request_builder: RequestBuilder,
|
|
36
36
|
parameters: ParameterList,
|
|
37
|
-
responses:
|
|
38
|
-
exceptions:
|
|
37
|
+
responses: list[PagingResponseType],
|
|
38
|
+
exceptions: list[Response],
|
|
39
39
|
*,
|
|
40
|
-
overloads: Optional[
|
|
40
|
+
overloads: Optional[list[Operation]] = None,
|
|
41
41
|
override_success_response_to_200: bool = False,
|
|
42
42
|
) -> None:
|
|
43
43
|
super().__init__(
|
|
@@ -59,8 +59,8 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
|
59
59
|
self.override_success_response_to_200 = override_success_response_to_200
|
|
60
60
|
self.pager_sync: str = yaml_data.get("pagerSync") or f"{self.code_model.core_library}.paging.ItemPaged"
|
|
61
61
|
self.pager_async: str = yaml_data.get("pagerAsync") or f"{self.code_model.core_library}.paging.AsyncItemPaged"
|
|
62
|
-
self.continuation_token:
|
|
63
|
-
self.next_link_reinjected_parameters:
|
|
62
|
+
self.continuation_token: dict[str, Any] = yaml_data.get("continuationToken", {})
|
|
63
|
+
self.next_link_reinjected_parameters: list[Parameter] = [
|
|
64
64
|
Parameter.from_yaml(p, code_model) for p in yaml_data.get("nextLinkReInjectedParameters", [])
|
|
65
65
|
]
|
|
66
66
|
|
|
@@ -119,8 +119,14 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
|
119
119
|
def cls_type_annotation(self, *, async_mode: bool, **kwargs: Any) -> str:
|
|
120
120
|
return f"ClsType[{Response.type_annotation(self.responses[0], async_mode=async_mode, **kwargs)}]"
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
@property
|
|
123
|
+
def has_optional_return_type(self) -> bool:
|
|
124
|
+
return False
|
|
125
|
+
|
|
126
|
+
def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
127
|
+
if self.abstract:
|
|
128
|
+
return FileImport(self.code_model)
|
|
129
|
+
file_import = super().imports(async_mode, **kwargs)
|
|
124
130
|
if async_mode:
|
|
125
131
|
default_paging_submodule = f"{'async_' if self.code_model.is_azure_flavor else ''}paging"
|
|
126
132
|
file_import.add_submodule_import(
|
|
@@ -139,16 +145,6 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
|
139
145
|
and not async_mode
|
|
140
146
|
):
|
|
141
147
|
file_import.merge(self.next_request_builder.imports(**kwargs))
|
|
142
|
-
return file_import
|
|
143
|
-
|
|
144
|
-
@property
|
|
145
|
-
def has_optional_return_type(self) -> bool:
|
|
146
|
-
return False
|
|
147
|
-
|
|
148
|
-
def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
149
|
-
if self.abstract:
|
|
150
|
-
return FileImport(self.code_model)
|
|
151
|
-
file_import = self._imports_shared(async_mode, **kwargs)
|
|
152
148
|
file_import.merge(super().imports(async_mode, **kwargs))
|
|
153
149
|
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
154
150
|
if self.code_model.options["tracing"] and self.want_tracing:
|
|
@@ -7,10 +7,8 @@ import abc
|
|
|
7
7
|
from enum import Enum
|
|
8
8
|
|
|
9
9
|
from typing import (
|
|
10
|
-
Dict,
|
|
11
10
|
Any,
|
|
12
11
|
TYPE_CHECKING,
|
|
13
|
-
List,
|
|
14
12
|
Optional,
|
|
15
13
|
TypeVar,
|
|
16
14
|
Union,
|
|
@@ -35,6 +33,7 @@ class ParameterLocation(str, Enum):
|
|
|
35
33
|
ENDPOINT_PATH = "endpointPath"
|
|
36
34
|
QUERY = "query"
|
|
37
35
|
BODY = "body"
|
|
36
|
+
KEYWORD = "keyword"
|
|
38
37
|
OTHER = "other"
|
|
39
38
|
|
|
40
39
|
|
|
@@ -56,7 +55,7 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
|
|
|
56
55
|
|
|
57
56
|
def __init__(
|
|
58
57
|
self,
|
|
59
|
-
yaml_data:
|
|
58
|
+
yaml_data: dict[str, Any],
|
|
60
59
|
code_model: "CodeModel",
|
|
61
60
|
type: BaseType,
|
|
62
61
|
) -> None:
|
|
@@ -75,13 +74,13 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
|
|
|
75
74
|
self.grouped_by: Optional[str] = self.yaml_data.get("groupedBy")
|
|
76
75
|
# property matching property name to parameter name for grouping params
|
|
77
76
|
# and flattened body params
|
|
78
|
-
self.property_to_parameter_name: Optional[
|
|
77
|
+
self.property_to_parameter_name: Optional[dict[str, str]] = self.yaml_data.get("propertyToParameterName")
|
|
79
78
|
self.flattened: bool = self.yaml_data.get("flattened", False)
|
|
80
79
|
self.in_flattened_body: bool = self.yaml_data.get("inFlattenedBody", False)
|
|
81
80
|
self.grouper: bool = self.yaml_data.get("grouper", False)
|
|
82
81
|
self.check_client_input: bool = self.yaml_data.get("checkClientInput", False)
|
|
83
82
|
self.added_on: Optional[str] = self.yaml_data.get("addedOn")
|
|
84
|
-
self.api_versions: Optional[
|
|
83
|
+
self.api_versions: Optional[list[str]] = self.yaml_data.get("apiVersions", [])
|
|
85
84
|
self.is_api_version: bool = self.yaml_data.get("isApiVersion", False)
|
|
86
85
|
self.in_overload: bool = self.yaml_data.get("inOverload", False)
|
|
87
86
|
self.default_to_unset_sentinel: bool = self.yaml_data.get("defaultToUnsetSentinel", False)
|
|
@@ -160,7 +159,7 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
|
|
|
160
159
|
def serialization_type(self, **kwargs: Any) -> str:
|
|
161
160
|
return self.type.serialization_type(**kwargs)
|
|
162
161
|
|
|
163
|
-
def
|
|
162
|
+
def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
164
163
|
file_import = FileImport(self.code_model)
|
|
165
164
|
if self.optional and self.client_default_value is None:
|
|
166
165
|
file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB)
|
|
@@ -178,10 +177,6 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
|
|
|
178
177
|
ImportType.LOCAL,
|
|
179
178
|
TypingSection.TYPING,
|
|
180
179
|
)
|
|
181
|
-
return file_import
|
|
182
|
-
|
|
183
|
-
def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
184
|
-
file_import = self._imports_shared(async_mode, **kwargs)
|
|
185
180
|
# special logic for api-version parameter
|
|
186
181
|
if not self.is_api_version:
|
|
187
182
|
file_import.merge(self.type.imports(async_mode=async_mode, **kwargs))
|
|
@@ -193,11 +188,6 @@ class _ParameterBase(BaseModel, abc.ABC): # pylint: disable=too-many-instance-a
|
|
|
193
188
|
)
|
|
194
189
|
return file_import
|
|
195
190
|
|
|
196
|
-
def imports_for_multiapi(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
197
|
-
file_import = self._imports_shared(async_mode, **kwargs)
|
|
198
|
-
file_import.merge(self.type.imports_for_multiapi(async_mode=async_mode, **kwargs))
|
|
199
|
-
return file_import
|
|
200
|
-
|
|
201
191
|
@property
|
|
202
192
|
def method_location(self) -> ParameterMethodLocation:
|
|
203
193
|
raise NotImplementedError("Please implement in children")
|
|
@@ -227,7 +217,7 @@ class BodyParameter(_ParameterBase):
|
|
|
227
217
|
"""Body parameter."""
|
|
228
218
|
|
|
229
219
|
@property
|
|
230
|
-
def entries(self) ->
|
|
220
|
+
def entries(self) -> list["BodyParameter"]:
|
|
231
221
|
return [BodyParameter.from_yaml(e, self.code_model) for e in self.yaml_data.get("entries", [])]
|
|
232
222
|
|
|
233
223
|
@property
|
|
@@ -258,7 +248,7 @@ class BodyParameter(_ParameterBase):
|
|
|
258
248
|
return not (self.flattened or self.grouped_by)
|
|
259
249
|
|
|
260
250
|
@property
|
|
261
|
-
def content_types(self) ->
|
|
251
|
+
def content_types(self) -> list[str]:
|
|
262
252
|
return self.yaml_data["contentTypes"]
|
|
263
253
|
|
|
264
254
|
@property
|
|
@@ -280,11 +270,10 @@ class BodyParameter(_ParameterBase):
|
|
|
280
270
|
"prepare_multipart_form_data",
|
|
281
271
|
ImportType.LOCAL,
|
|
282
272
|
)
|
|
283
|
-
file_import.add_submodule_import("typing", "List", ImportType.STDLIB)
|
|
284
273
|
return file_import
|
|
285
274
|
|
|
286
275
|
@classmethod
|
|
287
|
-
def from_yaml(cls, yaml_data:
|
|
276
|
+
def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel") -> "BodyParameter":
|
|
288
277
|
return cls(
|
|
289
278
|
yaml_data=yaml_data,
|
|
290
279
|
code_model=code_model,
|
|
@@ -300,7 +289,7 @@ class Parameter(_ParameterBase):
|
|
|
300
289
|
|
|
301
290
|
def __init__(
|
|
302
291
|
self,
|
|
303
|
-
yaml_data:
|
|
292
|
+
yaml_data: dict[str, Any],
|
|
304
293
|
code_model: "CodeModel",
|
|
305
294
|
type: BaseType,
|
|
306
295
|
) -> None:
|
|
@@ -364,7 +353,7 @@ class Parameter(_ParameterBase):
|
|
|
364
353
|
return ParameterMethodLocation.POSITIONAL
|
|
365
354
|
|
|
366
355
|
@classmethod
|
|
367
|
-
def from_yaml(cls, yaml_data:
|
|
356
|
+
def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel"):
|
|
368
357
|
return cls(
|
|
369
358
|
yaml_data=yaml_data,
|
|
370
359
|
code_model=code_model,
|
|
@@ -396,6 +385,8 @@ class ClientParameter(Parameter):
|
|
|
396
385
|
and not self.code_model.options["azure-arm"]
|
|
397
386
|
):
|
|
398
387
|
return ParameterMethodLocation.KEYWORD_ONLY
|
|
388
|
+
if self.location == ParameterLocation.KEYWORD:
|
|
389
|
+
return ParameterMethodLocation.KEYWORD_ONLY
|
|
399
390
|
return ParameterMethodLocation.POSITIONAL
|
|
400
391
|
|
|
401
392
|
|
|
@@ -7,8 +7,6 @@ import logging
|
|
|
7
7
|
from typing import (
|
|
8
8
|
Any,
|
|
9
9
|
Callable,
|
|
10
|
-
Dict,
|
|
11
|
-
List,
|
|
12
10
|
Optional,
|
|
13
11
|
TYPE_CHECKING,
|
|
14
12
|
Union,
|
|
@@ -48,7 +46,7 @@ class ParameterImplementation(Enum):
|
|
|
48
46
|
_LOGGER = logging.getLogger(__name__)
|
|
49
47
|
|
|
50
48
|
|
|
51
|
-
def method_signature_helper(positional:
|
|
49
|
+
def method_signature_helper(positional: list[str], keyword_only: Optional[list[str]], kwarg_params: list[str]):
|
|
52
50
|
keyword_only = keyword_only or []
|
|
53
51
|
return positional + keyword_only + kwarg_params
|
|
54
52
|
|
|
@@ -64,9 +62,9 @@ class _ParameterListBase(
|
|
|
64
62
|
|
|
65
63
|
def __init__(
|
|
66
64
|
self,
|
|
67
|
-
yaml_data:
|
|
65
|
+
yaml_data: dict[str, Any],
|
|
68
66
|
code_model: "CodeModel",
|
|
69
|
-
parameters:
|
|
67
|
+
parameters: list[ParameterType],
|
|
70
68
|
body_parameter: Optional[BodyParameterType] = None,
|
|
71
69
|
) -> None:
|
|
72
70
|
self.yaml_data = yaml_data
|
|
@@ -97,18 +95,18 @@ class _ParameterListBase(
|
|
|
97
95
|
|
|
98
96
|
@staticmethod
|
|
99
97
|
@abstractmethod
|
|
100
|
-
def parameter_creator() -> Callable[[
|
|
98
|
+
def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], ParameterType]:
|
|
101
99
|
"""Callable for creating parameters"""
|
|
102
100
|
|
|
103
101
|
@staticmethod
|
|
104
102
|
@abstractmethod
|
|
105
|
-
def body_parameter_creator() -> Callable[[
|
|
103
|
+
def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], BodyParameterType]:
|
|
106
104
|
"""Callable for creating body parameters"""
|
|
107
105
|
|
|
108
106
|
@property
|
|
109
|
-
def grouped(self) ->
|
|
107
|
+
def grouped(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
110
108
|
"""All parameters that are inside a parameter group"""
|
|
111
|
-
params:
|
|
109
|
+
params: list[Union[ParameterType, BodyParameterType]] = [p for p in self.parameters if p.grouped_by]
|
|
112
110
|
if self.has_body and self.body_parameter.grouped_by:
|
|
113
111
|
params.append(self.body_parameter)
|
|
114
112
|
return params
|
|
@@ -123,41 +121,41 @@ class _ParameterListBase(
|
|
|
123
121
|
return bool(self._body_parameter)
|
|
124
122
|
|
|
125
123
|
@property
|
|
126
|
-
def path(self) ->
|
|
124
|
+
def path(self) -> list[ParameterType]:
|
|
127
125
|
"""All path parameters"""
|
|
128
126
|
return [p for p in self.parameters if p.location in (ParameterLocation.PATH, ParameterLocation.ENDPOINT_PATH)]
|
|
129
127
|
|
|
130
128
|
@property
|
|
131
|
-
def query(self) ->
|
|
129
|
+
def query(self) -> list[ParameterType]:
|
|
132
130
|
"""All query parameters"""
|
|
133
131
|
return [p for p in self.parameters if p.location == ParameterLocation.QUERY]
|
|
134
132
|
|
|
135
133
|
@property
|
|
136
|
-
def headers(self) ->
|
|
134
|
+
def headers(self) -> list[ParameterType]:
|
|
137
135
|
"""All header parameters"""
|
|
138
136
|
return [p for p in self.parameters if p.location == ParameterLocation.HEADER]
|
|
139
137
|
|
|
140
138
|
@property
|
|
141
|
-
def constant(self) ->
|
|
139
|
+
def constant(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
142
140
|
"""All constant parameters"""
|
|
143
141
|
return [p for p in self.parameters if p.constant]
|
|
144
142
|
|
|
145
143
|
@property
|
|
146
|
-
def positional(self) ->
|
|
144
|
+
def positional(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
147
145
|
"""All positional parameters"""
|
|
148
146
|
return _sort(
|
|
149
147
|
[p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.POSITIONAL]
|
|
150
148
|
)
|
|
151
149
|
|
|
152
150
|
@property
|
|
153
|
-
def keyword_only(self) ->
|
|
151
|
+
def keyword_only(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
154
152
|
"""All keyword only parameters"""
|
|
155
153
|
return _sort(
|
|
156
154
|
[p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.KEYWORD_ONLY]
|
|
157
155
|
)
|
|
158
156
|
|
|
159
157
|
@property
|
|
160
|
-
def kwarg(self) ->
|
|
158
|
+
def kwarg(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
161
159
|
"""All kwargs"""
|
|
162
160
|
return _sort([p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.KWARG])
|
|
163
161
|
|
|
@@ -174,9 +172,9 @@ class _ParameterListBase(
|
|
|
174
172
|
"""Whether this is a client or a method parameter"""
|
|
175
173
|
|
|
176
174
|
@property
|
|
177
|
-
def unsorted_method_params(self) ->
|
|
175
|
+
def unsorted_method_params(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
178
176
|
"""Method params before sorting"""
|
|
179
|
-
method_params:
|
|
177
|
+
method_params: list[Union[ParameterType, BodyParameterType]] = [
|
|
180
178
|
p
|
|
181
179
|
for p in self.parameters
|
|
182
180
|
if p.in_method_signature
|
|
@@ -196,11 +194,11 @@ class _ParameterListBase(
|
|
|
196
194
|
return method_params
|
|
197
195
|
|
|
198
196
|
@property
|
|
199
|
-
def method(self) ->
|
|
197
|
+
def method(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
200
198
|
"""Sorted method params. First positional, then keyword only, then kwarg"""
|
|
201
199
|
return self.positional + self.keyword_only + self.kwarg
|
|
202
200
|
|
|
203
|
-
def method_signature(self, async_mode: bool, **kwargs: Any) ->
|
|
201
|
+
def method_signature(self, async_mode: bool, **kwargs: Any) -> list[str]:
|
|
204
202
|
"""Method signature for this parameter list."""
|
|
205
203
|
return method_signature_helper(
|
|
206
204
|
positional=self.method_signature_positional(async_mode, **kwargs),
|
|
@@ -208,11 +206,11 @@ class _ParameterListBase(
|
|
|
208
206
|
kwarg_params=self.method_signature_kwargs,
|
|
209
207
|
)
|
|
210
208
|
|
|
211
|
-
def method_signature_positional(self, async_mode: bool, **kwargs: Any) ->
|
|
209
|
+
def method_signature_positional(self, async_mode: bool, **kwargs: Any) -> list[str]:
|
|
212
210
|
"""Signature for positional parameters"""
|
|
213
211
|
return [parameter.method_signature(async_mode, **kwargs) for parameter in self.positional]
|
|
214
212
|
|
|
215
|
-
def method_signature_keyword_only(self, async_mode: bool, **kwargs: Any) ->
|
|
213
|
+
def method_signature_keyword_only(self, async_mode: bool, **kwargs: Any) -> list[str]:
|
|
216
214
|
"""Signature for keyword only parameters"""
|
|
217
215
|
result = [
|
|
218
216
|
parameter.method_signature(async_mode, **kwargs)
|
|
@@ -222,19 +220,19 @@ class _ParameterListBase(
|
|
|
222
220
|
return ["*,"] + result if result else []
|
|
223
221
|
|
|
224
222
|
@property
|
|
225
|
-
def method_signature_kwargs(self) ->
|
|
223
|
+
def method_signature_kwargs(self) -> list[str]:
|
|
226
224
|
"""Signature for kwargs"""
|
|
227
225
|
return ["**kwargs: Any"]
|
|
228
226
|
|
|
229
227
|
@property
|
|
230
|
-
def kwargs_to_pop(self) ->
|
|
228
|
+
def kwargs_to_pop(self) -> list[Union[ParameterType, BodyParameterType]]:
|
|
231
229
|
"""Method kwargs we want to pop"""
|
|
232
230
|
# don't want to pop bodies unless it's a constant
|
|
233
231
|
kwargs_to_pop = self.kwarg
|
|
234
232
|
return [k for k in kwargs_to_pop if k.location != ParameterLocation.BODY or k.constant]
|
|
235
233
|
|
|
236
234
|
@property
|
|
237
|
-
def call(self) ->
|
|
235
|
+
def call(self) -> list[str]:
|
|
238
236
|
"""How to pass in parameters to call the operation"""
|
|
239
237
|
retval = [p.client_name for p in self.method if p.method_location == ParameterMethodLocation.POSITIONAL]
|
|
240
238
|
retval.extend(
|
|
@@ -248,7 +246,7 @@ class _ParameterListBase(
|
|
|
248
246
|
return retval
|
|
249
247
|
|
|
250
248
|
@classmethod
|
|
251
|
-
def from_yaml(cls, yaml_data:
|
|
249
|
+
def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel"):
|
|
252
250
|
parameters = [cls.parameter_creator()(parameter, code_model) for parameter in yaml_data["parameters"]]
|
|
253
251
|
body_parameter = None
|
|
254
252
|
if yaml_data.get("bodyParameter"):
|
|
@@ -264,11 +262,11 @@ class _ParameterListBase(
|
|
|
264
262
|
class _ParameterList(_ParameterListBase[Parameter, BodyParameter]):
|
|
265
263
|
|
|
266
264
|
@staticmethod
|
|
267
|
-
def parameter_creator() -> Callable[[
|
|
265
|
+
def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], Parameter]:
|
|
268
266
|
return Parameter.from_yaml
|
|
269
267
|
|
|
270
268
|
@staticmethod
|
|
271
|
-
def body_parameter_creator() -> Callable[[
|
|
269
|
+
def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], BodyParameter]:
|
|
272
270
|
return BodyParameter.from_yaml
|
|
273
271
|
|
|
274
272
|
@property
|
|
@@ -276,7 +274,7 @@ class _ParameterList(_ParameterListBase[Parameter, BodyParameter]):
|
|
|
276
274
|
return "Method"
|
|
277
275
|
|
|
278
276
|
@property
|
|
279
|
-
def path(self) ->
|
|
277
|
+
def path(self) -> list[Parameter]:
|
|
280
278
|
return [k for k in super().path if k.location == ParameterLocation.ENDPOINT_PATH]
|
|
281
279
|
|
|
282
280
|
|
|
@@ -288,11 +286,11 @@ class _RequestBuilderParameterList(_ParameterListBase[RequestBuilderParameter, R
|
|
|
288
286
|
"""_RequestBuilderParameterList is base parameter list for RequestBuilder classes"""
|
|
289
287
|
|
|
290
288
|
@staticmethod
|
|
291
|
-
def parameter_creator() -> Callable[[
|
|
289
|
+
def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], RequestBuilderParameter]:
|
|
292
290
|
return RequestBuilderParameter.from_yaml
|
|
293
291
|
|
|
294
292
|
@staticmethod
|
|
295
|
-
def body_parameter_creator() -> Callable[[
|
|
293
|
+
def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], RequestBuilderBodyParameter]:
|
|
296
294
|
return RequestBuilderBodyParameter.from_yaml
|
|
297
295
|
|
|
298
296
|
@property
|
|
@@ -302,7 +300,7 @@ class _RequestBuilderParameterList(_ParameterListBase[RequestBuilderParameter, R
|
|
|
302
300
|
@property
|
|
303
301
|
def unsorted_method_params(
|
|
304
302
|
self,
|
|
305
|
-
) ->
|
|
303
|
+
) -> list[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
|
|
306
304
|
# don't have access to client params in request builder
|
|
307
305
|
retval = [
|
|
308
306
|
p
|
|
@@ -313,13 +311,13 @@ class _RequestBuilderParameterList(_ParameterListBase[RequestBuilderParameter, R
|
|
|
313
311
|
return retval
|
|
314
312
|
|
|
315
313
|
@property
|
|
316
|
-
def path(self) ->
|
|
314
|
+
def path(self) -> list[RequestBuilderParameter]:
|
|
317
315
|
return [p for p in super().path if p.location != ParameterLocation.ENDPOINT_PATH]
|
|
318
316
|
|
|
319
317
|
@property
|
|
320
318
|
def constant(
|
|
321
319
|
self,
|
|
322
|
-
) ->
|
|
320
|
+
) -> list[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
|
|
323
321
|
"""All constant parameters"""
|
|
324
322
|
return [p for p in super().constant if p.location != ParameterLocation.ENDPOINT_PATH]
|
|
325
323
|
|
|
@@ -336,7 +334,7 @@ class _ClientGlobalParameterList(_ParameterListBase[ParameterType, BodyParameter
|
|
|
336
334
|
"""Base parameter list for client and config classes"""
|
|
337
335
|
|
|
338
336
|
@staticmethod
|
|
339
|
-
def body_parameter_creator() -> Callable[[
|
|
337
|
+
def body_parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], BodyParameter]:
|
|
340
338
|
return BodyParameter.from_yaml
|
|
341
339
|
|
|
342
340
|
@property
|
|
@@ -351,7 +349,7 @@ class _ClientGlobalParameterList(_ParameterListBase[ParameterType, BodyParameter
|
|
|
351
349
|
return None
|
|
352
350
|
|
|
353
351
|
@property
|
|
354
|
-
def path(self) ->
|
|
352
|
+
def path(self) -> list[ParameterType]:
|
|
355
353
|
return [p for p in super().path if p.location == ParameterLocation.ENDPOINT_PATH]
|
|
356
354
|
|
|
357
355
|
|
|
@@ -359,11 +357,11 @@ class ClientGlobalParameterList(_ClientGlobalParameterList[ClientParameter]):
|
|
|
359
357
|
"""Parameter list for Client class"""
|
|
360
358
|
|
|
361
359
|
@staticmethod
|
|
362
|
-
def parameter_creator() -> Callable[[
|
|
360
|
+
def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], ClientParameter]:
|
|
363
361
|
return ClientParameter.from_yaml
|
|
364
362
|
|
|
365
363
|
@property
|
|
366
|
-
def path(self) ->
|
|
364
|
+
def path(self) -> list[ClientParameter]:
|
|
367
365
|
return [p for p in super().path if not p.is_host]
|
|
368
366
|
|
|
369
367
|
@property
|
|
@@ -379,7 +377,7 @@ class ConfigGlobalParameterList(_ClientGlobalParameterList[ConfigParameter]):
|
|
|
379
377
|
"""Parameter list for config"""
|
|
380
378
|
|
|
381
379
|
@staticmethod
|
|
382
|
-
def parameter_creator() -> Callable[[
|
|
380
|
+
def parameter_creator() -> Callable[[dict[str, Any], "CodeModel"], ConfigParameter]:
|
|
383
381
|
return ConfigParameter.from_yaml
|
|
384
382
|
|
|
385
383
|
@property
|