@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 Any,
|
|
6
|
+
from typing import Any, Optional, TYPE_CHECKING, TypeVar, Union
|
|
7
7
|
from .imports import FileImport
|
|
8
8
|
from .operation import OperationBase, Operation
|
|
9
9
|
from .response import LROPagingResponse, LROResponse, Response
|
|
@@ -22,16 +22,16 @@ LROResponseType = TypeVar("LROResponseType", bound=Union[LROResponse, LROPagingR
|
|
|
22
22
|
class LROOperationBase(OperationBase[LROResponseType]):
|
|
23
23
|
def __init__(
|
|
24
24
|
self,
|
|
25
|
-
yaml_data:
|
|
25
|
+
yaml_data: dict[str, Any],
|
|
26
26
|
code_model: "CodeModel",
|
|
27
27
|
client: "Client",
|
|
28
28
|
name: str,
|
|
29
29
|
request_builder: RequestBuilder,
|
|
30
30
|
parameters: ParameterList,
|
|
31
|
-
responses:
|
|
32
|
-
exceptions:
|
|
31
|
+
responses: list[LROResponseType],
|
|
32
|
+
exceptions: list[Response],
|
|
33
33
|
*,
|
|
34
|
-
overloads: Optional[
|
|
34
|
+
overloads: Optional[list[Operation]] = None,
|
|
35
35
|
) -> None:
|
|
36
36
|
super().__init__(
|
|
37
37
|
code_model=code_model,
|
|
@@ -46,7 +46,7 @@ class LROOperationBase(OperationBase[LROResponseType]):
|
|
|
46
46
|
)
|
|
47
47
|
if not self.name.lstrip("_").startswith("begin"):
|
|
48
48
|
self.name = ("_begin" if self.internal else "begin_") + self.name
|
|
49
|
-
self.lro_options:
|
|
49
|
+
self.lro_options: dict[str, Any] = self.yaml_data.get("lroOptions", {})
|
|
50
50
|
self._initial_operation: Optional["OperationType"] = None
|
|
51
51
|
|
|
52
52
|
@property
|
|
@@ -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 Any,
|
|
6
|
+
from typing import Any, Union
|
|
7
7
|
from .imports import FileImport
|
|
8
8
|
from .lro_operation import LROOperationBase
|
|
9
9
|
from .paging_operation import PagingOperationBase
|
|
@@ -12,7 +12,7 @@ from .response import LROPagingResponse, Response
|
|
|
12
12
|
|
|
13
13
|
class LROPagingOperation(LROOperationBase[LROPagingResponse], PagingOperationBase[LROPagingResponse]):
|
|
14
14
|
@property
|
|
15
|
-
def success_status_codes(self) ->
|
|
15
|
+
def success_status_codes(self) -> list[Union[int, str, list[int]]]:
|
|
16
16
|
"""The list of all successfull status code."""
|
|
17
17
|
return [200]
|
|
18
18
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from collections import OrderedDict
|
|
8
|
-
from typing import Any,
|
|
8
|
+
from typing import Any, Optional, TYPE_CHECKING, cast
|
|
9
9
|
import sys
|
|
10
10
|
from .utils import add_to_pylint_disable, NamespaceType
|
|
11
11
|
from .base import BaseType
|
|
@@ -36,7 +36,7 @@ class UsageFlags(Enum):
|
|
|
36
36
|
Xml = 512
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
def _get_properties(type: "ModelType", properties:
|
|
39
|
+
def _get_properties(type: "ModelType", properties: list[Property]) -> list[Property]:
|
|
40
40
|
for parent in type.parents:
|
|
41
41
|
# here we're adding the properties from our parents
|
|
42
42
|
|
|
@@ -61,12 +61,12 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
|
|
|
61
61
|
|
|
62
62
|
def __init__(
|
|
63
63
|
self,
|
|
64
|
-
yaml_data:
|
|
64
|
+
yaml_data: dict[str, Any],
|
|
65
65
|
code_model: "CodeModel",
|
|
66
66
|
*,
|
|
67
|
-
properties: Optional[
|
|
68
|
-
parents: Optional[
|
|
69
|
-
discriminated_subtypes: Optional[
|
|
67
|
+
properties: Optional[list[Property]] = None,
|
|
68
|
+
parents: Optional[list["ModelType"]] = None,
|
|
69
|
+
discriminated_subtypes: Optional[dict[str, "ModelType"]] = None,
|
|
70
70
|
) -> None:
|
|
71
71
|
super().__init__(yaml_data=yaml_data, code_model=code_model)
|
|
72
72
|
self.name: str = self.yaml_data["name"]
|
|
@@ -96,7 +96,7 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
|
|
|
96
96
|
return None
|
|
97
97
|
|
|
98
98
|
@property
|
|
99
|
-
def flattened_items(self) ->
|
|
99
|
+
def flattened_items(self) -> list[str]:
|
|
100
100
|
return [
|
|
101
101
|
item.client_name
|
|
102
102
|
for prop in self.properties
|
|
@@ -141,7 +141,7 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
|
|
|
141
141
|
return super().xml_serialization_ctxt
|
|
142
142
|
|
|
143
143
|
@property
|
|
144
|
-
def discriminated_subtypes_name_mapping(self) ->
|
|
144
|
+
def discriminated_subtypes_name_mapping(self) -> dict[str, str]:
|
|
145
145
|
return {k: v.name for k, v in self.discriminated_subtypes.items()}
|
|
146
146
|
|
|
147
147
|
def get_json_template_representation(
|
|
@@ -181,7 +181,7 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
|
|
|
181
181
|
)
|
|
182
182
|
)
|
|
183
183
|
|
|
184
|
-
def get_polymorphic_subtypes(self, polymorphic_subtypes:
|
|
184
|
+
def get_polymorphic_subtypes(self, polymorphic_subtypes: list["ModelType"]) -> None:
|
|
185
185
|
is_polymorphic_subtype = self.discriminator_value and not self.discriminated_subtypes
|
|
186
186
|
if self._got_polymorphic_subtypes:
|
|
187
187
|
return
|
|
@@ -195,13 +195,13 @@ class ModelType(BaseType): # pylint: disable=too-many-instance-attributes, too-
|
|
|
195
195
|
self._got_polymorphic_subtypes = False
|
|
196
196
|
|
|
197
197
|
@classmethod
|
|
198
|
-
def from_yaml(cls, yaml_data:
|
|
198
|
+
def from_yaml(cls, yaml_data: dict[str, Any], code_model: "CodeModel") -> "ModelType":
|
|
199
199
|
raise ValueError(
|
|
200
200
|
"You shouldn't call from_yaml for ModelType to avoid recursion. "
|
|
201
201
|
"Please initial a blank ModelType, then call .fill_instance_from_yaml on the created type."
|
|
202
202
|
)
|
|
203
203
|
|
|
204
|
-
def fill_instance_from_yaml(self, yaml_data:
|
|
204
|
+
def fill_instance_from_yaml(self, yaml_data: dict[str, Any], code_model: "CodeModel") -> None:
|
|
205
205
|
from . import build_type
|
|
206
206
|
|
|
207
207
|
self.parents = [cast(ModelType, build_type(bm, code_model)) for bm in yaml_data.get("parents", [])]
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
6
|
from typing import (
|
|
7
|
-
Dict,
|
|
8
|
-
List,
|
|
9
7
|
Any,
|
|
10
8
|
Optional,
|
|
11
9
|
Union,
|
|
@@ -61,14 +59,14 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
61
59
|
):
|
|
62
60
|
def __init__(
|
|
63
61
|
self,
|
|
64
|
-
yaml_data:
|
|
62
|
+
yaml_data: dict[str, Any],
|
|
65
63
|
code_model: "CodeModel",
|
|
66
64
|
client: "Client",
|
|
67
65
|
name: str,
|
|
68
66
|
request_builder: Union[RequestBuilder, OverloadedRequestBuilder],
|
|
69
67
|
parameters: ParameterList,
|
|
70
|
-
responses:
|
|
71
|
-
exceptions:
|
|
68
|
+
responses: list[ResponseType],
|
|
69
|
+
exceptions: list[Response],
|
|
72
70
|
*,
|
|
73
71
|
overloads: Optional[Sequence["Operation"]] = None,
|
|
74
72
|
) -> None:
|
|
@@ -204,61 +202,18 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
204
202
|
return None if self.code_model.options["models-mode"] == "dpg" else "'object'"
|
|
205
203
|
|
|
206
204
|
@property
|
|
207
|
-
def non_default_errors(self) ->
|
|
205
|
+
def non_default_errors(self) -> list[Response]:
|
|
208
206
|
return [
|
|
209
207
|
e for e in self.exceptions if "default" not in e.status_codes and e.type and isinstance(e.type, ModelType)
|
|
210
208
|
]
|
|
211
209
|
|
|
212
|
-
def _imports_shared(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
213
|
-
file_import = FileImport(self.code_model)
|
|
214
|
-
file_import.add_submodule_import("typing", "Any", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
215
|
-
|
|
216
|
-
response_types = [r.type_annotation(async_mode=async_mode, **kwargs) for r in self.responses if r.type]
|
|
217
|
-
if len(set(response_types)) > 1:
|
|
218
|
-
file_import.add_submodule_import("typing", "Union", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
219
|
-
if self.added_on:
|
|
220
|
-
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
221
|
-
file_import.add_submodule_import(
|
|
222
|
-
self.code_model.get_relative_import_path(serialize_namespace, module_name="_validation"),
|
|
223
|
-
"api_version_validation",
|
|
224
|
-
ImportType.LOCAL,
|
|
225
|
-
)
|
|
226
|
-
return file_import
|
|
227
|
-
|
|
228
210
|
@property
|
|
229
211
|
def need_import_iobase(self) -> bool:
|
|
230
212
|
return self.parameters.has_body and isinstance(self.parameters.body_parameter.type, CombinedType)
|
|
231
213
|
|
|
232
|
-
def imports_for_multiapi(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
233
|
-
if self.abstract:
|
|
234
|
-
return FileImport(self.code_model)
|
|
235
|
-
file_import = self._imports_shared(async_mode, **kwargs)
|
|
236
|
-
for param in self.parameters.method:
|
|
237
|
-
file_import.merge(
|
|
238
|
-
param.imports_for_multiapi(
|
|
239
|
-
async_mode,
|
|
240
|
-
need_import_iobase=self.need_import_iobase,
|
|
241
|
-
**kwargs,
|
|
242
|
-
)
|
|
243
|
-
)
|
|
244
|
-
for response in self.responses:
|
|
245
|
-
file_import.merge(
|
|
246
|
-
response.imports_for_multiapi(
|
|
247
|
-
async_mode=async_mode, need_import_iobase=self.need_import_iobase, **kwargs
|
|
248
|
-
)
|
|
249
|
-
)
|
|
250
|
-
if self.code_model.options["models-mode"]:
|
|
251
|
-
for exception in self.exceptions:
|
|
252
|
-
file_import.merge(
|
|
253
|
-
exception.imports_for_multiapi(
|
|
254
|
-
async_mode=async_mode, need_import_iobase=self.need_import_iobase, **kwargs
|
|
255
|
-
)
|
|
256
|
-
)
|
|
257
|
-
return file_import
|
|
258
|
-
|
|
259
214
|
@staticmethod
|
|
260
215
|
def has_kwargs_to_pop_with_default(
|
|
261
|
-
kwargs_to_pop:
|
|
216
|
+
kwargs_to_pop: list[
|
|
262
217
|
Union[
|
|
263
218
|
Parameter,
|
|
264
219
|
RequestBuilderParameter,
|
|
@@ -326,7 +281,19 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
326
281
|
return FileImport(self.code_model)
|
|
327
282
|
|
|
328
283
|
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
329
|
-
file_import = self.
|
|
284
|
+
file_import = FileImport(self.code_model)
|
|
285
|
+
file_import.add_submodule_import("typing", "Any", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
286
|
+
|
|
287
|
+
response_types = [r.type_annotation(async_mode=async_mode, **kwargs) for r in self.responses if r.type]
|
|
288
|
+
if len(set(response_types)) > 1:
|
|
289
|
+
file_import.add_submodule_import("typing", "Union", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
290
|
+
if self.added_on:
|
|
291
|
+
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
292
|
+
file_import.add_submodule_import(
|
|
293
|
+
self.code_model.get_relative_import_path(serialize_namespace, module_name="_validation"),
|
|
294
|
+
"api_version_validation",
|
|
295
|
+
ImportType.LOCAL,
|
|
296
|
+
)
|
|
330
297
|
|
|
331
298
|
for param in self.parameters.method:
|
|
332
299
|
file_import.merge(
|
|
@@ -427,7 +394,6 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
427
394
|
file_import.add_submodule_import("rest", "HttpRequest", ImportType.SDKCORE)
|
|
428
395
|
file_import.add_submodule_import("typing", "Callable", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
429
396
|
file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
430
|
-
file_import.add_submodule_import("typing", "Dict", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
431
397
|
file_import.add_submodule_import("typing", "TypeVar", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
432
398
|
if self.code_model.options["tracing"] and self.want_tracing and not async_mode:
|
|
433
399
|
file_import.add_submodule_import(
|
|
@@ -438,6 +404,10 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
438
404
|
file_import.merge(self.get_request_builder_import(self.request_builder, async_mode, serialize_namespace))
|
|
439
405
|
if self.overloads:
|
|
440
406
|
file_import.add_submodule_import("typing", "overload", ImportType.STDLIB)
|
|
407
|
+
if self.name == "list":
|
|
408
|
+
# if there is a function named `list` we have to make sure there's no conflict with the built-in `list`
|
|
409
|
+
# not doing for dict or set yet, though we might have to later
|
|
410
|
+
file_import.define_mypy_type("List", "list")
|
|
441
411
|
if self.code_model.options["models-mode"] == "dpg":
|
|
442
412
|
relative_path = self.code_model.get_relative_import_path(
|
|
443
413
|
serialize_namespace, module_name="_utils.model_base"
|
|
@@ -479,7 +449,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
479
449
|
raise ValueError(f"Incorrect status code {status_code}, operation {self.name}") from exc
|
|
480
450
|
|
|
481
451
|
@property
|
|
482
|
-
def success_status_codes(self) ->
|
|
452
|
+
def success_status_codes(self) -> list[Union[int, str, list[int]]]:
|
|
483
453
|
"""The list of all successfull status code."""
|
|
484
454
|
return sorted([code for response in self.responses for code in response.status_codes])
|
|
485
455
|
|
|
@@ -499,13 +469,13 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
499
469
|
return any(r.is_stream_response for r in self.responses)
|
|
500
470
|
|
|
501
471
|
@classmethod
|
|
502
|
-
def get_request_builder(cls, yaml_data:
|
|
472
|
+
def get_request_builder(cls, yaml_data: dict[str, Any], client: "Client"):
|
|
503
473
|
return client.lookup_request_builder(id(yaml_data))
|
|
504
474
|
|
|
505
475
|
@classmethod
|
|
506
476
|
def from_yaml(
|
|
507
477
|
cls,
|
|
508
|
-
yaml_data:
|
|
478
|
+
yaml_data: dict[str, Any],
|
|
509
479
|
code_model: "CodeModel",
|
|
510
480
|
client: "Client",
|
|
511
481
|
):
|
|
@@ -548,7 +518,7 @@ class Operation(OperationBase[Response]):
|
|
|
548
518
|
return file_import
|
|
549
519
|
|
|
550
520
|
|
|
551
|
-
def get_operation(yaml_data:
|
|
521
|
+
def get_operation(yaml_data: dict[str, Any], code_model: "CodeModel", client: "Client") -> "OperationType":
|
|
552
522
|
if yaml_data["discriminator"] == "lropaging":
|
|
553
523
|
from .lro_paging_operation import LROPagingOperation as OperationCls
|
|
554
524
|
elif yaml_data["discriminator"] == "lro":
|
|
@@ -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
|
|