huaweicloudsdkvas 3.1.160__py3-none-any.whl

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 (50) hide show
  1. huaweicloudsdkvas/__init__.py +0 -0
  2. huaweicloudsdkvas/v2/__init__.py +46 -0
  3. huaweicloudsdkvas/v2/model/__init__.py +43 -0
  4. huaweicloudsdkvas/v2/model/create_response_body.py +114 -0
  5. huaweicloudsdkvas/v2/model/create_tasks_request.py +139 -0
  6. huaweicloudsdkvas/v2/model/create_tasks_request_body.py +327 -0
  7. huaweicloudsdkvas/v2/model/create_tasks_response.py +112 -0
  8. huaweicloudsdkvas/v2/model/delete_task_request.py +142 -0
  9. huaweicloudsdkvas/v2/model/delete_task_response.py +85 -0
  10. huaweicloudsdkvas/v2/model/list_tasks_details_request.py +375 -0
  11. huaweicloudsdkvas/v2/model/list_tasks_details_response.py +145 -0
  12. huaweicloudsdkvas/v2/model/show_task_request.py +142 -0
  13. huaweicloudsdkvas/v2/model/show_task_response.py +656 -0
  14. huaweicloudsdkvas/v2/model/start_task_request.py +142 -0
  15. huaweicloudsdkvas/v2/model/start_task_response.py +85 -0
  16. huaweicloudsdkvas/v2/model/stop_task_request.py +142 -0
  17. huaweicloudsdkvas/v2/model/stop_task_response.py +85 -0
  18. huaweicloudsdkvas/v2/model/task_details.py +630 -0
  19. huaweicloudsdkvas/v2/model/task_details_error.py +142 -0
  20. huaweicloudsdkvas/v2/model/task_details_service_title.py +144 -0
  21. huaweicloudsdkvas/v2/model/task_hosting_result.py +111 -0
  22. huaweicloudsdkvas/v2/model/task_hosting_result_hosting_result.py +202 -0
  23. huaweicloudsdkvas/v2/model/task_input.py +167 -0
  24. huaweicloudsdkvas/v2/model/task_input_data.py +405 -0
  25. huaweicloudsdkvas/v2/model/task_input_vcn.py +198 -0
  26. huaweicloudsdkvas/v2/model/task_output.py +211 -0
  27. huaweicloudsdkvas/v2/model/task_output_dis.py +143 -0
  28. huaweicloudsdkvas/v2/model/task_output_for_display.py +211 -0
  29. huaweicloudsdkvas/v2/model/task_output_hosting.py +115 -0
  30. huaweicloudsdkvas/v2/model/task_output_hosting_for_display.py +173 -0
  31. huaweicloudsdkvas/v2/model/task_output_hosting_for_display_obs.py +144 -0
  32. huaweicloudsdkvas/v2/model/task_output_localpath.py +143 -0
  33. huaweicloudsdkvas/v2/model/task_output_obs.py +171 -0
  34. huaweicloudsdkvas/v2/model/task_output_webhook.py +171 -0
  35. huaweicloudsdkvas/v2/model/task_service_config.py +115 -0
  36. huaweicloudsdkvas/v2/model/task_timing.py +283 -0
  37. huaweicloudsdkvas/v2/model/task_timing_frequency.py +200 -0
  38. huaweicloudsdkvas/v2/model/task_timing_periods.py +144 -0
  39. huaweicloudsdkvas/v2/model/update_task_request.py +167 -0
  40. huaweicloudsdkvas/v2/model/update_task_request_body.py +244 -0
  41. huaweicloudsdkvas/v2/model/update_task_response.py +631 -0
  42. huaweicloudsdkvas/v2/region/__init__.py +0 -0
  43. huaweicloudsdkvas/v2/region/vas_region.py +52 -0
  44. huaweicloudsdkvas/v2/vas_async_client.py +570 -0
  45. huaweicloudsdkvas/v2/vas_client.py +567 -0
  46. huaweicloudsdkvas-3.1.160.dist-info/LICENSE +13 -0
  47. huaweicloudsdkvas-3.1.160.dist-info/METADATA +26 -0
  48. huaweicloudsdkvas-3.1.160.dist-info/RECORD +50 -0
  49. huaweicloudsdkvas-3.1.160.dist-info/WHEEL +5 -0
  50. huaweicloudsdkvas-3.1.160.dist-info/top_level.txt +1 -0
