@typespec/http-client-python 0.4.3 → 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.
Files changed (139) hide show
  1. package/dist/emitter/emitter.d.ts.map +1 -1
  2. package/dist/emitter/emitter.js +85 -24
  3. package/dist/emitter/emitter.js.map +1 -1
  4. package/dist/emitter/lib.d.ts +1 -0
  5. package/dist/emitter/lib.d.ts.map +1 -1
  6. package/dist/emitter/lib.js +1 -0
  7. package/dist/emitter/lib.js.map +1 -1
  8. package/dist/emitter/run-python3.d.ts +2 -0
  9. package/dist/emitter/run-python3.d.ts.map +1 -0
  10. package/dist/emitter/run-python3.js +19 -0
  11. package/dist/emitter/run-python3.js.map +1 -0
  12. package/dist/emitter/system-requirements.d.ts +17 -0
  13. package/dist/emitter/system-requirements.d.ts.map +1 -0
  14. package/dist/emitter/system-requirements.js +167 -0
  15. package/dist/emitter/system-requirements.js.map +1 -0
  16. package/emitter/src/emitter.ts +88 -23
  17. package/emitter/src/lib.ts +2 -0
  18. package/emitter/src/run-python3.ts +20 -0
  19. package/emitter/src/system-requirements.ts +261 -0
  20. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  21. package/eng/scripts/ci/regenerate.ts +16 -4
  22. package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
  23. package/eng/scripts/setup/build.ts +16 -0
  24. package/eng/scripts/setup/build_pygen_wheel.py +40 -0
  25. package/eng/scripts/setup/install.py +9 -3
  26. package/eng/scripts/setup/install.ts +32 -0
  27. package/eng/scripts/setup/prepare.py +3 -1
  28. package/eng/scripts/setup/prepare.ts +11 -0
  29. package/eng/scripts/setup/run-python3.ts +1 -6
  30. package/generator/build/lib/pygen/__init__.py +107 -0
  31. package/generator/build/lib/pygen/_version.py +7 -0
  32. package/generator/build/lib/pygen/black.py +71 -0
  33. package/generator/build/lib/pygen/codegen/__init__.py +357 -0
  34. package/generator/build/lib/pygen/codegen/_utils.py +17 -0
  35. package/generator/build/lib/pygen/codegen/models/__init__.py +204 -0
  36. package/generator/build/lib/pygen/codegen/models/base.py +186 -0
  37. package/generator/build/lib/pygen/codegen/models/base_builder.py +118 -0
  38. package/generator/build/lib/pygen/codegen/models/client.py +435 -0
  39. package/generator/build/lib/pygen/codegen/models/code_model.py +237 -0
  40. package/generator/build/lib/pygen/codegen/models/combined_type.py +149 -0
  41. package/generator/build/lib/pygen/codegen/models/constant_type.py +129 -0
  42. package/generator/build/lib/pygen/codegen/models/credential_types.py +214 -0
  43. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +127 -0
  44. package/generator/build/lib/pygen/codegen/models/enum_type.py +238 -0
  45. package/generator/build/lib/pygen/codegen/models/imports.py +291 -0
  46. package/generator/build/lib/pygen/codegen/models/list_type.py +143 -0
  47. package/generator/build/lib/pygen/codegen/models/lro_operation.py +142 -0
  48. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +32 -0
  49. package/generator/build/lib/pygen/codegen/models/model_type.py +357 -0
  50. package/generator/build/lib/pygen/codegen/models/operation.py +509 -0
  51. package/generator/build/lib/pygen/codegen/models/operation_group.py +184 -0
  52. package/generator/build/lib/pygen/codegen/models/paging_operation.py +155 -0
  53. package/generator/build/lib/pygen/codegen/models/parameter.py +412 -0
  54. package/generator/build/lib/pygen/codegen/models/parameter_list.py +387 -0
  55. package/generator/build/lib/pygen/codegen/models/primitive_types.py +659 -0
  56. package/generator/build/lib/pygen/codegen/models/property.py +170 -0
  57. package/generator/build/lib/pygen/codegen/models/request_builder.py +189 -0
  58. package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +115 -0
  59. package/generator/build/lib/pygen/codegen/models/response.py +348 -0
  60. package/generator/build/lib/pygen/codegen/models/utils.py +21 -0
  61. package/generator/build/lib/pygen/codegen/serializers/__init__.py +574 -0
  62. package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +21 -0
  63. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +1533 -0
  64. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +294 -0
  65. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +15 -0
  66. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +213 -0
  67. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +126 -0
  68. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +198 -0
  69. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +33 -0
  70. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +335 -0
  71. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +89 -0
  72. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +44 -0
  73. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +221 -0
  74. package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +19 -0
  75. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +52 -0
  76. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +168 -0
  77. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +292 -0
  78. package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +31 -0
  79. package/generator/build/lib/pygen/codegen/serializers/utils.py +68 -0
  80. package/generator/build/lib/pygen/codegen/templates/client.py.jinja2 +37 -0
  81. package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +12 -0
  82. package/generator/build/lib/pygen/codegen/templates/config.py.jinja2 +73 -0
  83. package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +16 -0
  84. package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +28 -0
  85. package/generator/build/lib/pygen/codegen/templates/enum.py.jinja2 +13 -0
  86. package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +10 -0
  87. package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +24 -0
  88. package/generator/build/lib/pygen/codegen/templates/keywords.jinja2 +27 -0
  89. package/generator/build/lib/pygen/codegen/templates/lro_operation.py.jinja2 +16 -0
  90. package/generator/build/lib/pygen/codegen/templates/lro_paging_operation.py.jinja2 +18 -0
  91. package/generator/build/lib/pygen/codegen/templates/macros.jinja2 +12 -0
  92. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +167 -0
  93. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +1174 -0
  94. package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +15 -0
  95. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +97 -0
  96. package/generator/build/lib/pygen/codegen/templates/model_init.py.jinja2 +33 -0
  97. package/generator/build/lib/pygen/codegen/templates/model_msrest.py.jinja2 +92 -0
  98. package/generator/build/lib/pygen/codegen/templates/operation.py.jinja2 +21 -0
  99. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +75 -0
  100. package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +19 -0
  101. package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +81 -0
  102. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +17 -0
  103. package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +6 -0
  104. package/generator/build/lib/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +21 -0
  105. package/generator/build/lib/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +8 -0
  106. package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +107 -0
  107. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +9 -0
  108. package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +108 -0
  109. package/generator/build/lib/pygen/codegen/templates/paging_operation.py.jinja2 +21 -0
  110. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +19 -0
  111. package/generator/build/lib/pygen/codegen/templates/pkgutil_init.py.jinja2 +1 -0
  112. package/generator/build/lib/pygen/codegen/templates/request_builder.py.jinja2 +28 -0
  113. package/generator/build/lib/pygen/codegen/templates/request_builders.py.jinja2 +10 -0
  114. package/generator/build/lib/pygen/codegen/templates/rest_init.py.jinja2 +12 -0
  115. package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +44 -0
  116. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +2117 -0
  117. package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +50 -0
  118. package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +26 -0
  119. package/generator/build/lib/pygen/codegen/templates/types.py.jinja2 +7 -0
  120. package/generator/build/lib/pygen/codegen/templates/validation.py.jinja2 +38 -0
  121. package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +96 -0
  122. package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +4 -0
  123. package/generator/build/lib/pygen/m2r.py +65 -0
  124. package/generator/build/lib/pygen/preprocess/__init__.py +515 -0
  125. package/generator/build/lib/pygen/preprocess/helpers.py +27 -0
  126. package/generator/build/lib/pygen/preprocess/python_mappings.py +226 -0
  127. package/generator/build/lib/pygen/utils.py +163 -0
  128. package/generator/component-detection-pip-report.json +134 -0
  129. package/generator/dev_requirements.txt +0 -1
  130. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  131. package/generator/pygen/m2r.py +1 -1
  132. package/generator/pygen.egg-info/PKG-INFO +7 -4
  133. package/generator/pygen.egg-info/requires.txt +7 -4
  134. package/generator/requirements.txt +5 -10
  135. package/generator/setup.py +7 -4
  136. package/generator/test/azure/requirements.txt +2 -0
  137. package/generator/test/generic_mock_api_tests/unittests/test_m2r.py +10 -0
  138. package/generator/test/unbranded/requirements.txt +2 -0
  139. package/package.json +6 -5
