@azure-tools/typespec-python 0.33.0 → 0.35.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/scripts/eng/lint.d.ts.map +1 -1
- package/dist/scripts/eng/lint.js +18 -1
- package/dist/scripts/eng/lint.js.map +1 -1
- package/dist/src/emitter.d.ts +0 -2
- package/dist/src/emitter.d.ts.map +1 -1
- package/dist/src/emitter.js +2 -102
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/generator/dev_requirements.txt +10 -3
- package/package.json +14 -11
- package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
- package/scripts/eng/lint.ts +17 -1
- package/scripts/eng/pylintrc +2 -1
- package/scripts/install.py +0 -1
- package/dist/src/code-model.d.ts +0 -4
- package/dist/src/code-model.d.ts.map +0 -1
- package/dist/src/code-model.js +0 -190
- package/dist/src/code-model.js.map +0 -1
- package/dist/src/external-process.d.ts +0 -20
- package/dist/src/external-process.d.ts.map +0 -1
- package/dist/src/external-process.js +0 -44
- package/dist/src/external-process.js.map +0 -1
- package/dist/src/http.d.ts +0 -7
- package/dist/src/http.d.ts.map +0 -1
- package/dist/src/http.js +0 -266
- package/dist/src/http.js.map +0 -1
- package/dist/src/types.d.ts +0 -36
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -489
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts +0 -26
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -151
- package/dist/src/utils.js.map +0 -1
- package/generator/LICENSE +0 -21
- package/generator/README.md +0 -1
- package/generator/pygen/__init__.py +0 -107
- package/generator/pygen/_version.py +0 -7
- package/generator/pygen/black.py +0 -69
- package/generator/pygen/codegen/__init__.py +0 -338
- package/generator/pygen/codegen/_utils.py +0 -16
- package/generator/pygen/codegen/models/__init__.py +0 -204
- package/generator/pygen/codegen/models/base.py +0 -186
- package/generator/pygen/codegen/models/base_builder.py +0 -119
- package/generator/pygen/codegen/models/client.py +0 -430
- package/generator/pygen/codegen/models/code_model.py +0 -237
- package/generator/pygen/codegen/models/combined_type.py +0 -149
- package/generator/pygen/codegen/models/constant_type.py +0 -129
- package/generator/pygen/codegen/models/credential_types.py +0 -214
- package/generator/pygen/codegen/models/dictionary_type.py +0 -127
- package/generator/pygen/codegen/models/enum_type.py +0 -238
- package/generator/pygen/codegen/models/imports.py +0 -291
- package/generator/pygen/codegen/models/list_type.py +0 -143
- package/generator/pygen/codegen/models/lro_operation.py +0 -142
- package/generator/pygen/codegen/models/lro_paging_operation.py +0 -32
- package/generator/pygen/codegen/models/model_type.py +0 -362
- package/generator/pygen/codegen/models/operation.py +0 -530
- package/generator/pygen/codegen/models/operation_group.py +0 -184
- package/generator/pygen/codegen/models/paging_operation.py +0 -155
- package/generator/pygen/codegen/models/parameter.py +0 -412
- package/generator/pygen/codegen/models/parameter_list.py +0 -387
- package/generator/pygen/codegen/models/primitive_types.py +0 -659
- package/generator/pygen/codegen/models/property.py +0 -171
- package/generator/pygen/codegen/models/request_builder.py +0 -189
- package/generator/pygen/codegen/models/request_builder_parameter.py +0 -115
- package/generator/pygen/codegen/models/response.py +0 -348
- package/generator/pygen/codegen/models/utils.py +0 -23
- package/generator/pygen/codegen/serializers/__init__.py +0 -574
- package/generator/pygen/codegen/serializers/base_serializer.py +0 -21
- package/generator/pygen/codegen/serializers/builder_serializer.py +0 -1513
- package/generator/pygen/codegen/serializers/client_serializer.py +0 -295
- package/generator/pygen/codegen/serializers/enum_serializer.py +0 -15
- package/generator/pygen/codegen/serializers/general_serializer.py +0 -213
- package/generator/pygen/codegen/serializers/import_serializer.py +0 -127
- package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -198
- package/generator/pygen/codegen/serializers/model_init_serializer.py +0 -33
- package/generator/pygen/codegen/serializers/model_serializer.py +0 -300
- package/generator/pygen/codegen/serializers/operation_groups_serializer.py +0 -89
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +0 -44
- package/generator/pygen/codegen/serializers/parameter_serializer.py +0 -221
- package/generator/pygen/codegen/serializers/patch_serializer.py +0 -19
- package/generator/pygen/codegen/serializers/request_builders_serializer.py +0 -52
- package/generator/pygen/codegen/serializers/sample_serializer.py +0 -168
- package/generator/pygen/codegen/serializers/test_serializer.py +0 -293
- package/generator/pygen/codegen/serializers/types_serializer.py +0 -31
- package/generator/pygen/codegen/serializers/utils.py +0 -68
- package/generator/pygen/codegen/templates/client.py.jinja2 +0 -37
- package/generator/pygen/codegen/templates/client_container.py.jinja2 +0 -12
- package/generator/pygen/codegen/templates/config.py.jinja2 +0 -73
- package/generator/pygen/codegen/templates/config_container.py.jinja2 +0 -16
- package/generator/pygen/codegen/templates/conftest.py.jinja2 +0 -28
- package/generator/pygen/codegen/templates/enum.py.jinja2 +0 -13
- package/generator/pygen/codegen/templates/enum_container.py.jinja2 +0 -10
- package/generator/pygen/codegen/templates/init.py.jinja2 +0 -24
- package/generator/pygen/codegen/templates/keywords.jinja2 +0 -19
- package/generator/pygen/codegen/templates/lro_operation.py.jinja2 +0 -16
- package/generator/pygen/codegen/templates/lro_paging_operation.py.jinja2 +0 -18
- package/generator/pygen/codegen/templates/macros.jinja2 +0 -12
- package/generator/pygen/codegen/templates/metadata.json.jinja2 +0 -167
- package/generator/pygen/codegen/templates/model_base.py.jinja2 +0 -1158
- package/generator/pygen/codegen/templates/model_container.py.jinja2 +0 -13
- package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +0 -98
- package/generator/pygen/codegen/templates/model_init.py.jinja2 +0 -28
- package/generator/pygen/codegen/templates/model_msrest.py.jinja2 +0 -92
- package/generator/pygen/codegen/templates/operation.py.jinja2 +0 -21
- package/generator/pygen/codegen/templates/operation_group.py.jinja2 +0 -75
- package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +0 -20
- package/generator/pygen/codegen/templates/operation_tools.jinja2 +0 -81
- package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +0 -17
- package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +0 -6
- package/generator/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +0 -21
- package/generator/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +0 -8
- package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +0 -107
- package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +0 -9
- package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +0 -108
- package/generator/pygen/codegen/templates/paging_operation.py.jinja2 +0 -21
- package/generator/pygen/codegen/templates/patch.py.jinja2 +0 -19
- package/generator/pygen/codegen/templates/pkgutil_init.py.jinja2 +0 -1
- package/generator/pygen/codegen/templates/request_builder.py.jinja2 +0 -28
- package/generator/pygen/codegen/templates/request_builders.py.jinja2 +0 -10
- package/generator/pygen/codegen/templates/rest_init.py.jinja2 +0 -12
- package/generator/pygen/codegen/templates/sample.py.jinja2 +0 -44
- package/generator/pygen/codegen/templates/serialization.py.jinja2 +0 -2115
- package/generator/pygen/codegen/templates/test.py.jinja2 +0 -50
- package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +0 -26
- package/generator/pygen/codegen/templates/types.py.jinja2 +0 -8
- package/generator/pygen/codegen/templates/validation.py.jinja2 +0 -38
- package/generator/pygen/codegen/templates/vendor.py.jinja2 +0 -96
- package/generator/pygen/codegen/templates/version.py.jinja2 +0 -4
- package/generator/pygen/m2r.py +0 -65
- package/generator/pygen/postprocess/__init__.py +0 -183
- package/generator/pygen/postprocess/get_all.py +0 -19
- package/generator/pygen/postprocess/venvtools.py +0 -75
- package/generator/pygen/preprocess/__init__.py +0 -509
- package/generator/pygen/preprocess/helpers.py +0 -27
- package/generator/pygen/preprocess/python_mappings.py +0 -224
- package/generator/pygen/utils.py +0 -160
- package/generator/pygen.egg-info/PKG-INFO +0 -25
- package/generator/pygen.egg-info/SOURCES.txt +0 -66
- package/generator/pygen.egg-info/dependency_links.txt +0 -1
- package/generator/pygen.egg-info/requires.txt +0 -4
- package/generator/pygen.egg-info/top_level.txt +0 -1
- package/generator/setup.py +0 -55
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
# -------------------------------------------------------------------------
|
|
2
|
-
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
|
-
# license information.
|
|
5
|
-
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import Dict, List, Any, TYPE_CHECKING
|
|
7
|
-
|
|
8
|
-
from .utils import OrderedSet
|
|
9
|
-
|
|
10
|
-
from .base import BaseModel
|
|
11
|
-
from .operation import get_operation
|
|
12
|
-
from .imports import FileImport, ImportType, TypingSection
|
|
13
|
-
from .utils import add_to_pylint_disable, NAME_LENGTH_LIMIT
|
|
14
|
-
from .lro_operation import LROOperation
|
|
15
|
-
from .lro_paging_operation import LROPagingOperation
|
|
16
|
-
|
|
17
|
-
if TYPE_CHECKING:
|
|
18
|
-
from .code_model import CodeModel
|
|
19
|
-
from .client import Client
|
|
20
|
-
from . import OperationType
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class OperationGroup(BaseModel):
|
|
24
|
-
"""Represent an operation group."""
|
|
25
|
-
|
|
26
|
-
def __init__(
|
|
27
|
-
self,
|
|
28
|
-
yaml_data: Dict[str, Any],
|
|
29
|
-
code_model: "CodeModel",
|
|
30
|
-
client: "Client",
|
|
31
|
-
operations: List["OperationType"],
|
|
32
|
-
api_versions: List[str],
|
|
33
|
-
) -> None:
|
|
34
|
-
super().__init__(yaml_data, code_model)
|
|
35
|
-
self.client = client
|
|
36
|
-
self.class_name: str = yaml_data["className"]
|
|
37
|
-
self.identify_name: str = yaml_data["identifyName"]
|
|
38
|
-
self.property_name: str = yaml_data["propertyName"]
|
|
39
|
-
self.operations = operations
|
|
40
|
-
self.api_versions = api_versions
|
|
41
|
-
self.operation_groups: List[OperationGroup] = []
|
|
42
|
-
if self.code_model.options["show_operations"]:
|
|
43
|
-
self.operation_groups = [
|
|
44
|
-
OperationGroup.from_yaml(op_group, code_model, client)
|
|
45
|
-
for op_group in self.yaml_data.get("operationGroups", [])
|
|
46
|
-
]
|
|
47
|
-
self.link_lro_initial_operations()
|
|
48
|
-
|
|
49
|
-
@property
|
|
50
|
-
def has_abstract_operations(self) -> bool:
|
|
51
|
-
return any(o for o in self.operations if o.abstract) or any(
|
|
52
|
-
operation_group.has_abstract_operations for operation_group in self.operation_groups
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
@property
|
|
56
|
-
def has_non_abstract_operations(self) -> bool:
|
|
57
|
-
return any(o for o in self.operations if not o.abstract) or any(
|
|
58
|
-
operation_group.has_non_abstract_operations for operation_group in self.operation_groups
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
@property
|
|
62
|
-
def base_class(self) -> str:
|
|
63
|
-
base_classes: List[str] = []
|
|
64
|
-
if self.is_mixin:
|
|
65
|
-
base_classes.append(f"{self.client.name}MixinABC")
|
|
66
|
-
return ", ".join(base_classes)
|
|
67
|
-
|
|
68
|
-
def imports_for_multiapi(self, async_mode: bool) -> FileImport:
|
|
69
|
-
file_import = FileImport(self.code_model)
|
|
70
|
-
relative_path = ".." if async_mode else "."
|
|
71
|
-
for operation in self.operations:
|
|
72
|
-
file_import.merge(operation.imports_for_multiapi(async_mode, relative_path=relative_path))
|
|
73
|
-
if (self.code_model.model_types or self.code_model.enums) and self.code_model.options[
|
|
74
|
-
"models_mode"
|
|
75
|
-
] == "msrest":
|
|
76
|
-
file_import.add_submodule_import(relative_path, "models", ImportType.LOCAL, alias="_models")
|
|
77
|
-
return file_import
|
|
78
|
-
|
|
79
|
-
@property
|
|
80
|
-
def pylint_disable(self) -> str:
|
|
81
|
-
retval: str = ""
|
|
82
|
-
if self.has_abstract_operations:
|
|
83
|
-
retval = add_to_pylint_disable(retval, "abstract-class-instantiated")
|
|
84
|
-
if len(self.operations) > 20:
|
|
85
|
-
retval = add_to_pylint_disable(retval, "too-many-public-methods")
|
|
86
|
-
if len(self.class_name) > NAME_LENGTH_LIMIT:
|
|
87
|
-
retval = add_to_pylint_disable(retval, "name-too-long")
|
|
88
|
-
if len(self.operation_groups) > 6:
|
|
89
|
-
retval = add_to_pylint_disable(retval, "too-many-instance-attributes")
|
|
90
|
-
return retval
|
|
91
|
-
|
|
92
|
-
@property
|
|
93
|
-
def need_validation(self) -> bool:
|
|
94
|
-
"""Whether any of its operations need validation"""
|
|
95
|
-
return any(o for o in self.operations if o.need_validation)
|
|
96
|
-
|
|
97
|
-
def imports(self, async_mode: bool) -> FileImport:
|
|
98
|
-
file_import = FileImport(self.code_model)
|
|
99
|
-
|
|
100
|
-
relative_path = ("..." if async_mode else "..") + ("." if self.client.is_subclient else "")
|
|
101
|
-
for operation in self.operations:
|
|
102
|
-
file_import.merge(operation.imports(async_mode, relative_path=relative_path))
|
|
103
|
-
if not self.code_model.options["combine_operation_files"]:
|
|
104
|
-
for og in self.operation_groups:
|
|
105
|
-
file_import.add_submodule_import(
|
|
106
|
-
".",
|
|
107
|
-
og.class_name,
|
|
108
|
-
ImportType.LOCAL,
|
|
109
|
-
)
|
|
110
|
-
# for multiapi
|
|
111
|
-
if (
|
|
112
|
-
(self.code_model.public_model_types)
|
|
113
|
-
and self.code_model.options["models_mode"] == "msrest"
|
|
114
|
-
and not self.is_mixin
|
|
115
|
-
):
|
|
116
|
-
file_import.add_submodule_import(relative_path, "models", ImportType.LOCAL, alias="_models")
|
|
117
|
-
if self.is_mixin:
|
|
118
|
-
file_import.add_submodule_import(".._vendor", f"{self.client.name}MixinABC", ImportType.LOCAL)
|
|
119
|
-
if self.has_abstract_operations:
|
|
120
|
-
file_import.add_submodule_import(".._vendor", "raise_if_not_implemented", ImportType.LOCAL)
|
|
121
|
-
if all(o.abstract for o in self.operations):
|
|
122
|
-
return file_import
|
|
123
|
-
file_import.add_submodule_import("typing", "TypeVar", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
124
|
-
file_import.define_mypy_type("T", "TypeVar('T')")
|
|
125
|
-
type_value = "Optional[Callable[[PipelineResponse[HttpRequest, {}HttpResponse], T, Dict[str, Any]], Any]]"
|
|
126
|
-
file_import.define_mypy_type("ClsType", type_value.format(""), type_value.format("Async"))
|
|
127
|
-
return file_import
|
|
128
|
-
|
|
129
|
-
@property
|
|
130
|
-
def filename(self) -> str:
|
|
131
|
-
return self.operations[0].filename
|
|
132
|
-
|
|
133
|
-
@property
|
|
134
|
-
def is_mixin(self) -> bool:
|
|
135
|
-
"""The operation group with no name is the direct client methods."""
|
|
136
|
-
return self.identify_name == ""
|
|
137
|
-
|
|
138
|
-
def link_lro_initial_operations(self) -> None:
|
|
139
|
-
"""Link each LRO operation to its initial operation"""
|
|
140
|
-
for operation_group in self.operation_groups:
|
|
141
|
-
for operation in operation_group.operations:
|
|
142
|
-
if isinstance(operation, (LROOperation, LROPagingOperation)):
|
|
143
|
-
operation.initial_operation = self.lookup_operation(id(operation.yaml_data["initialOperation"]))
|
|
144
|
-
|
|
145
|
-
def lookup_operation(self, operation_id: int) -> "OperationType":
|
|
146
|
-
try:
|
|
147
|
-
return next(o for og in self.operation_groups for o in og.operations if id(o.yaml_data) == operation_id)
|
|
148
|
-
except StopIteration as exc:
|
|
149
|
-
raise KeyError(f"No operation with id {operation_id} found.") from exc
|
|
150
|
-
|
|
151
|
-
@property
|
|
152
|
-
def lro_operations(self) -> List["OperationType"]:
|
|
153
|
-
return [operation for operation in self.operations if operation.operation_type in ("lro", "lropaging")] + [
|
|
154
|
-
operation for operation_group in self.operation_groups for operation in operation_group.lro_operations
|
|
155
|
-
]
|
|
156
|
-
|
|
157
|
-
@property
|
|
158
|
-
def has_operations(self) -> bool:
|
|
159
|
-
return any(operation_group.has_operations for operation_group in self.operation_groups) or bool(self.operations)
|
|
160
|
-
|
|
161
|
-
@property
|
|
162
|
-
def has_form_data_body(self) -> bool:
|
|
163
|
-
operations = self.operations + [o for og in self.operation_groups for o in og.operations]
|
|
164
|
-
return any(operation.has_form_data_body for operation in operations)
|
|
165
|
-
|
|
166
|
-
@classmethod
|
|
167
|
-
def from_yaml(
|
|
168
|
-
cls,
|
|
169
|
-
yaml_data: Dict[str, Any],
|
|
170
|
-
code_model: "CodeModel",
|
|
171
|
-
client: "Client",
|
|
172
|
-
) -> "OperationGroup":
|
|
173
|
-
operations = [get_operation(o, code_model, client) for o in yaml_data["operations"]]
|
|
174
|
-
api_versions: OrderedSet[str] = {}
|
|
175
|
-
for operation in operations:
|
|
176
|
-
for api_version in operation.api_versions:
|
|
177
|
-
api_versions[api_version] = None
|
|
178
|
-
return cls(
|
|
179
|
-
yaml_data=yaml_data,
|
|
180
|
-
code_model=code_model,
|
|
181
|
-
client=client,
|
|
182
|
-
operations=operations,
|
|
183
|
-
api_versions=list(api_versions.keys()),
|
|
184
|
-
)
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
# -------------------------------------------------------------------------
|
|
2
|
-
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
|
-
# license information.
|
|
5
|
-
# --------------------------------------------------------------------------
|
|
6
|
-
from typing import Dict, List, Any, Optional, Union, TYPE_CHECKING, cast, TypeVar
|
|
7
|
-
|
|
8
|
-
from .operation import Operation, OperationBase
|
|
9
|
-
from .response import PagingResponse, LROPagingResponse, Response
|
|
10
|
-
from .request_builder import (
|
|
11
|
-
OverloadedRequestBuilder,
|
|
12
|
-
RequestBuilder,
|
|
13
|
-
get_request_builder,
|
|
14
|
-
)
|
|
15
|
-
from .imports import ImportType, FileImport, TypingSection
|
|
16
|
-
from .parameter_list import ParameterList
|
|
17
|
-
from .model_type import ModelType
|
|
18
|
-
from .list_type import ListType
|
|
19
|
-
|
|
20
|
-
if TYPE_CHECKING:
|
|
21
|
-
from .code_model import CodeModel
|
|
22
|
-
from .client import Client
|
|
23
|
-
|
|
24
|
-
PagingResponseType = TypeVar("PagingResponseType", bound=Union[PagingResponse, LROPagingResponse])
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
28
|
-
def __init__(
|
|
29
|
-
self,
|
|
30
|
-
yaml_data: Dict[str, Any],
|
|
31
|
-
code_model: "CodeModel",
|
|
32
|
-
client: "Client",
|
|
33
|
-
name: str,
|
|
34
|
-
request_builder: RequestBuilder,
|
|
35
|
-
parameters: ParameterList,
|
|
36
|
-
responses: List[PagingResponseType],
|
|
37
|
-
exceptions: List[Response],
|
|
38
|
-
*,
|
|
39
|
-
overloads: Optional[List[Operation]] = None,
|
|
40
|
-
override_success_response_to_200: bool = False,
|
|
41
|
-
) -> None:
|
|
42
|
-
super().__init__(
|
|
43
|
-
code_model=code_model,
|
|
44
|
-
client=client,
|
|
45
|
-
yaml_data=yaml_data,
|
|
46
|
-
name=name,
|
|
47
|
-
request_builder=request_builder,
|
|
48
|
-
parameters=parameters,
|
|
49
|
-
responses=responses,
|
|
50
|
-
exceptions=exceptions,
|
|
51
|
-
overloads=overloads,
|
|
52
|
-
)
|
|
53
|
-
self.next_request_builder: Optional[Union[RequestBuilder, OverloadedRequestBuilder]] = (
|
|
54
|
-
get_request_builder(self.yaml_data["nextOperation"], code_model, client)
|
|
55
|
-
if self.yaml_data.get("nextOperation")
|
|
56
|
-
else None
|
|
57
|
-
)
|
|
58
|
-
self.override_success_response_to_200 = override_success_response_to_200
|
|
59
|
-
self.pager_sync: str = yaml_data.get("pagerSync") or f"{self.code_model.core_library}.paging.ItemPaged"
|
|
60
|
-
self.pager_async: str = yaml_data.get("pagerAsync") or f"{self.code_model.core_library}.paging.AsyncItemPaged"
|
|
61
|
-
|
|
62
|
-
def _get_attr_name(self, wire_name: str) -> str:
|
|
63
|
-
response_type = self.responses[0].type
|
|
64
|
-
if not response_type:
|
|
65
|
-
raise ValueError(f"Can't find a matching property in response for {wire_name}")
|
|
66
|
-
if response_type.type == "list":
|
|
67
|
-
response_type = cast(ListType, response_type).element_type
|
|
68
|
-
try:
|
|
69
|
-
return next(p.client_name for p in cast(ModelType, response_type).properties if p.wire_name == wire_name)
|
|
70
|
-
except StopIteration as exc:
|
|
71
|
-
raise ValueError(f"Can't find a matching property in response for {wire_name}") from exc
|
|
72
|
-
|
|
73
|
-
def get_pager(self, async_mode: bool) -> str:
|
|
74
|
-
return self.responses[0].get_pager(async_mode)
|
|
75
|
-
|
|
76
|
-
@property
|
|
77
|
-
def continuation_token_name(self) -> Optional[str]:
|
|
78
|
-
wire_name = self.yaml_data.get("continuationTokenName")
|
|
79
|
-
if not wire_name:
|
|
80
|
-
# That's an ok scenario, it just means no next page possible
|
|
81
|
-
return None
|
|
82
|
-
if self.code_model.options["models_mode"] == "msrest":
|
|
83
|
-
return self._get_attr_name(wire_name)
|
|
84
|
-
return wire_name
|
|
85
|
-
|
|
86
|
-
@property
|
|
87
|
-
def item_name(self) -> str:
|
|
88
|
-
wire_name = self.yaml_data["itemName"]
|
|
89
|
-
if self.code_model.options["models_mode"] == "msrest":
|
|
90
|
-
# we don't use the paging model for dpg
|
|
91
|
-
return self._get_attr_name(wire_name)
|
|
92
|
-
return wire_name
|
|
93
|
-
|
|
94
|
-
@property
|
|
95
|
-
def item_type(self) -> ModelType:
|
|
96
|
-
try:
|
|
97
|
-
item_type_yaml = self.yaml_data["itemType"]
|
|
98
|
-
except KeyError as e:
|
|
99
|
-
raise ValueError("Only call this for DPG paging model deserialization") from e
|
|
100
|
-
return cast(ModelType, self.code_model.types_map[id(item_type_yaml)])
|
|
101
|
-
|
|
102
|
-
@property
|
|
103
|
-
def operation_type(self) -> str:
|
|
104
|
-
return "paging"
|
|
105
|
-
|
|
106
|
-
def cls_type_annotation(self, *, async_mode: bool) -> str:
|
|
107
|
-
return f"ClsType[{Response.type_annotation(self.responses[0], async_mode=async_mode)}]"
|
|
108
|
-
|
|
109
|
-
def _imports_shared(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
110
|
-
file_import = super()._imports_shared(async_mode, **kwargs)
|
|
111
|
-
if async_mode:
|
|
112
|
-
file_import.add_submodule_import("typing", "AsyncIterable", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
113
|
-
else:
|
|
114
|
-
file_import.add_submodule_import("typing", "Iterable", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
115
|
-
if (
|
|
116
|
-
self.next_request_builder
|
|
117
|
-
and self.code_model.options["builders_visibility"] == "embedded"
|
|
118
|
-
and not async_mode
|
|
119
|
-
):
|
|
120
|
-
file_import.merge(self.next_request_builder.imports())
|
|
121
|
-
return file_import
|
|
122
|
-
|
|
123
|
-
@property
|
|
124
|
-
def has_optional_return_type(self) -> bool:
|
|
125
|
-
return False
|
|
126
|
-
|
|
127
|
-
def imports(self, async_mode: bool, **kwargs: Any) -> FileImport:
|
|
128
|
-
if self.abstract:
|
|
129
|
-
return FileImport(self.code_model)
|
|
130
|
-
file_import = self._imports_shared(async_mode, **kwargs)
|
|
131
|
-
file_import.merge(super().imports(async_mode, **kwargs))
|
|
132
|
-
if self.code_model.options["tracing"] and self.want_tracing:
|
|
133
|
-
file_import.add_submodule_import(
|
|
134
|
-
"azure.core.tracing.decorator",
|
|
135
|
-
"distributed_trace",
|
|
136
|
-
ImportType.SDKCORE,
|
|
137
|
-
)
|
|
138
|
-
if self.next_request_builder:
|
|
139
|
-
file_import.merge(self.get_request_builder_import(self.next_request_builder, async_mode))
|
|
140
|
-
elif any(p.is_api_version for p in self.client.parameters):
|
|
141
|
-
file_import.add_import("urllib.parse", ImportType.STDLIB)
|
|
142
|
-
file_import.add_submodule_import(
|
|
143
|
-
"utils",
|
|
144
|
-
"case_insensitive_dict",
|
|
145
|
-
ImportType.SDKCORE,
|
|
146
|
-
)
|
|
147
|
-
if self.code_model.options["models_mode"] == "dpg":
|
|
148
|
-
relative_path = "..." if async_mode else ".."
|
|
149
|
-
file_import.merge(self.item_type.imports(**kwargs))
|
|
150
|
-
if self.default_error_deserialization or any(r.type for r in self.responses):
|
|
151
|
-
file_import.add_submodule_import(f"{relative_path}_model_base", "_deserialize", ImportType.LOCAL)
|
|
152
|
-
return file_import
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
class PagingOperation(PagingOperationBase[PagingResponse]): ...
|