@typespec/http-client-python 0.13.0-dev.2 → 0.13.0-dev.3
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/eng/scripts/setup/__pycache__/package_manager.cpython-39.pyc +0 -0
- package/eng/scripts/setup/__pycache__/venvtools.cpython-39.pyc +0 -0
- package/generator/build/lib/pygen/__init__.py +176 -2
- package/generator/build/lib/pygen/black.py +1 -1
- package/generator/build/lib/pygen/codegen/__init__.py +4 -256
- package/generator/build/lib/pygen/codegen/_utils.py +0 -3
- package/generator/build/lib/pygen/codegen/models/__init__.py +1 -1
- package/generator/build/lib/pygen/codegen/models/base_builder.py +1 -1
- package/generator/build/lib/pygen/codegen/models/client.py +12 -12
- package/generator/build/lib/pygen/codegen/models/code_model.py +10 -9
- package/generator/build/lib/pygen/codegen/models/enum_type.py +4 -4
- package/generator/build/lib/pygen/codegen/models/imports.py +1 -1
- package/generator/build/lib/pygen/codegen/models/list_type.py +6 -6
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +1 -1
- package/generator/build/lib/pygen/codegen/models/operation.py +16 -16
- package/generator/build/lib/pygen/codegen/models/operation_group.py +4 -4
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +4 -4
- package/generator/build/lib/pygen/codegen/models/parameter.py +8 -8
- package/generator/build/lib/pygen/codegen/models/property.py +1 -1
- package/generator/build/lib/pygen/codegen/models/request_builder.py +2 -2
- package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +2 -2
- package/generator/build/lib/pygen/codegen/models/response.py +3 -3
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +27 -28
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +31 -31
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +4 -4
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +4 -4
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +1 -1
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +5 -5
- package/generator/build/lib/pygen/codegen/templates/config.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +2 -2
- package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +2 -2
- package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +38 -7
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +9 -9
- package/generator/build/lib/pygen/codegen/templates/request_builder.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +6 -6
- package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +1 -1
- package/generator/build/lib/pygen/preprocess/__init__.py +1 -1
- package/generator/build/lib/pygen/utils.py +4 -0
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/__init__.py +176 -2
- package/generator/pygen/black.py +1 -1
- package/generator/pygen/codegen/__init__.py +4 -256
- package/generator/pygen/codegen/_utils.py +0 -3
- package/generator/pygen/codegen/models/__init__.py +1 -1
- package/generator/pygen/codegen/models/base_builder.py +1 -1
- package/generator/pygen/codegen/models/client.py +12 -12
- package/generator/pygen/codegen/models/code_model.py +10 -9
- package/generator/pygen/codegen/models/enum_type.py +4 -4
- package/generator/pygen/codegen/models/imports.py +1 -1
- package/generator/pygen/codegen/models/list_type.py +6 -6
- package/generator/pygen/codegen/models/lro_operation.py +1 -1
- package/generator/pygen/codegen/models/operation.py +16 -16
- package/generator/pygen/codegen/models/operation_group.py +4 -4
- package/generator/pygen/codegen/models/paging_operation.py +4 -4
- package/generator/pygen/codegen/models/parameter.py +8 -8
- package/generator/pygen/codegen/models/property.py +1 -1
- package/generator/pygen/codegen/models/request_builder.py +2 -2
- package/generator/pygen/codegen/models/request_builder_parameter.py +2 -2
- package/generator/pygen/codegen/models/response.py +3 -3
- package/generator/pygen/codegen/serializers/__init__.py +27 -28
- package/generator/pygen/codegen/serializers/builder_serializer.py +31 -31
- package/generator/pygen/codegen/serializers/client_serializer.py +4 -4
- package/generator/pygen/codegen/serializers/general_serializer.py +4 -4
- package/generator/pygen/codegen/serializers/metadata_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/model_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/sample_serializer.py +1 -1
- package/generator/pygen/codegen/serializers/test_serializer.py +5 -5
- package/generator/pygen/codegen/templates/config.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/conftest.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/metadata.json.jinja2 +2 -2
- package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +2 -2
- package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operation_tools.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +38 -7
- package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
- package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +9 -9
- package/generator/pygen/codegen/templates/request_builder.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/sample.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/test.py.jinja2 +6 -6
- package/generator/pygen/codegen/templates/version.py.jinja2 +1 -1
- package/generator/pygen/preprocess/__init__.py +1 -1
- package/generator/pygen/utils.py +4 -0
- package/generator/test/unittests/test_optional_return_type.py +5 -5
- package/generator/test/unittests/test_parameter_ordering.py +5 -5
- package/generator/test/unittests/test_sort_schema.py +4 -4
- package/package.json +1 -1
|
@@ -14,10 +14,11 @@ from .request_builder import RequestBuilder, OverloadedRequestBuilder
|
|
|
14
14
|
from .operation_group import OperationGroup
|
|
15
15
|
from .utils import NamespaceType
|
|
16
16
|
from .._utils import DEFAULT_HEADER_TEXT, DEFAULT_LICENSE_DESCRIPTION
|
|
17
|
+
from ... import OptionsDict
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
def _is_legacy(options) -> bool:
|
|
20
|
-
return not (options.get("
|
|
21
|
+
return not (options.get("version-tolerant") or options.get("low-level-client"))
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
def get_all_operation_groups_recursively(clients: List[Client]) -> List[OperationGroup]:
|
|
@@ -72,7 +73,7 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
|
|
|
72
73
|
def __init__(
|
|
73
74
|
self,
|
|
74
75
|
yaml_data: Dict[str, Any],
|
|
75
|
-
options:
|
|
76
|
+
options: OptionsDict,
|
|
76
77
|
) -> None:
|
|
77
78
|
self.yaml_data = yaml_data
|
|
78
79
|
self.options = options
|
|
@@ -86,7 +87,7 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
|
|
|
86
87
|
self.clients: List[Client] = [
|
|
87
88
|
Client.from_yaml(client_yaml_data, self) for client_yaml_data in yaml_data["clients"]
|
|
88
89
|
]
|
|
89
|
-
if self.options["
|
|
90
|
+
if self.options["models-mode"] and self.model_types:
|
|
90
91
|
self.sort_model_types()
|
|
91
92
|
self.named_unions: List[CombinedType] = [
|
|
92
93
|
t for t in self.types_map.values() if isinstance(t, CombinedType) and t.name
|
|
@@ -227,7 +228,7 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
|
|
|
227
228
|
@property
|
|
228
229
|
def rest_layer_name(self) -> str:
|
|
229
230
|
"""If we have a separate rest layer, what is its name?"""
|
|
230
|
-
return "rest" if self.options["
|
|
231
|
+
return "rest" if self.options["builders-visibility"] == "public" else "_rest"
|
|
231
232
|
|
|
232
233
|
@property
|
|
233
234
|
def client_filename(self) -> str:
|
|
@@ -247,12 +248,12 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
|
|
|
247
248
|
return (
|
|
248
249
|
self.need_utils_utils(async_mode, client_namespace)
|
|
249
250
|
or self.need_utils_serialization
|
|
250
|
-
or self.options["
|
|
251
|
+
or self.options["models-mode"] == "dpg"
|
|
251
252
|
)
|
|
252
253
|
|
|
253
254
|
@property
|
|
254
255
|
def need_utils_serialization(self) -> bool:
|
|
255
|
-
return not self.options["
|
|
256
|
+
return not self.options["client-side-validation"]
|
|
256
257
|
|
|
257
258
|
def need_utils_utils(self, async_mode: bool, client_namespace: str) -> bool:
|
|
258
259
|
return (
|
|
@@ -267,7 +268,7 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
|
|
|
267
268
|
(not async_mode)
|
|
268
269
|
and self.is_top_namespace(client_namespace)
|
|
269
270
|
and self.has_form_data
|
|
270
|
-
and self.options["
|
|
271
|
+
and self.options["models-mode"] == "dpg"
|
|
271
272
|
)
|
|
272
273
|
|
|
273
274
|
def need_utils_etag(self, client_namespace: str) -> bool:
|
|
@@ -292,7 +293,7 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
|
|
|
292
293
|
if client_namespace not in self._operations_folder_name:
|
|
293
294
|
name = "operations"
|
|
294
295
|
operation_groups = self.client_namespace_types.get(client_namespace, ClientNamespaceType()).operation_groups
|
|
295
|
-
if self.options["
|
|
296
|
+
if self.options["version-tolerant"] and all(og.is_mixin for og in operation_groups):
|
|
296
297
|
name = f"_{name}"
|
|
297
298
|
self._operations_folder_name[client_namespace] = name
|
|
298
299
|
return self._operations_folder_name[client_namespace]
|
|
@@ -427,7 +428,7 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
|
|
|
427
428
|
license_header = self.yaml_data.get("licenseInfo", {}).get("header", "")
|
|
428
429
|
else:
|
|
429
430
|
# typespec azure case without custom license and swagger case
|
|
430
|
-
license_header = self.options.get("
|
|
431
|
+
license_header = self.options.get("header-text") or DEFAULT_HEADER_TEXT
|
|
431
432
|
if license_header:
|
|
432
433
|
license_header = license_header.replace("\n", "\n# ")
|
|
433
434
|
license_header = (
|
|
@@ -170,7 +170,7 @@ class EnumType(BaseType):
|
|
|
170
170
|
:return: The type annotation for this schema
|
|
171
171
|
:rtype: str
|
|
172
172
|
"""
|
|
173
|
-
if self.code_model.options["
|
|
173
|
+
if self.code_model.options["models-mode"]:
|
|
174
174
|
|
|
175
175
|
module_name = ""
|
|
176
176
|
if kwargs.get("need_model_alias", True):
|
|
@@ -190,13 +190,13 @@ class EnumType(BaseType):
|
|
|
190
190
|
return self.value_type.get_declaration(value)
|
|
191
191
|
|
|
192
192
|
def docstring_text(self, **kwargs: Any) -> str:
|
|
193
|
-
if self.code_model.options["
|
|
193
|
+
if self.code_model.options["models-mode"]:
|
|
194
194
|
return self.name
|
|
195
195
|
return self.value_type.type_annotation(**kwargs)
|
|
196
196
|
|
|
197
197
|
def docstring_type(self, **kwargs: Any) -> str:
|
|
198
198
|
"""The python type used for RST syntax input and type annotation."""
|
|
199
|
-
if self.code_model.options["
|
|
199
|
+
if self.code_model.options["models-mode"]:
|
|
200
200
|
type_annotation = self.value_type.type_annotation(**kwargs)
|
|
201
201
|
enum_type_annotation = f"{self.client_namespace}.models.{self.name}"
|
|
202
202
|
return f"{type_annotation} or ~{enum_type_annotation}"
|
|
@@ -230,7 +230,7 @@ class EnumType(BaseType):
|
|
|
230
230
|
def imports(self, **kwargs: Any) -> FileImport:
|
|
231
231
|
file_import = FileImport(self.code_model)
|
|
232
232
|
file_import.merge(self.value_type.imports(**kwargs))
|
|
233
|
-
if self.code_model.options["
|
|
233
|
+
if self.code_model.options["models-mode"]:
|
|
234
234
|
file_import.add_submodule_import("typing", "Union", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
235
235
|
|
|
236
236
|
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
@@ -255,7 +255,7 @@ class FileImport:
|
|
|
255
255
|
msrest_import_type: MsrestImportType,
|
|
256
256
|
typing_section: TypingSection,
|
|
257
257
|
):
|
|
258
|
-
if self.code_model.options["
|
|
258
|
+
if self.code_model.options["client-side-validation"]:
|
|
259
259
|
if msrest_import_type == MsrestImportType.Module:
|
|
260
260
|
self.add_import("msrest.serialization", ImportType.SDKCORE, typing_section)
|
|
261
261
|
else:
|
|
@@ -34,9 +34,9 @@ class ListType(BaseType):
|
|
|
34
34
|
|
|
35
35
|
def type_annotation(self, **kwargs: Any) -> str:
|
|
36
36
|
if (
|
|
37
|
-
self.code_model.options["
|
|
37
|
+
self.code_model.options["version-tolerant"]
|
|
38
38
|
and self.element_type.is_xml
|
|
39
|
-
and not self.code_model.options["
|
|
39
|
+
and not self.code_model.options["models-mode"]
|
|
40
40
|
):
|
|
41
41
|
# this means we're version tolerant XML, we just return the XML element
|
|
42
42
|
return self.element_type.type_annotation(**kwargs)
|
|
@@ -68,13 +68,13 @@ class ListType(BaseType):
|
|
|
68
68
|
return ", ".join(attrs_list)
|
|
69
69
|
|
|
70
70
|
def docstring_type(self, **kwargs: Any) -> str:
|
|
71
|
-
if self.code_model.options["
|
|
71
|
+
if self.code_model.options["version-tolerant"] and self.element_type.xml_metadata:
|
|
72
72
|
# this means we're version tolerant XML, we just return the XML element
|
|
73
73
|
return self.element_type.docstring_type(**kwargs)
|
|
74
74
|
return f"list[{self.element_type.docstring_type(**kwargs)}]"
|
|
75
75
|
|
|
76
76
|
def docstring_text(self, **kwargs: Any) -> str:
|
|
77
|
-
if self.code_model.options["
|
|
77
|
+
if self.code_model.options["version-tolerant"] and self.element_type.xml_metadata:
|
|
78
78
|
# this means we're version tolerant XML, we just return the XML element
|
|
79
79
|
return self.element_type.docstring_text(**kwargs)
|
|
80
80
|
return f"list of {self.element_type.docstring_text(**kwargs)}"
|
|
@@ -129,9 +129,9 @@ class ListType(BaseType):
|
|
|
129
129
|
def imports(self, **kwargs: Any) -> FileImport:
|
|
130
130
|
file_import = FileImport(self.code_model)
|
|
131
131
|
if not (
|
|
132
|
-
self.code_model.options["
|
|
132
|
+
self.code_model.options["version-tolerant"]
|
|
133
133
|
and self.element_type.is_xml
|
|
134
|
-
and not self.code_model.options["
|
|
134
|
+
and not self.code_model.options["models-mode"]
|
|
135
135
|
):
|
|
136
136
|
file_import.add_submodule_import("typing", "List", ImportType.STDLIB, TypingSection.CONDITIONAL)
|
|
137
137
|
file_import.merge(self.element_type.imports(**kwargs))
|
|
@@ -125,7 +125,7 @@ class LROOperationBase(OperationBase[LROResponseType]):
|
|
|
125
125
|
ImportType.SDKCORE,
|
|
126
126
|
)
|
|
127
127
|
if (
|
|
128
|
-
self.code_model.options["
|
|
128
|
+
self.code_model.options["models-mode"] == "dpg"
|
|
129
129
|
and self.lro_response
|
|
130
130
|
and self.lro_response.type
|
|
131
131
|
and self.lro_response.type.type == "model"
|
|
@@ -124,7 +124,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
124
124
|
return successful_response_with_body and successful_response_without_body
|
|
125
125
|
|
|
126
126
|
def response_type_annotation(self, **kwargs) -> str:
|
|
127
|
-
if self.code_model.options["
|
|
127
|
+
if self.code_model.options["head-as-boolean"] and self.request_builder.method.lower() == "head":
|
|
128
128
|
return "bool"
|
|
129
129
|
response_type_annotations: OrderedSet[str] = {
|
|
130
130
|
response.type_annotation(**kwargs): None for response in self.responses if response.type
|
|
@@ -148,13 +148,13 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
148
148
|
return retval
|
|
149
149
|
|
|
150
150
|
def cls_type_annotation(self, *, async_mode: bool, **kwargs: Any) -> str:
|
|
151
|
-
if self.request_builder.method.lower() == "head" and self.code_model.options["
|
|
151
|
+
if self.request_builder.method.lower() == "head" and self.code_model.options["head-as-boolean"]:
|
|
152
152
|
return "ClsType[None]"
|
|
153
153
|
return f"ClsType[{self.response_type_annotation(async_mode=async_mode, **kwargs)}]"
|
|
154
154
|
|
|
155
155
|
def _response_docstring_helper(self, attr_name: str, **kwargs: Any) -> str:
|
|
156
156
|
responses_with_body = [r for r in self.responses if r.type]
|
|
157
|
-
if self.request_builder.method.lower() == "head" and self.code_model.options["
|
|
157
|
+
if self.request_builder.method.lower() == "head" and self.code_model.options["head-as-boolean"]:
|
|
158
158
|
return "bool"
|
|
159
159
|
if responses_with_body:
|
|
160
160
|
response_docstring_values: OrderedSet[str] = {
|
|
@@ -170,9 +170,9 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
170
170
|
|
|
171
171
|
def response_docstring_text(self, **kwargs) -> str:
|
|
172
172
|
retval = self._response_docstring_helper("docstring_text", **kwargs)
|
|
173
|
-
if not self.code_model.options["
|
|
173
|
+
if not self.code_model.options["version-tolerant"]:
|
|
174
174
|
retval += " or the result of cls(response)"
|
|
175
|
-
if self.code_model.options["
|
|
175
|
+
if self.code_model.options["models-mode"] == "dpg" and any(
|
|
176
176
|
isinstance(r.type, ModelType) for r in self.responses
|
|
177
177
|
):
|
|
178
178
|
r = next(r for r in self.responses if isinstance(r.type, ModelType))
|
|
@@ -202,7 +202,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
202
202
|
exception_schema = default_exceptions[0].type
|
|
203
203
|
if isinstance(exception_schema, ModelType):
|
|
204
204
|
return exception_schema.type_annotation(skip_quote=True)
|
|
205
|
-
return None if self.code_model.options["
|
|
205
|
+
return None if self.code_model.options["models-mode"] == "dpg" else "'object'"
|
|
206
206
|
|
|
207
207
|
@property
|
|
208
208
|
def non_default_errors(self) -> List[Response]:
|
|
@@ -248,7 +248,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
248
248
|
async_mode=async_mode, need_import_iobase=self.need_import_iobase, **kwargs
|
|
249
249
|
)
|
|
250
250
|
)
|
|
251
|
-
if self.code_model.options["
|
|
251
|
+
if self.code_model.options["models-mode"]:
|
|
252
252
|
for exception in self.exceptions:
|
|
253
253
|
file_import.merge(
|
|
254
254
|
exception.imports_for_multiapi(
|
|
@@ -275,7 +275,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
275
275
|
@property
|
|
276
276
|
def need_validation(self) -> bool:
|
|
277
277
|
"""Whether we need parameter / operation validation. For API version."""
|
|
278
|
-
return self.code_model.options["
|
|
278
|
+
return self.code_model.options["validate-versioning"] and (
|
|
279
279
|
bool(self.added_on) or any(p for p in self.parameters if p.added_on)
|
|
280
280
|
)
|
|
281
281
|
|
|
@@ -287,7 +287,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
287
287
|
) -> FileImport:
|
|
288
288
|
"""Helper method to get a request builder import."""
|
|
289
289
|
file_import = FileImport(self.code_model)
|
|
290
|
-
if self.code_model.options["
|
|
290
|
+
if self.code_model.options["builders-visibility"] != "embedded":
|
|
291
291
|
group_name = request_builder.group_name
|
|
292
292
|
rest_import_path = "..." if async_mode else ".."
|
|
293
293
|
if group_name:
|
|
@@ -304,7 +304,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
304
304
|
import_type=ImportType.LOCAL,
|
|
305
305
|
alias="rest",
|
|
306
306
|
)
|
|
307
|
-
if self.code_model.options["
|
|
307
|
+
if self.code_model.options["builders-visibility"] == "embedded" and async_mode:
|
|
308
308
|
file_import.add_submodule_import(
|
|
309
309
|
self.code_model.get_relative_import_path(
|
|
310
310
|
serialize_namespace,
|
|
@@ -341,7 +341,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
341
341
|
file_import.merge(
|
|
342
342
|
response.imports(async_mode=async_mode, need_import_iobase=self.need_import_iobase, **kwargs)
|
|
343
343
|
)
|
|
344
|
-
if self.code_model.options["
|
|
344
|
+
if self.code_model.options["models-mode"]:
|
|
345
345
|
for exception in self.exceptions:
|
|
346
346
|
file_import.merge(exception.imports(async_mode=async_mode, **kwargs))
|
|
347
347
|
|
|
@@ -369,7 +369,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
369
369
|
errors.extend(["StreamConsumedError", "StreamClosedError"])
|
|
370
370
|
for error in errors:
|
|
371
371
|
file_import.add_submodule_import("exceptions", error, ImportType.SDKCORE)
|
|
372
|
-
if self.code_model.options["
|
|
372
|
+
if self.code_model.options["azure-arm"]:
|
|
373
373
|
file_import.add_submodule_import("azure.mgmt.core.exceptions", "ARMErrorFormat", ImportType.SDKCORE)
|
|
374
374
|
file_import.add_mutable_mapping_import()
|
|
375
375
|
|
|
@@ -418,7 +418,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
418
418
|
"HttpResponse",
|
|
419
419
|
ImportType.SDKCORE,
|
|
420
420
|
)
|
|
421
|
-
if self.code_model.options["
|
|
421
|
+
if self.code_model.options["builders-visibility"] == "embedded" and not async_mode:
|
|
422
422
|
file_import.merge(self.request_builder.imports(**kwargs))
|
|
423
423
|
file_import.add_submodule_import(
|
|
424
424
|
f"{'' if self.code_model.is_azure_flavor else 'runtime.'}pipeline",
|
|
@@ -439,7 +439,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
439
439
|
file_import.merge(self.get_request_builder_import(self.request_builder, async_mode, serialize_namespace))
|
|
440
440
|
if self.overloads:
|
|
441
441
|
file_import.add_submodule_import("typing", "overload", ImportType.STDLIB)
|
|
442
|
-
if self.code_model.options["
|
|
442
|
+
if self.code_model.options["models-mode"] == "dpg":
|
|
443
443
|
relative_path = self.code_model.get_relative_import_path(
|
|
444
444
|
serialize_namespace, module_name="_utils.model_base"
|
|
445
445
|
)
|
|
@@ -491,7 +491,7 @@ class OperationBase( # pylint: disable=too-many-public-methods,too-many-instanc
|
|
|
491
491
|
# in a mixin
|
|
492
492
|
basename = self.code_model.clients[0].legacy_filename
|
|
493
493
|
|
|
494
|
-
if basename == "operations" or self.code_model.options["
|
|
494
|
+
if basename == "operations" or self.code_model.options["combine-operation-files"]:
|
|
495
495
|
return "_operations"
|
|
496
496
|
return f"_{basename}_operations"
|
|
497
497
|
|
|
@@ -543,7 +543,7 @@ class Operation(OperationBase[Response]):
|
|
|
543
543
|
"distributed_trace_async",
|
|
544
544
|
ImportType.SDKCORE,
|
|
545
545
|
)
|
|
546
|
-
if self.has_response_body and not self.has_optional_return_type and not self.code_model.options["
|
|
546
|
+
if self.has_response_body and not self.has_optional_return_type and not self.code_model.options["models-mode"]:
|
|
547
547
|
file_import.add_submodule_import("typing", "cast", ImportType.STDLIB)
|
|
548
548
|
|
|
549
549
|
return file_import
|
|
@@ -40,7 +40,7 @@ class OperationGroup(BaseModel):
|
|
|
40
40
|
self.operations = operations
|
|
41
41
|
self.api_versions = api_versions
|
|
42
42
|
self.operation_groups: List[OperationGroup] = []
|
|
43
|
-
if self.code_model.options["
|
|
43
|
+
if self.code_model.options["show-operations"]:
|
|
44
44
|
self.operation_groups = [
|
|
45
45
|
OperationGroup.from_yaml(op_group, code_model, client)
|
|
46
46
|
for op_group in self.yaml_data.get("operationGroups", [])
|
|
@@ -78,7 +78,7 @@ class OperationGroup(BaseModel):
|
|
|
78
78
|
for operation in self.operations:
|
|
79
79
|
file_import.merge(operation.imports_for_multiapi(async_mode, **kwargs))
|
|
80
80
|
if (self.code_model.model_types or self.code_model.enums) and self.code_model.options[
|
|
81
|
-
"
|
|
81
|
+
"models-mode"
|
|
82
82
|
] == "msrest":
|
|
83
83
|
file_import.add_submodule_import(relative_path, "models", ImportType.LOCAL, alias="_models")
|
|
84
84
|
return file_import
|
|
@@ -110,7 +110,7 @@ class OperationGroup(BaseModel):
|
|
|
110
110
|
|
|
111
111
|
for operation in self.operations:
|
|
112
112
|
file_import.merge(operation.imports(async_mode, **kwargs))
|
|
113
|
-
if not self.code_model.options["
|
|
113
|
+
if not self.code_model.options["combine-operation-files"]:
|
|
114
114
|
for og in self.operation_groups:
|
|
115
115
|
file_import.add_submodule_import(
|
|
116
116
|
self.code_model.get_relative_import_path(
|
|
@@ -138,7 +138,7 @@ class OperationGroup(BaseModel):
|
|
|
138
138
|
# for multiapi
|
|
139
139
|
if (
|
|
140
140
|
(self.code_model.public_model_types)
|
|
141
|
-
and self.code_model.options["
|
|
141
|
+
and self.code_model.options["models-mode"] == "msrest"
|
|
142
142
|
and not self.is_mixin
|
|
143
143
|
):
|
|
144
144
|
file_import.add_submodule_import(
|
|
@@ -92,14 +92,14 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
|
92
92
|
if not wire_name:
|
|
93
93
|
# That's an ok scenario, it just means no next page possible
|
|
94
94
|
return None
|
|
95
|
-
if self.code_model.options["
|
|
95
|
+
if self.code_model.options["models-mode"] == "msrest":
|
|
96
96
|
return self._get_attr_name(wire_name)
|
|
97
97
|
return wire_name
|
|
98
98
|
|
|
99
99
|
@property
|
|
100
100
|
def item_name(self) -> str:
|
|
101
101
|
wire_name = self.yaml_data["itemName"]
|
|
102
|
-
if self.code_model.options["
|
|
102
|
+
if self.code_model.options["models-mode"] == "msrest":
|
|
103
103
|
# we don't use the paging model for dpg
|
|
104
104
|
return self._get_attr_name(wire_name)
|
|
105
105
|
return wire_name
|
|
@@ -135,7 +135,7 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
|
135
135
|
)
|
|
136
136
|
if (
|
|
137
137
|
self.next_request_builder
|
|
138
|
-
and self.code_model.options["
|
|
138
|
+
and self.code_model.options["builders-visibility"] == "embedded"
|
|
139
139
|
and not async_mode
|
|
140
140
|
):
|
|
141
141
|
file_import.merge(self.next_request_builder.imports(**kwargs))
|
|
@@ -168,7 +168,7 @@ class PagingOperationBase(OperationBase[PagingResponseType]):
|
|
|
168
168
|
"case_insensitive_dict",
|
|
169
169
|
ImportType.SDKCORE,
|
|
170
170
|
)
|
|
171
|
-
if self.code_model.options["
|
|
171
|
+
if self.code_model.options["models-mode"] == "dpg":
|
|
172
172
|
relative_path = self.code_model.get_relative_import_path(
|
|
173
173
|
serialize_namespace, module_name="_utils.model_base"
|
|
174
174
|
)
|
|
@@ -237,7 +237,7 @@ class BodyParameter(_ParameterBase):
|
|
|
237
237
|
return (
|
|
238
238
|
self.type.is_form_data
|
|
239
239
|
or bool(self.entries)
|
|
240
|
-
or ("multipart/form-data" in self.content_types and self.code_model.options["
|
|
240
|
+
or ("multipart/form-data" in self.content_types and self.code_model.options["from-typespec"])
|
|
241
241
|
)
|
|
242
242
|
|
|
243
243
|
@property
|
|
@@ -314,7 +314,7 @@ class Parameter(_ParameterBase):
|
|
|
314
314
|
|
|
315
315
|
@property
|
|
316
316
|
def hide_in_operation_signature(self) -> bool:
|
|
317
|
-
if self.code_model.options["
|
|
317
|
+
if self.code_model.options["version-tolerant"] and self.client_name == "maxpagesize":
|
|
318
318
|
return True
|
|
319
319
|
return self.is_continuation_token
|
|
320
320
|
|
|
@@ -342,7 +342,7 @@ class Parameter(_ParameterBase):
|
|
|
342
342
|
) -> ParameterMethodLocation:
|
|
343
343
|
if not self.in_method_signature:
|
|
344
344
|
raise ValueError(f"Parameter '{self.client_name}' is not in the method.")
|
|
345
|
-
if self.code_model.options["
|
|
345
|
+
if self.code_model.options["models-mode"] == "dpg" and self.in_flattened_body:
|
|
346
346
|
return ParameterMethodLocation.KEYWORD_ONLY
|
|
347
347
|
if self.grouper:
|
|
348
348
|
return ParameterMethodLocation.POSITIONAL
|
|
@@ -356,7 +356,7 @@ class Parameter(_ParameterBase):
|
|
|
356
356
|
ParameterLocation.HEADER,
|
|
357
357
|
ParameterLocation.QUERY,
|
|
358
358
|
)
|
|
359
|
-
if self.code_model.options["
|
|
359
|
+
if self.code_model.options["only-path-and-body-params-positional"] and query_or_header:
|
|
360
360
|
return ParameterMethodLocation.KEYWORD_ONLY
|
|
361
361
|
# for optional path parameter, we need to use keyword only
|
|
362
362
|
if self.location == ParameterLocation.PATH and self.optional:
|
|
@@ -385,15 +385,15 @@ class ClientParameter(Parameter):
|
|
|
385
385
|
return ParameterMethodLocation.KWARG
|
|
386
386
|
if (
|
|
387
387
|
self.is_host
|
|
388
|
-
and (self.code_model.options["
|
|
389
|
-
and not self.code_model.options["
|
|
388
|
+
and (self.code_model.options["version-tolerant"] or self.code_model.options["low-level-client"])
|
|
389
|
+
and not self.code_model.options["azure-arm"]
|
|
390
390
|
):
|
|
391
391
|
# this means i am the base url
|
|
392
392
|
return ParameterMethodLocation.KEYWORD_ONLY
|
|
393
393
|
if (
|
|
394
394
|
self.client_default_value is not None
|
|
395
|
-
and self.code_model.options["
|
|
396
|
-
and not self.code_model.options["
|
|
395
|
+
and self.code_model.options["from-typespec"]
|
|
396
|
+
and not self.code_model.options["azure-arm"]
|
|
397
397
|
):
|
|
398
398
|
return ParameterMethodLocation.KEYWORD_ONLY
|
|
399
399
|
return ParameterMethodLocation.POSITIONAL
|
|
@@ -152,7 +152,7 @@ class Property(BaseModel): # pylint: disable=too-many-instance-attributes
|
|
|
152
152
|
file_import.merge(self.type.imports(**kwargs))
|
|
153
153
|
if (self.optional and self.client_default_value is None) or self.readonly:
|
|
154
154
|
file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB)
|
|
155
|
-
if self.code_model.options["
|
|
155
|
+
if self.code_model.options["models-mode"] == "dpg":
|
|
156
156
|
serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace)
|
|
157
157
|
file_import.add_submodule_import(
|
|
158
158
|
self.code_model.get_relative_import_path(serialize_namespace, module_name="_utils.model_base"),
|
|
@@ -110,7 +110,7 @@ class RequestBuilderBase(BaseBuilder[ParameterListType, Sequence["RequestBuilder
|
|
|
110
110
|
msrest_import_type=MsrestImportType.Serializer,
|
|
111
111
|
typing_section=TypingSection.REGULAR,
|
|
112
112
|
)
|
|
113
|
-
if self.overloads and self.code_model.options["
|
|
113
|
+
if self.overloads and self.code_model.options["builders-visibility"] != "embedded":
|
|
114
114
|
file_import.add_submodule_import("typing", "overload", ImportType.STDLIB)
|
|
115
115
|
return file_import
|
|
116
116
|
|
|
@@ -127,7 +127,7 @@ class RequestBuilderBase(BaseBuilder[ParameterListType, Sequence["RequestBuilder
|
|
|
127
127
|
client: "Client",
|
|
128
128
|
) -> str:
|
|
129
129
|
additional_mark = ""
|
|
130
|
-
if code_model.options["
|
|
130
|
+
if code_model.options["combine-operation-files"] and code_model.options["builders-visibility"] == "embedded":
|
|
131
131
|
additional_mark = yaml_data["groupName"] or client.yaml_data["builderPadName"]
|
|
132
132
|
names = [
|
|
133
133
|
"build",
|
|
@@ -26,7 +26,7 @@ class RequestBuilderBodyParameter(BodyParameter):
|
|
|
26
26
|
if (
|
|
27
27
|
isinstance(self.type, (BinaryType, StringType))
|
|
28
28
|
or any("xml" in ct for ct in self.content_types)
|
|
29
|
-
or self.code_model.options["
|
|
29
|
+
or self.code_model.options["models-mode"] == "dpg"
|
|
30
30
|
):
|
|
31
31
|
self.client_name = "content"
|
|
32
32
|
else:
|
|
@@ -40,7 +40,7 @@ class RequestBuilderBodyParameter(BodyParameter):
|
|
|
40
40
|
@property
|
|
41
41
|
def in_method_signature(self) -> bool:
|
|
42
42
|
return (
|
|
43
|
-
super().in_method_signature and not self.is_partial_body and self.code_model.options["
|
|
43
|
+
super().in_method_signature and not self.is_partial_body and self.code_model.options["models-mode"] != "dpg"
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
@property
|
|
@@ -191,7 +191,7 @@ class PagingResponse(Response):
|
|
|
191
191
|
|
|
192
192
|
def docstring_text(self, **kwargs: Any) -> str:
|
|
193
193
|
base_description = "An iterator like instance of "
|
|
194
|
-
if not self.code_model.options["
|
|
194
|
+
if not self.code_model.options["version-tolerant"]:
|
|
195
195
|
base_description += "either "
|
|
196
196
|
return base_description + self.item_type.docstring_text(**kwargs)
|
|
197
197
|
|
|
@@ -266,7 +266,7 @@ class LROResponse(Response):
|
|
|
266
266
|
def docstring_text(self, **kwargs) -> str:
|
|
267
267
|
super_text = super().docstring_text(**kwargs)
|
|
268
268
|
base_description = f"An instance of {self.get_poller(kwargs.get('async_mode', False))} that returns "
|
|
269
|
-
if not self.code_model.options["
|
|
269
|
+
if not self.code_model.options["version-tolerant"]:
|
|
270
270
|
base_description += "either "
|
|
271
271
|
return base_description + super_text
|
|
272
272
|
|
|
@@ -321,7 +321,7 @@ class LROPagingResponse(LROResponse, PagingResponse):
|
|
|
321
321
|
|
|
322
322
|
def docstring_text(self, **kwargs) -> str:
|
|
323
323
|
base_description = "An instance of LROPoller that returns an iterator like instance of "
|
|
324
|
-
if not self.code_model.options["
|
|
324
|
+
if not self.code_model.options["version-tolerant"]:
|
|
325
325
|
base_description += "either "
|
|
326
326
|
return base_description + Response.docstring_text(self)
|
|
327
327
|
|