@@ -0,0 +1,348 @@
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, Optional, List, Any, TYPE_CHECKING, Union
7
+
8
+ from .base import BaseModel
9
+ from .base import BaseType
10
+ from .imports import FileImport, ImportType, TypingSection
11
+ from .primitive_types import BinaryType, BinaryIteratorType, ByteArraySchema
12
+ from .dictionary_type import DictionaryType
13
+ from .list_type import ListType
14
+ from .model_type import ModelType
15
+ from .combined_type import CombinedType
16
+
17
+ if TYPE_CHECKING:
18
+ from .code_model import CodeModel
19
+
20
+
21
+ class ResponseHeader(BaseModel):
22
+ def __init__(
23
+ self,
24
+ yaml_data: Dict[str, Any],
25
+ code_model: "CodeModel",
26
+ type: BaseType,
27
+ ) -> None:
28
+ super().__init__(yaml_data, code_model)
29
+ self.wire_name: str = yaml_data["wireName"]
30
+ self.type = type
31
+
32
+ @property
33
+ def serialization_type(self) -> str:
34
+ return self.type.serialization_type
35
+
36
+ @classmethod
37
+ def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel") -> "ResponseHeader":
38
+ from . import build_type
39
+
40
+ return cls(
41
+ yaml_data=yaml_data,
42
+ code_model=code_model,
43
+ type=build_type(yaml_data["type"], code_model),
44
+ )
45
+
46
+
47
+ class Response(BaseModel):
48
+ def __init__(
49
+ self,
50
+ yaml_data: Dict[str, Any],
51
+ code_model: "CodeModel",
52
+ *,
53
+ headers: Optional[List[ResponseHeader]] = None,
54
+ type: Optional[BaseType] = None,
55
+ ) -> None:
56
+ super().__init__(yaml_data=yaml_data, code_model=code_model)
57
+ self.status_codes: List[Union[int, str, List[int]]] = yaml_data["statusCodes"]
58
+ self.headers = headers or []
59
+ self.type = type
60
+ self.nullable = yaml_data.get("nullable")
61
+ self.default_content_type = yaml_data.get("defaultContentType")
62
+
63
+ @property
64
+ def result_property(self) -> str:
65
+ field = self.yaml_data.get("resultProperty")
66
+ if field:
67
+ return f'.get("{field}")'
68
+ return ""
69
+
70
+ def get_polymorphic_subtypes(self, polymorphic_subtypes: List["ModelType"]) -> None:
71
+ if self.type:
72
+ self.type.get_polymorphic_subtypes(polymorphic_subtypes)
73
+
74
+ def get_json_template_representation(self) -> Any:
75
+ if not self.type:
76
+ return None
77
+ if not isinstance(self.type, (DictionaryType, ListType, ModelType)):
78
+ return None
79
+ return self.type.get_json_template_representation()
80
+
81
+ @property
82
+ def is_stream_response(self) -> bool:
83
+ """Is the response expected to be streamable, like a download."""
84
+ retval = isinstance(self.type, BinaryIteratorType) or (
85
+ isinstance(self.type, ByteArraySchema)
86
+ and bool(self.default_content_type)
87
+ and self.default_content_type != "application/json"
88
+ )
89
+ return retval
90
+
91
+ @property
92
+ def serialization_type(self) -> str:
93
+ if self.type:
94
+ return self.type.serialization_type
95
+ return "None"
96
+
97
+ def type_annotation(self, **kwargs: Any) -> str:
98
+ if self.type:
99
+ kwargs["is_operation_file"] = True
100
+ type_annotation = self.type.type_annotation(**kwargs)
101
+ if self.nullable:
102
+ return f"Optional[{type_annotation}]"
103
+ return type_annotation
104
+ return "None"
105
+
106
+ def docstring_text(self, **kwargs: Any) -> str:
107
+ if self.nullable and self.type:
108
+ return f"{self.type.docstring_text(**kwargs)} or None"
109
+ return self.type.docstring_text(**kwargs) if self.type else "None"
110
+
111
+ def docstring_type(self, **kwargs: Any) -> str:
112
+ if self.nullable and self.type:
113
+ return f"{self.type.docstring_type(**kwargs)} or None"
114
+ return self.type.docstring_type(**kwargs) if self.type else "None"
115
+
116
+ def _imports_shared(self, **kwargs: Any) -> FileImport:
117
+ file_import = FileImport(self.code_model)
118
+ if self.type:
119
+ file_import.merge(self.type.imports(**kwargs))
120
+ if self.nullable:
121
+ file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB)
122
+ if isinstance(self.type, CombinedType) and self.type.name:
123
+ async_mode = kwargs.get("async_mode", False)
124
+ file_import.add_submodule_import(
125
+ "..." if async_mode else "..",
126
+ "_types",
127
+ ImportType.LOCAL,
128
+ TypingSection.TYPING,
129
+ )
130
+ return file_import
131
+
132
+ def imports(self, **kwargs: Any) -> FileImport:
133
+ return self._imports_shared(**kwargs)
134
+
135
+ def imports_for_multiapi(self, **kwargs: Any) -> FileImport:
136
+ return self._imports_shared(**kwargs)
137
+
138
+ def _get_import_type(self, input_path: str) -> ImportType:
139
+ # helper function to return imports for responses based off
140
+ # of whether we're importing from the core library, or users
141
+ # are customizing responses
142
+ return ImportType.SDKCORE if self.code_model.core_library.split(".")[0] in input_path else ImportType.THIRDPARTY
143
+
144
+ @classmethod
145
+ def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel") -> "Response":
146
+ type = code_model.lookup_type(id(yaml_data["type"])) if yaml_data.get("type") else None
147
+ # use ByteIteratorType if we are returning a binary type
148
+ default_content_type = yaml_data.get("defaultContentType", "application/json")
149
+ if isinstance(type, BinaryType) or (
150
+ isinstance(type, ByteArraySchema) and default_content_type != "application/json"
151
+ ):
152
+ type = BinaryIteratorType(type.yaml_data, type.code_model)
153
+ return cls(
154
+ yaml_data=yaml_data,
155
+ code_model=code_model,
156
+ headers=[ResponseHeader.from_yaml(header, code_model) for header in yaml_data["headers"]],
157
+ type=type,
158
+ )
159
+
160
+ def __repr__(self) -> str:
161
+ return f"<{self.__class__.__name__} {self.status_codes}>"
162
+
163
+
164
+ class PagingResponse(Response):
165
+ def __init__(self, *args, **kwargs) -> None:
166
+ super().__init__(*args, **kwargs)
167
+ self.item_type = self.code_model.lookup_type(id(self.yaml_data["itemType"]))
168
+ self.pager_sync: str = self.yaml_data.get("pagerSync") or f"{self.code_model.core_library}.paging.ItemPaged"
169
+ default_paging_submodule = f"{'async_' if self.code_model.is_azure_flavor else ''}paging"
170
+ self.pager_async: str = (
171
+ self.yaml_data.get("pagerAsync")
172
+ or f"{self.code_model.core_library}.{default_paging_submodule}.AsyncItemPaged"
173
+ )
174
+
175
+ def get_polymorphic_subtypes(self, polymorphic_subtypes: List["ModelType"]) -> None:
176
+ return self.item_type.get_polymorphic_subtypes(polymorphic_subtypes)
177
+
178
+ def get_json_template_representation(self) -> Any:
179
+ return self.item_type.get_json_template_representation()
180
+
181
+ def get_pager_import_path(self, async_mode: bool) -> str:
182
+ return ".".join(self.get_pager_path(async_mode).split(".")[:-1])
183
+
184
+ def get_pager_path(self, async_mode: bool) -> str:
185
+ return self.pager_async if async_mode else self.pager_sync
186
+
187
+ def get_pager(self, async_mode: bool) -> str:
188
+ return self.get_pager_path(async_mode).split(".")[-1]
189
+
190
+ def type_annotation(self, **kwargs: Any) -> str:
191
+ iterable = "AsyncIterable" if kwargs["async_mode"] else "Iterable"
192
+ return f"{iterable}[{self.item_type.type_annotation(**kwargs)}]"
193
+
194
+ def docstring_text(self, **kwargs: Any) -> str:
195
+ base_description = "An iterator like instance of "
196
+ if not self.code_model.options["version_tolerant"]:
197
+ base_description += "either "
198
+ return base_description + self.item_type.docstring_text(**kwargs)
199
+
200
+ def docstring_type(self, **kwargs: Any) -> str:
201
+ return f"~{self.get_pager_path(kwargs['async_mode'])}[{self.item_type.docstring_type(**kwargs)}]"
202
+
203
+ def _imports_shared(self, **kwargs: Any) -> FileImport:
204
+ file_import = super()._imports_shared(**kwargs)
205
+ async_mode = kwargs.get("async_mode", False)
206
+ pager = self.get_pager(async_mode)
207
+ pager_path = self.get_pager_import_path(async_mode)
208
+
209
+ file_import.add_submodule_import(pager_path, pager, self._get_import_type(pager_path))
210
+ return file_import
211
+
212
+ def imports(self, **kwargs: Any) -> FileImport:
213
+ file_import = self._imports_shared(**kwargs)
214
+ async_mode = kwargs.get("async_mode")
215
+ if async_mode:
216
+ file_import.add_submodule_import(
217
+ f"{'async_' if self.code_model.is_azure_flavor else ''}paging",
218
+ "AsyncList",
219
+ ImportType.SDKCORE,
220
+ )
221
+
222
+ return file_import
223
+
224
+ def imports_for_multiapi(self, **kwargs: Any) -> FileImport:
225
+ return self._imports_shared(**kwargs)
226
+
227
+
228
+ class LROResponse(Response):
229
+ def get_poller_path(self, async_mode: bool) -> str:
230
+ return self.yaml_data["pollerAsync"] if async_mode else self.yaml_data["pollerSync"]
231
+
232
+ def get_poller(self, async_mode: bool) -> str:
233
+ """Get the name of the poller. Default is LROPoller / AsyncLROPoller"""
234
+ return self.get_poller_path(async_mode).split(".")[-1]
235
+
236
+ def get_polling_method_path(self, async_mode: bool) -> str:
237
+ """Get the full name of the poller path. Default are the azure core pollers"""
238
+ return self.yaml_data["pollingMethodAsync"] if async_mode else self.yaml_data["pollingMethodSync"]
239
+
240
+ def get_polling_method(self, async_mode: bool) -> str:
241
+ """Get the default pollint method"""
242
+ return self.get_polling_method_path(async_mode).split(".")[-1]
243
+
244
+ @staticmethod
245
+ def get_no_polling_method_path(async_mode: bool) -> str:
246
+ """Get the path of the default of no polling method"""
247
+ return f"azure.core.polling.{'Async' if async_mode else ''}NoPolling"
248
+
249
+ def get_no_polling_method(self, async_mode: bool) -> str:
250
+ """Get the default no polling method"""
251
+ return self.get_no_polling_method_path(async_mode).split(".")[-1]
252
+
253
+ @staticmethod
254
+ def get_base_polling_method_path(async_mode: bool) -> str:
255
+ """Get the base polling method path. Used in docstrings and type annotations."""
256
+ return f"azure.core.polling.{'Async' if async_mode else ''}PollingMethod"
257
+
258
+ def get_base_polling_method(self, async_mode: bool) -> str:
259
+ """Get the base polling method."""
260
+ return self.get_base_polling_method_path(async_mode).split(".")[-1]
261
+
262
+ def type_annotation(self, **kwargs: Any) -> str:
263
+ return f"{self.get_poller(kwargs.get('async_mode', False))}[{super().type_annotation(**kwargs)}]"
264
+
265
+ def docstring_type(self, **kwargs: Any) -> str:
266
+ return f"~{self.get_poller_path(kwargs.get('async_mode', False))}[{super().docstring_type(**kwargs)}]"
267
+
268
+ def docstring_text(self, **kwargs) -> str:
269
+ super_text = super().docstring_text(**kwargs)
270
+ base_description = f"An instance of {self.get_poller(kwargs.get('async_mode', False))} that returns "
271
+ if not self.code_model.options["version_tolerant"]:
272
+ base_description += "either "
273
+ return base_description + super_text
274
+
275
+ def _imports_shared(self, **kwargs: Any) -> FileImport:
276
+ file_import = super()._imports_shared(**kwargs)
277
+ async_mode = kwargs["async_mode"]
278
+ poller_import_path = ".".join(self.get_poller_path(async_mode).split(".")[:-1])
279
+ poller = self.get_poller(async_mode)
280
+ file_import.add_submodule_import(poller_import_path, poller, self._get_import_type(poller_import_path))
281
+ return file_import
282
+
283
+ def imports(self, **kwargs: Any) -> FileImport:
284
+ file_import = self._imports_shared(**kwargs)
285
+ async_mode = kwargs["async_mode"]
286
+
287
+ default_polling_method_import_path = ".".join(self.get_polling_method_path(async_mode).split(".")[:-1])
288
+ default_polling_method = self.get_polling_method(async_mode)
289
+ file_import.add_submodule_import(
290
+ default_polling_method_import_path,
291
+ default_polling_method,
292
+ self._get_import_type(default_polling_method_import_path),
293
+ )
294
+ default_no_polling_method_import_path = ".".join(self.get_no_polling_method_path(async_mode).split(".")[:-1])
295
+ default_no_polling_method = self.get_no_polling_method(async_mode)
296
+ file_import.add_submodule_import(
297
+ default_no_polling_method_import_path,
298
+ default_no_polling_method,
299
+ self._get_import_type(default_no_polling_method_import_path),
300
+ )
301
+
302
+ base_polling_method_import_path = ".".join(self.get_base_polling_method_path(async_mode).split(".")[:-1])
303
+ base_polling_method = self.get_base_polling_method(async_mode)
304
+ file_import.add_submodule_import(
305
+ base_polling_method_import_path,
306
+ base_polling_method,
307
+ self._get_import_type(base_polling_method_import_path),
308
+ )
309
+ return file_import
310
+
311
+ def imports_for_multiapi(self, **kwargs: Any) -> FileImport:
312
+ return self._imports_shared(**kwargs)
313
+
314
+
315
+ class LROPagingResponse(LROResponse, PagingResponse):
316
+ def type_annotation(self, **kwargs: Any) -> str:
317
+ paging_type_annotation = PagingResponse.type_annotation(self, **kwargs)
318
+ return f"{self.get_poller(kwargs.get('async_mode', False))}[{paging_type_annotation}]"
319
+
320
+ def docstring_type(self, **kwargs: Any) -> str:
321
+ paging_docstring_type = PagingResponse.docstring_type(self, **kwargs)
322
+ return f"~{self.get_poller_path(kwargs.get('async_mode', False))}[{paging_docstring_type}]"
323
+
324
+ def docstring_text(self, **kwargs) -> str:
325
+ base_description = "An instance of LROPoller that returns an iterator like instance of "
326
+ if not self.code_model.options["version_tolerant"]:
327
+ base_description += "either "
328
+ return base_description + Response.docstring_text(self)
329
+
330
+ def imports_for_multiapi(self, **kwargs: Any) -> FileImport:
331
+ file_import = LROResponse.imports_for_multiapi(self, **kwargs)
332
+ file_import.merge(PagingResponse.imports_for_multiapi(self, **kwargs))
333
+ return file_import
334
+
335
+ def imports(self, **kwargs: Any) -> FileImport:
336
+ file_import = LROResponse.imports(self, **kwargs)
337
+ file_import.merge(PagingResponse.imports(self, **kwargs))
338
+ return file_import
339
+
340
+
341
+ def get_response(yaml_data: Dict[str, Any], code_model: "CodeModel") -> Response:
342
+ if yaml_data["discriminator"] == "lropaging":
343
+ return LROPagingResponse.from_yaml(yaml_data, code_model)
344
+ if yaml_data["discriminator"] == "lro":
345
+ return LROResponse.from_yaml(yaml_data, code_model)
346
+ if yaml_data["discriminator"] == "paging":
347
+ return PagingResponse.from_yaml(yaml_data, code_model)
348
+ return Response.from_yaml(yaml_data, code_model)
@@ -0,0 +1,21 @@
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 TypeVar, Dict
7
+
8
+ T = TypeVar("T")
9
+ OrderedSet = Dict[T, None]
10
+
11
+
12
+ def add_to_description(description: str, entry: str) -> str:
13
+ if description:
14
+ return f"{description} {entry}"
15
+ return entry
16
+
17
+
18
+ def add_to_pylint_disable(curr_str: str, entry: str) -> str:
19
+ if curr_str:
20
+ return f"{curr_str},{entry}"
21
+ return f" # pylint: disable={entry}"