@typespec/http-client-python 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/emitter/emitter.d.ts.map +1 -1
- package/dist/emitter/emitter.js +85 -24
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/lib.d.ts +1 -0
- package/dist/emitter/lib.d.ts.map +1 -1
- package/dist/emitter/lib.js +1 -0
- package/dist/emitter/lib.js.map +1 -1
- package/dist/emitter/run-python3.d.ts +2 -0
- package/dist/emitter/run-python3.d.ts.map +1 -0
- package/dist/emitter/run-python3.js +19 -0
- package/dist/emitter/run-python3.js.map +1 -0
- package/dist/emitter/system-requirements.d.ts +17 -0
- package/dist/emitter/system-requirements.d.ts.map +1 -0
- package/dist/emitter/system-requirements.js +167 -0
- package/dist/emitter/system-requirements.js.map +1 -0
- package/emitter/src/emitter.ts +88 -23
- package/emitter/src/lib.ts +2 -0
- package/emitter/src/run-python3.ts +20 -0
- package/emitter/src/system-requirements.ts +261 -0
- package/emitter/temp/tsconfig.tsbuildinfo +1 -1
- package/eng/scripts/ci/regenerate.ts +16 -4
- package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
- package/eng/scripts/setup/build.ts +16 -0
- package/eng/scripts/setup/build_pygen_wheel.py +40 -0
- package/eng/scripts/setup/install.py +9 -3
- package/eng/scripts/setup/install.ts +32 -0
- package/eng/scripts/setup/prepare.py +3 -1
- package/eng/scripts/setup/prepare.ts +11 -0
- package/eng/scripts/setup/run-python3.ts +1 -6
- package/generator/build/lib/pygen/__init__.py +107 -0
- package/generator/build/lib/pygen/_version.py +7 -0
- package/generator/build/lib/pygen/black.py +71 -0
- package/generator/build/lib/pygen/codegen/__init__.py +357 -0
- package/generator/build/lib/pygen/codegen/_utils.py +17 -0
- package/generator/build/lib/pygen/codegen/models/__init__.py +204 -0
- package/generator/build/lib/pygen/codegen/models/base.py +186 -0
- package/generator/build/lib/pygen/codegen/models/base_builder.py +118 -0
- package/generator/build/lib/pygen/codegen/models/client.py +435 -0
- package/generator/build/lib/pygen/codegen/models/code_model.py +237 -0
- package/generator/build/lib/pygen/codegen/models/combined_type.py +149 -0
- package/generator/build/lib/pygen/codegen/models/constant_type.py +129 -0
- package/generator/build/lib/pygen/codegen/models/credential_types.py +214 -0
- package/generator/build/lib/pygen/codegen/models/dictionary_type.py +127 -0
- package/generator/build/lib/pygen/codegen/models/enum_type.py +238 -0
- package/generator/build/lib/pygen/codegen/models/imports.py +291 -0
- package/generator/build/lib/pygen/codegen/models/list_type.py +143 -0
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +142 -0
- package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +32 -0
- package/generator/build/lib/pygen/codegen/models/model_type.py +357 -0
- package/generator/build/lib/pygen/codegen/models/operation.py +509 -0
- package/generator/build/lib/pygen/codegen/models/operation_group.py +184 -0
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +155 -0
- package/generator/build/lib/pygen/codegen/models/parameter.py +412 -0
- package/generator/build/lib/pygen/codegen/models/parameter_list.py +387 -0
- package/generator/build/lib/pygen/codegen/models/primitive_types.py +659 -0
- package/generator/build/lib/pygen/codegen/models/property.py +170 -0
- package/generator/build/lib/pygen/codegen/models/request_builder.py +189 -0
- package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +115 -0
- package/generator/build/lib/pygen/codegen/models/response.py +348 -0
- package/generator/build/lib/pygen/codegen/models/utils.py +21 -0
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +574 -0
- package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +21 -0
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +1533 -0
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +294 -0
- package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +15 -0
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +213 -0
- package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +126 -0
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +198 -0
- package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +33 -0
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +335 -0
- package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +89 -0
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +44 -0
- package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +221 -0
- package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +19 -0
- package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +52 -0
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +168 -0
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +292 -0
- package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +31 -0
- package/generator/build/lib/pygen/codegen/serializers/utils.py +68 -0
- package/generator/build/lib/pygen/codegen/templates/client.py.jinja2 +37 -0
- package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +12 -0
- package/generator/build/lib/pygen/codegen/templates/config.py.jinja2 +73 -0
- package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +16 -0
- package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +28 -0
- package/generator/build/lib/pygen/codegen/templates/enum.py.jinja2 +13 -0
- package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +10 -0
- package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +24 -0
- package/generator/build/lib/pygen/codegen/templates/keywords.jinja2 +27 -0
- package/generator/build/lib/pygen/codegen/templates/lro_operation.py.jinja2 +16 -0
- package/generator/build/lib/pygen/codegen/templates/lro_paging_operation.py.jinja2 +18 -0
- package/generator/build/lib/pygen/codegen/templates/macros.jinja2 +12 -0
- package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +167 -0
- package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +1174 -0
- package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +15 -0
- package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +97 -0
- package/generator/build/lib/pygen/codegen/templates/model_init.py.jinja2 +33 -0
- package/generator/build/lib/pygen/codegen/templates/model_msrest.py.jinja2 +92 -0
- package/generator/build/lib/pygen/codegen/templates/operation.py.jinja2 +21 -0
- package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +75 -0
- package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +19 -0
- package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +81 -0
- package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +17 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +6 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +21 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +8 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +107 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +9 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +108 -0
- package/generator/build/lib/pygen/codegen/templates/paging_operation.py.jinja2 +21 -0
- package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +19 -0
- package/generator/build/lib/pygen/codegen/templates/pkgutil_init.py.jinja2 +1 -0
- package/generator/build/lib/pygen/codegen/templates/request_builder.py.jinja2 +28 -0
- package/generator/build/lib/pygen/codegen/templates/request_builders.py.jinja2 +10 -0
- package/generator/build/lib/pygen/codegen/templates/rest_init.py.jinja2 +12 -0
- package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +44 -0
- package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +2117 -0
- package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +50 -0
- package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +26 -0
- package/generator/build/lib/pygen/codegen/templates/types.py.jinja2 +7 -0
- package/generator/build/lib/pygen/codegen/templates/validation.py.jinja2 +38 -0
- package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +96 -0
- package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +4 -0
- package/generator/build/lib/pygen/m2r.py +65 -0
- package/generator/build/lib/pygen/preprocess/__init__.py +515 -0
- package/generator/build/lib/pygen/preprocess/helpers.py +27 -0
- package/generator/build/lib/pygen/preprocess/python_mappings.py +226 -0
- package/generator/build/lib/pygen/utils.py +163 -0
- package/generator/component-detection-pip-report.json +134 -0
- package/generator/dev_requirements.txt +0 -1
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen.egg-info/PKG-INFO +7 -4
- package/generator/pygen.egg-info/requires.txt +7 -4
- package/generator/requirements.txt +5 -10
- package/generator/setup.py +7 -4
- package/generator/test/azure/requirements.txt +1 -1
- package/generator/test/unbranded/requirements.txt +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,387 @@
|
|
|
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
|
+
import logging
|
|
7
|
+
from typing import (
|
|
8
|
+
Any,
|
|
9
|
+
Callable,
|
|
10
|
+
Dict,
|
|
11
|
+
List,
|
|
12
|
+
Optional,
|
|
13
|
+
TYPE_CHECKING,
|
|
14
|
+
Union,
|
|
15
|
+
Generic,
|
|
16
|
+
TypeVar,
|
|
17
|
+
cast,
|
|
18
|
+
)
|
|
19
|
+
from abc import abstractmethod
|
|
20
|
+
from collections.abc import MutableSequence
|
|
21
|
+
from enum import Enum
|
|
22
|
+
|
|
23
|
+
from .request_builder_parameter import (
|
|
24
|
+
RequestBuilderBodyParameter,
|
|
25
|
+
RequestBuilderParameter,
|
|
26
|
+
)
|
|
27
|
+
from .parameter import (
|
|
28
|
+
ParameterLocation,
|
|
29
|
+
BodyParameter,
|
|
30
|
+
Parameter,
|
|
31
|
+
ParameterMethodLocation,
|
|
32
|
+
ClientParameter,
|
|
33
|
+
ConfigParameter,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
ParameterType = TypeVar("ParameterType", bound=Union[Parameter, RequestBuilderParameter])
|
|
37
|
+
BodyParameterType = TypeVar("BodyParameterType", bound=Union[BodyParameter, RequestBuilderBodyParameter])
|
|
38
|
+
|
|
39
|
+
if TYPE_CHECKING:
|
|
40
|
+
from .code_model import CodeModel
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ParameterImplementation(Enum):
|
|
44
|
+
METHOD = "method"
|
|
45
|
+
CLIENT = "client"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
_LOGGER = logging.getLogger(__name__)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def method_signature_helper(positional: List[str], keyword_only: Optional[List[str]], kwarg_params: List[str]):
|
|
52
|
+
keyword_only = keyword_only or []
|
|
53
|
+
return positional + keyword_only + kwarg_params
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _sort(params):
|
|
57
|
+
return sorted(params, key=lambda x: not (x.client_default_value or x.optional), reverse=True)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class _ParameterListBase(
|
|
61
|
+
MutableSequence, Generic[ParameterType, BodyParameterType]
|
|
62
|
+
): # pylint: disable=too-many-public-methods
|
|
63
|
+
"""Base class for all of our different ParameterList classes"""
|
|
64
|
+
|
|
65
|
+
def __init__(
|
|
66
|
+
self,
|
|
67
|
+
yaml_data: Dict[str, Any],
|
|
68
|
+
code_model: "CodeModel",
|
|
69
|
+
parameters: List[ParameterType],
|
|
70
|
+
body_parameter: Optional[BodyParameterType] = None,
|
|
71
|
+
) -> None:
|
|
72
|
+
self.yaml_data = yaml_data
|
|
73
|
+
self.code_model = code_model
|
|
74
|
+
self.parameters = parameters or []
|
|
75
|
+
self._body_parameter = body_parameter
|
|
76
|
+
|
|
77
|
+
# MutableSequence
|
|
78
|
+
|
|
79
|
+
def __getitem__(self, index):
|
|
80
|
+
if isinstance(index, str):
|
|
81
|
+
raise TypeError(f"{index} is invalid type")
|
|
82
|
+
return self.parameters[index]
|
|
83
|
+
|
|
84
|
+
def __len__(self) -> int:
|
|
85
|
+
return len(self.parameters)
|
|
86
|
+
|
|
87
|
+
def __setitem__(self, index, parameter):
|
|
88
|
+
self.parameters[index] = parameter
|
|
89
|
+
|
|
90
|
+
def __delitem__(self, index):
|
|
91
|
+
del self.parameters[index]
|
|
92
|
+
|
|
93
|
+
def insert(self, index: int, value: ParameterType) -> None:
|
|
94
|
+
self.parameters.insert(index, value)
|
|
95
|
+
|
|
96
|
+
# Parameter helpers
|
|
97
|
+
|
|
98
|
+
@staticmethod
|
|
99
|
+
@abstractmethod
|
|
100
|
+
def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], ParameterType]:
|
|
101
|
+
"""Callable for creating parameters"""
|
|
102
|
+
|
|
103
|
+
@staticmethod
|
|
104
|
+
@abstractmethod
|
|
105
|
+
def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], BodyParameterType]:
|
|
106
|
+
"""Callable for creating body parameters"""
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def grouped(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
110
|
+
"""All parameters that are inside a parameter group"""
|
|
111
|
+
params: List[Union[ParameterType, BodyParameterType]] = [p for p in self.parameters if p.grouped_by]
|
|
112
|
+
if self.has_body and self.body_parameter.grouped_by:
|
|
113
|
+
params.append(self.body_parameter)
|
|
114
|
+
return params
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def has_form_data_body(self):
|
|
118
|
+
return self.has_body and self.body_parameter.is_form_data
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def has_body(self) -> bool:
|
|
122
|
+
"""Whether there is a body parameter in the parameter list"""
|
|
123
|
+
return bool(self._body_parameter)
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def path(self) -> List[ParameterType]:
|
|
127
|
+
"""All path parameters"""
|
|
128
|
+
return [p for p in self.parameters if p.location in (ParameterLocation.PATH, ParameterLocation.ENDPOINT_PATH)]
|
|
129
|
+
|
|
130
|
+
@property
|
|
131
|
+
def query(self) -> List[ParameterType]:
|
|
132
|
+
"""All query parameters"""
|
|
133
|
+
return [p for p in self.parameters if p.location == ParameterLocation.QUERY]
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def headers(self) -> List[ParameterType]:
|
|
137
|
+
"""All header parameters"""
|
|
138
|
+
return [p for p in self.parameters if p.location == ParameterLocation.HEADER]
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def constant(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
142
|
+
"""All constant parameters"""
|
|
143
|
+
return [p for p in self.parameters if p.constant]
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def positional(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
147
|
+
"""All positional parameters"""
|
|
148
|
+
return _sort(
|
|
149
|
+
[p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.POSITIONAL]
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
@property
|
|
153
|
+
def keyword_only(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
154
|
+
"""All keyword only parameters"""
|
|
155
|
+
return _sort(
|
|
156
|
+
[p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.KEYWORD_ONLY]
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
@property
|
|
160
|
+
def kwarg(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
161
|
+
"""All kwargs"""
|
|
162
|
+
return _sort([p for p in self.unsorted_method_params if p.method_location == ParameterMethodLocation.KWARG])
|
|
163
|
+
|
|
164
|
+
@property
|
|
165
|
+
def body_parameter(self) -> BodyParameterType:
|
|
166
|
+
"""The body parameter of the parameter list. Will only ever be at most one."""
|
|
167
|
+
if not self._body_parameter:
|
|
168
|
+
raise ValueError("There is no body parameter")
|
|
169
|
+
return self._body_parameter
|
|
170
|
+
|
|
171
|
+
@property
|
|
172
|
+
@abstractmethod
|
|
173
|
+
def implementation(self) -> str:
|
|
174
|
+
"""Whether this is a client or a method parameter"""
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def unsorted_method_params(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
178
|
+
"""Method params before sorting"""
|
|
179
|
+
method_params: List[Union[ParameterType, BodyParameterType]] = [
|
|
180
|
+
p
|
|
181
|
+
for p in self.parameters
|
|
182
|
+
if p.in_method_signature
|
|
183
|
+
and p.implementation == self.implementation
|
|
184
|
+
and (self.code_model.is_legacy or not p.hide_in_method)
|
|
185
|
+
]
|
|
186
|
+
if self._body_parameter:
|
|
187
|
+
if self._body_parameter.in_method_signature:
|
|
188
|
+
method_params.append(self._body_parameter)
|
|
189
|
+
try:
|
|
190
|
+
# i am a multipart body parameter
|
|
191
|
+
# Only legacy generates operations with me, so I will follow the legacy rules
|
|
192
|
+
# I will splat out my entries as individual entries
|
|
193
|
+
method_params.extend(self._body_parameter.entries) # type: ignore
|
|
194
|
+
except AttributeError:
|
|
195
|
+
pass
|
|
196
|
+
return method_params
|
|
197
|
+
|
|
198
|
+
@property
|
|
199
|
+
def method(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
200
|
+
"""Sorted method params. First positional, then keyword only, then kwarg"""
|
|
201
|
+
return self.positional + self.keyword_only + self.kwarg
|
|
202
|
+
|
|
203
|
+
def method_signature(self, async_mode: bool) -> List[str]:
|
|
204
|
+
"""Method signature for this parameter list."""
|
|
205
|
+
return method_signature_helper(
|
|
206
|
+
positional=self.method_signature_positional(async_mode),
|
|
207
|
+
keyword_only=self.method_signature_keyword_only(async_mode),
|
|
208
|
+
kwarg_params=self.method_signature_kwargs,
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
def method_signature_positional(self, async_mode: bool) -> List[str]:
|
|
212
|
+
"""Signature for positional parameters"""
|
|
213
|
+
return [parameter.method_signature(async_mode) for parameter in self.positional]
|
|
214
|
+
|
|
215
|
+
def method_signature_keyword_only(self, async_mode: bool) -> List[str]:
|
|
216
|
+
"""Signature for keyword only parameters"""
|
|
217
|
+
result = [
|
|
218
|
+
parameter.method_signature(async_mode)
|
|
219
|
+
for parameter in self.keyword_only
|
|
220
|
+
if not parameter.hide_in_operation_signature
|
|
221
|
+
]
|
|
222
|
+
return ["*,"] + result if result else []
|
|
223
|
+
|
|
224
|
+
@property
|
|
225
|
+
def method_signature_kwargs(self) -> List[str]:
|
|
226
|
+
"""Signature for kwargs"""
|
|
227
|
+
return ["**kwargs: Any"]
|
|
228
|
+
|
|
229
|
+
@property
|
|
230
|
+
def kwargs_to_pop(self) -> List[Union[ParameterType, BodyParameterType]]:
|
|
231
|
+
"""Method kwargs we want to pop"""
|
|
232
|
+
# don't want to pop bodies unless it's a constant
|
|
233
|
+
kwargs_to_pop = self.kwarg
|
|
234
|
+
return [k for k in kwargs_to_pop if k.location != ParameterLocation.BODY or k.constant]
|
|
235
|
+
|
|
236
|
+
@property
|
|
237
|
+
def call(self) -> List[str]:
|
|
238
|
+
"""How to pass in parameters to call the operation"""
|
|
239
|
+
retval = [p.client_name for p in self.method if p.method_location == ParameterMethodLocation.POSITIONAL]
|
|
240
|
+
retval.extend(
|
|
241
|
+
[
|
|
242
|
+
f"{p.client_name}={p.client_name}"
|
|
243
|
+
for p in self.method
|
|
244
|
+
if p.method_location == ParameterMethodLocation.KEYWORD_ONLY
|
|
245
|
+
]
|
|
246
|
+
)
|
|
247
|
+
retval.append("**kwargs")
|
|
248
|
+
return retval
|
|
249
|
+
|
|
250
|
+
@classmethod
|
|
251
|
+
def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel"):
|
|
252
|
+
parameters = [cls.parameter_creator()(parameter, code_model) for parameter in yaml_data["parameters"]]
|
|
253
|
+
body_parameter = None
|
|
254
|
+
if yaml_data.get("bodyParameter"):
|
|
255
|
+
body_parameter = cls.body_parameter_creator()(yaml_data["bodyParameter"], code_model)
|
|
256
|
+
return cls(
|
|
257
|
+
yaml_data,
|
|
258
|
+
code_model,
|
|
259
|
+
parameters=parameters,
|
|
260
|
+
body_parameter=body_parameter,
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
class _ParameterList(_ParameterListBase[Parameter, BodyParameter]):
|
|
265
|
+
|
|
266
|
+
@staticmethod
|
|
267
|
+
def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], Parameter]:
|
|
268
|
+
return Parameter.from_yaml
|
|
269
|
+
|
|
270
|
+
@staticmethod
|
|
271
|
+
def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], BodyParameter]:
|
|
272
|
+
return BodyParameter.from_yaml
|
|
273
|
+
|
|
274
|
+
@property
|
|
275
|
+
def implementation(self) -> str:
|
|
276
|
+
return "Method"
|
|
277
|
+
|
|
278
|
+
@property
|
|
279
|
+
def path(self) -> List[Parameter]:
|
|
280
|
+
return [k for k in super().path if k.location == ParameterLocation.ENDPOINT_PATH]
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
class ParameterList(_ParameterList):
|
|
284
|
+
"""ParameterList is the parameter list for Operation classes"""
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
class _RequestBuilderParameterList(_ParameterListBase[RequestBuilderParameter, RequestBuilderBodyParameter]):
|
|
288
|
+
"""_RequestBuilderParameterList is base parameter list for RequestBuilder classes"""
|
|
289
|
+
|
|
290
|
+
@staticmethod
|
|
291
|
+
def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], RequestBuilderParameter]:
|
|
292
|
+
return RequestBuilderParameter.from_yaml
|
|
293
|
+
|
|
294
|
+
@staticmethod
|
|
295
|
+
def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], RequestBuilderBodyParameter]:
|
|
296
|
+
return RequestBuilderBodyParameter.from_yaml
|
|
297
|
+
|
|
298
|
+
@property
|
|
299
|
+
def implementation(self) -> str:
|
|
300
|
+
return "Method"
|
|
301
|
+
|
|
302
|
+
@property
|
|
303
|
+
def unsorted_method_params(
|
|
304
|
+
self,
|
|
305
|
+
) -> List[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
|
|
306
|
+
# don't have access to client params in request builder
|
|
307
|
+
retval = [
|
|
308
|
+
p
|
|
309
|
+
for p in super().unsorted_method_params
|
|
310
|
+
if not (p.location == ParameterLocation.BODY and cast(RequestBuilderBodyParameter, p).is_partial_body)
|
|
311
|
+
]
|
|
312
|
+
retval.extend([p for p in self.parameters if p.implementation == "Client" and p.in_method_signature])
|
|
313
|
+
return retval
|
|
314
|
+
|
|
315
|
+
@property
|
|
316
|
+
def path(self) -> List[RequestBuilderParameter]:
|
|
317
|
+
return [p for p in super().path if p.location != ParameterLocation.ENDPOINT_PATH]
|
|
318
|
+
|
|
319
|
+
@property
|
|
320
|
+
def constant(
|
|
321
|
+
self,
|
|
322
|
+
) -> List[Union[RequestBuilderParameter, RequestBuilderBodyParameter]]:
|
|
323
|
+
"""All constant parameters"""
|
|
324
|
+
return [p for p in super().constant if p.location != ParameterLocation.ENDPOINT_PATH]
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
class RequestBuilderParameterList(_RequestBuilderParameterList):
|
|
328
|
+
"""Parameter list for Request Builder"""
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
class OverloadedRequestBuilderParameterList(_RequestBuilderParameterList):
|
|
332
|
+
"""Parameter list for OverloadedRequestBuilder"""
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
class _ClientGlobalParameterList(_ParameterListBase[ParameterType, BodyParameter]): # pylint: disable=abstract-method
|
|
336
|
+
"""Base parameter list for client and config classes"""
|
|
337
|
+
|
|
338
|
+
@staticmethod
|
|
339
|
+
def body_parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], BodyParameter]:
|
|
340
|
+
return BodyParameter.from_yaml
|
|
341
|
+
|
|
342
|
+
@property
|
|
343
|
+
def implementation(self) -> str:
|
|
344
|
+
return "Client"
|
|
345
|
+
|
|
346
|
+
@property
|
|
347
|
+
def credential(self) -> Optional[ParameterType]:
|
|
348
|
+
try:
|
|
349
|
+
return next(p for p in self.parameters if p.client_name == "credential")
|
|
350
|
+
except StopIteration:
|
|
351
|
+
return None
|
|
352
|
+
|
|
353
|
+
@property
|
|
354
|
+
def path(self) -> List[ParameterType]:
|
|
355
|
+
return [p for p in super().path if p.location == ParameterLocation.ENDPOINT_PATH]
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
class ClientGlobalParameterList(_ClientGlobalParameterList[ClientParameter]):
|
|
359
|
+
"""Parameter list for Client class"""
|
|
360
|
+
|
|
361
|
+
@staticmethod
|
|
362
|
+
def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], ClientParameter]:
|
|
363
|
+
return ClientParameter.from_yaml
|
|
364
|
+
|
|
365
|
+
@property
|
|
366
|
+
def path(self) -> List[ClientParameter]:
|
|
367
|
+
return [p for p in super().path if not p.is_host]
|
|
368
|
+
|
|
369
|
+
@property
|
|
370
|
+
def host(self) -> Optional[ClientParameter]:
|
|
371
|
+
"""Get the host parameter"""
|
|
372
|
+
try:
|
|
373
|
+
return next(p for p in self.parameters if p.is_host)
|
|
374
|
+
except StopIteration:
|
|
375
|
+
return None
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
class ConfigGlobalParameterList(_ClientGlobalParameterList[ConfigParameter]):
|
|
379
|
+
"""Parameter list for config"""
|
|
380
|
+
|
|
381
|
+
@staticmethod
|
|
382
|
+
def parameter_creator() -> Callable[[Dict[str, Any], "CodeModel"], ConfigParameter]:
|
|
383
|
+
return ConfigParameter.from_yaml
|
|
384
|
+
|
|
385
|
+
@property
|
|
386
|
+
def implementation(self) -> str:
|
|
387
|
+
return "Client"
|