@@ -0,0 +1,570 @@
1
+ # coding: utf-8
2
+
3
+ from __future__ import absolute_import
4
+
5
+ import importlib
6
+ import warnings
7
+
8
+ from huaweicloudsdkcore.client import Client, ClientBuilder
9
+ from huaweicloudsdkcore.utils import http_utils
10
+ from huaweicloudsdkcore.sdk_stream_request import SdkStreamRequest
11
+
12
+ try:
13
+ from huaweicloudsdkcore.invoker.invoker import AsyncInvoker
14
+ except ImportError as e:
15
+ warnings.warn(str(e) + ", please check if you are using the same versions of 'huaweicloudsdkcore' and 'huaweicloudsdkvas'")
16
+
17
+
18
+ class VasAsyncClient(Client):
19
+ def __init__(self):
20
+ super(VasAsyncClient, self).__init__()
21
+ self.model_package = importlib.import_module("huaweicloudsdkvas.v2.model")
22
+
23
+ @classmethod
24
+ def new_builder(cls, clazz=None):
25
+ if not clazz:
26
+ client_builder = ClientBuilder(cls)
27
+ else:
28
+ if clazz.__name__ != "VasAsyncClient":
29
+ raise TypeError("client type error, support client type is VasAsyncClient")
30
+ client_builder = ClientBuilder(clazz)
31
+
32
+
33
+
34
+ return client_builder
35
+
36
+ def create_tasks_async(self, request):
37
+ r"""创建服务作业
38
+
39
+ 该接口用于创建服务作业
40
+
41
+ Please refer to HUAWEI cloud API Explorer for details.
42
+
43
+
44
+ :param request: Request instance for CreateTasks
45
+ :type request: :class:`huaweicloudsdkvas.v2.CreateTasksRequest`
46
+ :rtype: :class:`huaweicloudsdkvas.v2.CreateTasksResponse`
47
+ """
48
+ http_info = self._create_tasks_http_info(request)
49
+ return self._call_api(**http_info)
50
+
51
+ def create_tasks_async_invoker(self, request):
52
+ http_info = self._create_tasks_http_info(request)
53
+ return AsyncInvoker(self, http_info)
54
+
55
+ def _create_tasks_http_info(self, request):
56
+ http_info = {
57
+ "method": "POST",
58
+ "resource_path": "/v2/{project_id}/services/{service_name}/tasks",
59
+ "request_type": request.__class__.__name__,
60
+ "response_type": "CreateTasksResponse"
61
+ }
62
+
63
+ local_var_params = {attr: getattr(request, attr) for attr in request.attribute_map if hasattr(request, attr)}
64
+
65
+ cname = None
66
+
67
+ collection_formats = {}
68
+
69
+ path_params = {}
70
+ if 'service_name' in local_var_params:
71
+ path_params['service_name'] = local_var_params['service_name']
72
+
73
+ query_params = []
74
+
75
+ header_params = {}
76
+
77
+ form_params = {}
78
+
79
+ body = None
80
+ if 'body' in local_var_params:
81
+ body = local_var_params['body']
82
+ if isinstance(request, SdkStreamRequest):
83
+ body = request.get_file_stream()
84
+
85
+ response_headers = []
86
+
87
+ header_params['Content-Type'] = http_utils.select_header_content_type(
88
+ ['application/json'])
89
+
90
+ auth_settings = []
91
+
92
+ http_info["cname"] = cname
93
+ http_info["collection_formats"] = collection_formats
94
+ http_info["path_params"] = path_params
95
+ http_info["query_params"] = query_params
96
+ http_info["header_params"] = header_params
97
+ http_info["post_params"] = form_params
98
+ http_info["body"] = body
99
+ http_info["response_headers"] = response_headers
100
+
101
+ return http_info
102
+
103
+ def delete_task_async(self, request):
104
+ r"""删除服务作业
105
+
106
+ 该接口用于删除服务作业
107
+
108
+ Please refer to HUAWEI cloud API Explorer for details.
109
+
110
+
111
+ :param request: Request instance for DeleteTask
112
+ :type request: :class:`huaweicloudsdkvas.v2.DeleteTaskRequest`
113
+ :rtype: :class:`huaweicloudsdkvas.v2.DeleteTaskResponse`
114
+ """
115
+ http_info = self._delete_task_http_info(request)
116
+ return self._call_api(**http_info)
117
+
118
+ def delete_task_async_invoker(self, request):
119
+ http_info = self._delete_task_http_info(request)
120
+ return AsyncInvoker(self, http_info)
121
+
122
+ def _delete_task_http_info(self, request):
123
+ http_info = {
124
+ "method": "DELETE",
125
+ "resource_path": "/v2/{project_id}/services/{service_name}/tasks/{task_id}",
126
+ "request_type": request.__class__.__name__,
127
+ "response_type": "DeleteTaskResponse"
128
+ }
129
+
130
+ local_var_params = {attr: getattr(request, attr) for attr in request.attribute_map if hasattr(request, attr)}
131
+
132
+ cname = None
133
+
134
+ collection_formats = {}
135
+
136
+ path_params = {}
137
+ if 'service_name' in local_var_params:
138
+ path_params['service_name'] = local_var_params['service_name']
139
+ if 'task_id' in local_var_params:
140
+ path_params['task_id'] = local_var_params['task_id']
141
+
142
+ query_params = []
143
+
144
+ header_params = {}
145
+
146
+ form_params = {}
147
+
148
+ body = None
149
+ if isinstance(request, SdkStreamRequest):
150
+ body = request.get_file_stream()
151
+
152
+ response_headers = []
153
+
154
+ header_params['Content-Type'] = http_utils.select_header_content_type(
155
+ ['application/json'])
156
+
157
+ auth_settings = []
158
+
159
+ http_info["cname"] = cname
160
+ http_info["collection_formats"] = collection_formats
161
+ http_info["path_params"] = path_params
162
+ http_info["query_params"] = query_params
163
+ http_info["header_params"] = header_params
164
+ http_info["post_params"] = form_params
165
+ http_info["body"] = body
166
+ http_info["response_headers"] = response_headers
167
+
168
+ return http_info
169
+
170
+ def list_tasks_details_async(self, request):
171
+ r"""获取服务作业列表
172
+
173
+ 该接口用于获取服务作业列表
174
+
175
+ Please refer to HUAWEI cloud API Explorer for details.
176
+
177
+
178
+ :param request: Request instance for ListTasksDetails
179
+ :type request: :class:`huaweicloudsdkvas.v2.ListTasksDetailsRequest`
180
+ :rtype: :class:`huaweicloudsdkvas.v2.ListTasksDetailsResponse`
181
+ """
182
+ http_info = self._list_tasks_details_http_info(request)
183
+ return self._call_api(**http_info)
184
+
185
+ def list_tasks_details_async_invoker(self, request):
186
+ http_info = self._list_tasks_details_http_info(request)
187
+ return AsyncInvoker(self, http_info)
188
+
189
+ def _list_tasks_details_http_info(self, request):
190
+ http_info = {
191
+ "method": "GET",
192
+ "resource_path": "/v2/{project_id}/services/{service_name}/tasks",
193
+ "request_type": request.__class__.__name__,
194
+ "response_type": "ListTasksDetailsResponse"
195
+ }
196
+
197
+ local_var_params = {attr: getattr(request, attr) for attr in request.attribute_map if hasattr(request, attr)}
198
+
199
+ cname = None
200
+
201
+ collection_formats = {}
202
+
203
+ path_params = {}
204
+ if 'service_name' in local_var_params:
205
+ path_params['service_name'] = local_var_params['service_name']
206
+
207
+ query_params = []
208
+ if 'service_version' in local_var_params:
209
+ query_params.append(('service_version', local_var_params['service_version']))
210
+ if 'state' in local_var_params:
211
+ query_params.append(('state', local_var_params['state']))
212
+ if 'name_like' in local_var_params:
213
+ query_params.append(('name_like', local_var_params['name_like']))
214
+ if 'id_like' in local_var_params:
215
+ query_params.append(('id_like', local_var_params['id_like']))
216
+ if 'created_since' in local_var_params:
217
+ query_params.append(('created_since', local_var_params['created_since']))
218
+ if 'created_until' in local_var_params:
219
+ query_params.append(('created_until', local_var_params['created_until']))
220
+ if 'order' in local_var_params:
221
+ query_params.append(('order', local_var_params['order']))
222
+ if 'offset' in local_var_params:
223
+ query_params.append(('offset', local_var_params['offset']))
224
+ if 'limit' in local_var_params:
225
+ query_params.append(('limit', local_var_params['limit']))
226
+
227
+ header_params = {}
228
+
229
+ form_params = {}
230
+
231
+ body = None
232
+ if isinstance(request, SdkStreamRequest):
233
+ body = request.get_file_stream()
234
+
235
+ response_headers = []
236
+
237
+ header_params['Content-Type'] = http_utils.select_header_content_type(
238
+ ['application/json'])
239
+
240
+ auth_settings = []
241
+
242
+ http_info["cname"] = cname
243
+ http_info["collection_formats"] = collection_formats
244
+ http_info["path_params"] = path_params
245
+ http_info["query_params"] = query_params
246
+ http_info["header_params"] = header_params
247
+ http_info["post_params"] = form_params
248
+ http_info["body"] = body
249
+ http_info["response_headers"] = response_headers
250
+
251
+ return http_info
252
+
253
+ def show_task_async(self, request):
254
+ r"""查询服务作业
255
+
256
+ 该接口用于查询服务作业
257
+
258
+ Please refer to HUAWEI cloud API Explorer for details.
259
+
260
+
261
+ :param request: Request instance for ShowTask
262
+ :type request: :class:`huaweicloudsdkvas.v2.ShowTaskRequest`
263
+ :rtype: :class:`huaweicloudsdkvas.v2.ShowTaskResponse`
264
+ """
265
+ http_info = self._show_task_http_info(request)
266
+ return self._call_api(**http_info)
267
+
268
+ def show_task_async_invoker(self, request):
269
+ http_info = self._show_task_http_info(request)
270
+ return AsyncInvoker(self, http_info)
271
+
272
+ def _show_task_http_info(self, request):
273
+ http_info = {
274
+ "method": "GET",
275
+ "resource_path": "/v2/{project_id}/services/{service_name}/tasks/{task_id}",
276
+ "request_type": request.__class__.__name__,
277
+ "response_type": "ShowTaskResponse"
278
+ }
279
+
280
+ local_var_params = {attr: getattr(request, attr) for attr in request.attribute_map if hasattr(request, attr)}
281
+
282
+ cname = None
283
+
284
+ collection_formats = {}
285
+
286
+ path_params = {}
287
+ if 'service_name' in local_var_params:
288
+ path_params['service_name'] = local_var_params['service_name']
289
+ if 'task_id' in local_var_params:
290
+ path_params['task_id'] = local_var_params['task_id']
291
+
292
+ query_params = []
293
+
294
+ header_params = {}
295
+
296
+ form_params = {}
297
+
298
+ body = None
299
+ if isinstance(request, SdkStreamRequest):
300
+ body = request.get_file_stream()
301
+
302
+ response_headers = []
303
+
304
+ header_params['Content-Type'] = http_utils.select_header_content_type(
305
+ ['application/json'])
306
+
307
+ auth_settings = []
308
+
309
+ http_info["cname"] = cname
310
+ http_info["collection_formats"] = collection_formats
311
+ http_info["path_params"] = path_params
312
+ http_info["query_params"] = query_params
313
+ http_info["header_params"] = header_params
314
+ http_info["post_params"] = form_params
315
+ http_info["body"] = body
316
+ http_info["response_headers"] = response_headers
317
+
318
+ return http_info
319
+
320
+ def start_task_async(self, request):
321
+ r"""启动服务作业
322
+
323
+ 该接口用于启动服务作业
324
+
325
+ Please refer to HUAWEI cloud API Explorer for details.
326
+
327
+
328
+ :param request: Request instance for StartTask
329
+ :type request: :class:`huaweicloudsdkvas.v2.StartTaskRequest`
330
+ :rtype: :class:`huaweicloudsdkvas.v2.StartTaskResponse`
331
+ """
332
+ http_info = self._start_task_http_info(request)
333
+ return self._call_api(**http_info)
334
+
335
+ def start_task_async_invoker(self, request):
336
+ http_info = self._start_task_http_info(request)
337
+ return AsyncInvoker(self, http_info)
338
+
339
+ def _start_task_http_info(self, request):
340
+ http_info = {
341
+ "method": "POST",
342
+ "resource_path": "/v2/{project_id}/services/{service_name}/tasks/{task_id}/start",
343
+ "request_type": request.__class__.__name__,
344
+ "response_type": "StartTaskResponse"
345
+ }
346
+
347
+ local_var_params = {attr: getattr(request, attr) for attr in request.attribute_map if hasattr(request, attr)}
348
+
349
+ cname = None
350
+
351
+ collection_formats = {}
352
+
353
+ path_params = {}
354
+ if 'service_name' in local_var_params:
355
+ path_params['service_name'] = local_var_params['service_name']
356
+ if 'task_id' in local_var_params:
357
+ path_params['task_id'] = local_var_params['task_id']
358
+
359
+ query_params = []
360
+
361
+ header_params = {}
362
+
363
+ form_params = {}
364
+
365
+ body = None
366
+ if isinstance(request, SdkStreamRequest):
367
+ body = request.get_file_stream()
368
+
369
+ response_headers = []
370
+
371
+ header_params['Content-Type'] = http_utils.select_header_content_type(
372
+ ['application/json'])
373
+
374
+ auth_settings = []
375
+
376
+ http_info["cname"] = cname
377
+ http_info["collection_formats"] = collection_formats
378
+ http_info["path_params"] = path_params
379
+ http_info["query_params"] = query_params
380
+ http_info["header_params"] = header_params
381
+ http_info["post_params"] = form_params
382
+ http_info["body"] = body
383
+ http_info["response_headers"] = response_headers
384
+
385
+ return http_info
386
+
387
+ def stop_task_async(self, request):
388
+ r"""停止服务作业
389
+
390
+ 该接口用于停止服务作业
391
+
392
+ Please refer to HUAWEI cloud API Explorer for details.
393
+
394
+
395
+ :param request: Request instance for StopTask
396
+ :type request: :class:`huaweicloudsdkvas.v2.StopTaskRequest`
397
+ :rtype: :class:`huaweicloudsdkvas.v2.StopTaskResponse`
398
+ """
399
+ http_info = self._stop_task_http_info(request)
400
+ return self._call_api(**http_info)
401
+
402
+ def stop_task_async_invoker(self, request):
403
+ http_info = self._stop_task_http_info(request)
404
+ return AsyncInvoker(self, http_info)
405
+
406
+ def _stop_task_http_info(self, request):
407
+ http_info = {
408
+ "method": "POST",
409
+ "resource_path": "/v2/{project_id}/services/{service_name}/tasks/{task_id}/stop",
410
+ "request_type": request.__class__.__name__,
411
+ "response_type": "StopTaskResponse"
412
+ }
413
+
414
+ local_var_params = {attr: getattr(request, attr) for attr in request.attribute_map if hasattr(request, attr)}
415
+
416
+ cname = None
417
+
418
+ collection_formats = {}
419
+
420
+ path_params = {}
421
+ if 'service_name' in local_var_params:
422
+ path_params['service_name'] = local_var_params['service_name']
423
+ if 'task_id' in local_var_params:
424
+ path_params['task_id'] = local_var_params['task_id']
425
+
426
+ query_params = []
427
+
428
+ header_params = {}
429
+
430
+ form_params = {}
431
+
432
+ body = None
433
+ if isinstance(request, SdkStreamRequest):
434
+ body = request.get_file_stream()
435
+
436
+ response_headers = []
437
+
438
+ header_params['Content-Type'] = http_utils.select_header_content_type(
439
+ ['application/json'])
440
+
441
+ auth_settings = []
442
+
443
+ http_info["cname"] = cname
444
+ http_info["collection_formats"] = collection_formats
445
+ http_info["path_params"] = path_params
446
+ http_info["query_params"] = query_params
447
+ http_info["header_params"] = header_params
448
+ http_info["post_params"] = form_params
449
+ http_info["body"] = body
450
+ http_info["response_headers"] = response_headers
451
+
452
+ return http_info
453
+
454
+ def update_task_async(self, request):
455
+ r"""更新服务作业
456
+
457
+ 该接口用于更新服务作业
458
+
459
+ Please refer to HUAWEI cloud API Explorer for details.
460
+
461
+
462
+ :param request: Request instance for UpdateTask
463
+ :type request: :class:`huaweicloudsdkvas.v2.UpdateTaskRequest`
464
+ :rtype: :class:`huaweicloudsdkvas.v2.UpdateTaskResponse`
465
+ """
466
+ http_info = self._update_task_http_info(request)
467
+ return self._call_api(**http_info)
468
+
469
+ def update_task_async_invoker(self, request):
470
+ http_info = self._update_task_http_info(request)
471
+ return AsyncInvoker(self, http_info)
472
+
473
+ def _update_task_http_info(self, request):
474
+ http_info = {
475
+ "method": "PUT",
476
+ "resource_path": "/v2/{project_id}/services/{service_name}/tasks/{task_id}",
477
+ "request_type": request.__class__.__name__,
478
+ "response_type": "UpdateTaskResponse"
479
+ }
480
+
481
+ local_var_params = {attr: getattr(request, attr) for attr in request.attribute_map if hasattr(request, attr)}
482
+
483
+ cname = None
484
+
485
+ collection_formats = {}
486
+
487
+ path_params = {}
488
+ if 'service_name' in local_var_params:
489
+ path_params['service_name'] = local_var_params['service_name']
490
+ if 'task_id' in local_var_params:
491
+ path_params['task_id'] = local_var_params['task_id']
492
+
493
+ query_params = []
494
+
495
+ header_params = {}
496
+
497
+ form_params = {}
498
+
499
+ body = None
500
+ if 'body' in local_var_params:
501
+ body = local_var_params['body']
502
+ if isinstance(request, SdkStreamRequest):
503
+ body = request.get_file_stream()
504
+
505
+ response_headers = []
506
+
507
+ header_params['Content-Type'] = http_utils.select_header_content_type(
508
+ ['application/json'])
509
+
510
+ auth_settings = []
511
+
512
+ http_info["cname"] = cname
513
+ http_info["collection_formats"] = collection_formats
514
+ http_info["path_params"] = path_params
515
+ http_info["query_params"] = query_params
516
+ http_info["header_params"] = header_params
517
+ http_info["post_params"] = form_params
518
+ http_info["body"] = body
519
+ http_info["response_headers"] = response_headers
520
+
521
+ return http_info
522
+
523
+ def _call_api(self, **kwargs):
524
+ try:
525
+ kwargs["async_request"] = True
526
+ return self.do_http_request(**kwargs)
527
+ except TypeError:
528
+ import inspect
529
+ params = inspect.signature(self.do_http_request).parameters
530
+ http_info = {param_name: kwargs.get(param_name) for param_name in params if param_name in kwargs}
531
+ return self.do_http_request(**http_info)
532
+
533
+ def call_api(self, resource_path, method, path_params=None, query_params=None, header_params=None, body=None,
534
+ post_params=None, cname=None, response_type=None, response_headers=None, auth_settings=None,
535
+ collection_formats=None, request_type=None):
536
+ """Makes the HTTP request and returns deserialized data.
537
+
538
+ :param resource_path: Path to method endpoint.
539
+ :param method: Method to call.
540
+ :param path_params: Path parameters in the url.
541
+ :param query_params: Query parameters in the url.
542
+ :param header_params: Header parameters to be
543
+ placed in the request header.
544
+ :param body: Request body.
545
+ :param post_params: Request post form parameters,
546
+ for `application/x-www-form-urlencoded`, `multipart/form-data`.
547
+ :param cname: Used for obs endpoint.
548
+ :param auth_settings: Auth Settings names for the request.
549
+ :param response_type: Response data type.
550
+ :param response_headers: Header should be added to response data.
551
+ :param collection_formats: dict of collection formats for path, query,
552
+ header, and post parameters.
553
+ :param request_type: Request data type.
554
+ :return:
555
+ Return the response directly.
556
+ """
557
+ return self.do_http_request(
558
+ method=method,
559
+ resource_path=resource_path,
560
+ path_params=path_params,
561
+ query_params=query_params,
562
+ header_params=header_params,
563
+ body=body,
564
+ post_params=post_params,
565
+ cname=cname,
566
+ response_type=response_type,
567
+ response_headers=response_headers,
568
+ collection_formats=collection_formats,
569
+ request_type=request_type,
570
+ async_request=True)