dtlpy 1.115.44__py3-none-any.whl → 1.117.6__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.
- dtlpy/__init__.py +491 -491
- dtlpy/__version__.py +1 -1
- dtlpy/assets/__init__.py +26 -26
- dtlpy/assets/code_server/config.yaml +2 -2
- dtlpy/assets/code_server/installation.sh +24 -24
- dtlpy/assets/code_server/launch.json +13 -13
- dtlpy/assets/code_server/settings.json +2 -2
- dtlpy/assets/main.py +53 -53
- dtlpy/assets/main_partial.py +18 -18
- dtlpy/assets/mock.json +11 -11
- dtlpy/assets/model_adapter.py +83 -83
- dtlpy/assets/package.json +61 -61
- dtlpy/assets/package_catalog.json +29 -29
- dtlpy/assets/package_gitignore +307 -307
- dtlpy/assets/service_runners/__init__.py +33 -33
- dtlpy/assets/service_runners/converter.py +96 -96
- dtlpy/assets/service_runners/multi_method.py +49 -49
- dtlpy/assets/service_runners/multi_method_annotation.py +54 -54
- dtlpy/assets/service_runners/multi_method_dataset.py +55 -55
- dtlpy/assets/service_runners/multi_method_item.py +52 -52
- dtlpy/assets/service_runners/multi_method_json.py +52 -52
- dtlpy/assets/service_runners/single_method.py +37 -37
- dtlpy/assets/service_runners/single_method_annotation.py +43 -43
- dtlpy/assets/service_runners/single_method_dataset.py +43 -43
- dtlpy/assets/service_runners/single_method_item.py +41 -41
- dtlpy/assets/service_runners/single_method_json.py +42 -42
- dtlpy/assets/service_runners/single_method_multi_input.py +45 -45
- dtlpy/assets/voc_annotation_template.xml +23 -23
- dtlpy/caches/base_cache.py +32 -32
- dtlpy/caches/cache.py +473 -473
- dtlpy/caches/dl_cache.py +201 -201
- dtlpy/caches/filesystem_cache.py +89 -89
- dtlpy/caches/redis_cache.py +84 -84
- dtlpy/dlp/__init__.py +20 -20
- dtlpy/dlp/cli_utilities.py +367 -367
- dtlpy/dlp/command_executor.py +764 -764
- dtlpy/dlp/dlp +1 -1
- dtlpy/dlp/dlp.bat +1 -1
- dtlpy/dlp/dlp.py +128 -128
- dtlpy/dlp/parser.py +651 -651
- dtlpy/entities/__init__.py +83 -83
- dtlpy/entities/analytic.py +347 -347
- dtlpy/entities/annotation.py +1879 -1879
- dtlpy/entities/annotation_collection.py +699 -699
- dtlpy/entities/annotation_definitions/__init__.py +20 -20
- dtlpy/entities/annotation_definitions/base_annotation_definition.py +100 -100
- dtlpy/entities/annotation_definitions/box.py +195 -195
- dtlpy/entities/annotation_definitions/classification.py +67 -67
- dtlpy/entities/annotation_definitions/comparison.py +72 -72
- dtlpy/entities/annotation_definitions/cube.py +204 -204
- dtlpy/entities/annotation_definitions/cube_3d.py +149 -149
- dtlpy/entities/annotation_definitions/description.py +32 -32
- dtlpy/entities/annotation_definitions/ellipse.py +124 -124
- dtlpy/entities/annotation_definitions/free_text.py +62 -62
- dtlpy/entities/annotation_definitions/gis.py +69 -69
- dtlpy/entities/annotation_definitions/note.py +139 -139
- dtlpy/entities/annotation_definitions/point.py +117 -117
- dtlpy/entities/annotation_definitions/polygon.py +182 -182
- dtlpy/entities/annotation_definitions/polyline.py +111 -111
- dtlpy/entities/annotation_definitions/pose.py +92 -92
- dtlpy/entities/annotation_definitions/ref_image.py +86 -86
- dtlpy/entities/annotation_definitions/segmentation.py +240 -240
- dtlpy/entities/annotation_definitions/subtitle.py +34 -34
- dtlpy/entities/annotation_definitions/text.py +85 -85
- dtlpy/entities/annotation_definitions/undefined_annotation.py +74 -74
- dtlpy/entities/app.py +220 -220
- dtlpy/entities/app_module.py +107 -107
- dtlpy/entities/artifact.py +174 -174
- dtlpy/entities/assignment.py +399 -399
- dtlpy/entities/base_entity.py +214 -214
- dtlpy/entities/bot.py +113 -113
- dtlpy/entities/codebase.py +292 -292
- dtlpy/entities/collection.py +38 -38
- dtlpy/entities/command.py +169 -169
- dtlpy/entities/compute.py +449 -449
- dtlpy/entities/dataset.py +1299 -1299
- dtlpy/entities/directory_tree.py +44 -44
- dtlpy/entities/dpk.py +470 -470
- dtlpy/entities/driver.py +235 -235
- dtlpy/entities/execution.py +397 -397
- dtlpy/entities/feature.py +124 -124
- dtlpy/entities/feature_set.py +152 -145
- dtlpy/entities/filters.py +798 -798
- dtlpy/entities/gis_item.py +107 -107
- dtlpy/entities/integration.py +184 -184
- dtlpy/entities/item.py +975 -959
- dtlpy/entities/label.py +123 -123
- dtlpy/entities/links.py +85 -85
- dtlpy/entities/message.py +175 -175
- dtlpy/entities/model.py +684 -684
- dtlpy/entities/node.py +1005 -1005
- dtlpy/entities/ontology.py +810 -803
- dtlpy/entities/organization.py +287 -287
- dtlpy/entities/package.py +657 -657
- dtlpy/entities/package_defaults.py +5 -5
- dtlpy/entities/package_function.py +185 -185
- dtlpy/entities/package_module.py +113 -113
- dtlpy/entities/package_slot.py +118 -118
- dtlpy/entities/paged_entities.py +299 -299
- dtlpy/entities/pipeline.py +624 -624
- dtlpy/entities/pipeline_execution.py +279 -279
- dtlpy/entities/project.py +394 -394
- dtlpy/entities/prompt_item.py +505 -505
- dtlpy/entities/recipe.py +301 -301
- dtlpy/entities/reflect_dict.py +102 -102
- dtlpy/entities/resource_execution.py +138 -138
- dtlpy/entities/service.py +974 -963
- dtlpy/entities/service_driver.py +117 -117
- dtlpy/entities/setting.py +294 -294
- dtlpy/entities/task.py +495 -495
- dtlpy/entities/time_series.py +143 -143
- dtlpy/entities/trigger.py +426 -426
- dtlpy/entities/user.py +118 -118
- dtlpy/entities/webhook.py +124 -124
- dtlpy/examples/__init__.py +19 -19
- dtlpy/examples/add_labels.py +135 -135
- dtlpy/examples/add_metadata_to_item.py +21 -21
- dtlpy/examples/annotate_items_using_model.py +65 -65
- dtlpy/examples/annotate_video_using_model_and_tracker.py +75 -75
- dtlpy/examples/annotations_convert_to_voc.py +9 -9
- dtlpy/examples/annotations_convert_to_yolo.py +9 -9
- dtlpy/examples/convert_annotation_types.py +51 -51
- dtlpy/examples/converter.py +143 -143
- dtlpy/examples/copy_annotations.py +22 -22
- dtlpy/examples/copy_folder.py +31 -31
- dtlpy/examples/create_annotations.py +51 -51
- dtlpy/examples/create_video_annotations.py +83 -83
- dtlpy/examples/delete_annotations.py +26 -26
- dtlpy/examples/filters.py +113 -113
- dtlpy/examples/move_item.py +23 -23
- dtlpy/examples/play_video_annotation.py +13 -13
- dtlpy/examples/show_item_and_mask.py +53 -53
- dtlpy/examples/triggers.py +49 -49
- dtlpy/examples/upload_batch_of_items.py +20 -20
- dtlpy/examples/upload_items_and_custom_format_annotations.py +55 -55
- dtlpy/examples/upload_items_with_modalities.py +43 -43
- dtlpy/examples/upload_segmentation_annotations_from_mask_image.py +44 -44
- dtlpy/examples/upload_yolo_format_annotations.py +70 -70
- dtlpy/exceptions.py +125 -125
- dtlpy/miscellaneous/__init__.py +20 -20
- dtlpy/miscellaneous/dict_differ.py +95 -95
- dtlpy/miscellaneous/git_utils.py +217 -217
- dtlpy/miscellaneous/json_utils.py +14 -14
- dtlpy/miscellaneous/list_print.py +105 -105
- dtlpy/miscellaneous/zipping.py +130 -130
- dtlpy/ml/__init__.py +20 -20
- dtlpy/ml/base_feature_extractor_adapter.py +27 -27
- dtlpy/ml/base_model_adapter.py +1287 -1230
- dtlpy/ml/metrics.py +461 -461
- dtlpy/ml/predictions_utils.py +274 -274
- dtlpy/ml/summary_writer.py +57 -57
- dtlpy/ml/train_utils.py +60 -60
- dtlpy/new_instance.py +252 -252
- dtlpy/repositories/__init__.py +56 -56
- dtlpy/repositories/analytics.py +85 -85
- dtlpy/repositories/annotations.py +916 -916
- dtlpy/repositories/apps.py +383 -383
- dtlpy/repositories/artifacts.py +452 -452
- dtlpy/repositories/assignments.py +599 -599
- dtlpy/repositories/bots.py +213 -213
- dtlpy/repositories/codebases.py +559 -559
- dtlpy/repositories/collections.py +332 -332
- dtlpy/repositories/commands.py +152 -152
- dtlpy/repositories/compositions.py +61 -61
- dtlpy/repositories/computes.py +439 -439
- dtlpy/repositories/datasets.py +1585 -1504
- dtlpy/repositories/downloader.py +1157 -923
- dtlpy/repositories/dpks.py +433 -433
- dtlpy/repositories/drivers.py +482 -482
- dtlpy/repositories/executions.py +815 -815
- dtlpy/repositories/feature_sets.py +256 -226
- dtlpy/repositories/features.py +255 -255
- dtlpy/repositories/integrations.py +484 -484
- dtlpy/repositories/items.py +912 -912
- dtlpy/repositories/messages.py +94 -94
- dtlpy/repositories/models.py +1000 -1000
- dtlpy/repositories/nodes.py +80 -80
- dtlpy/repositories/ontologies.py +511 -511
- dtlpy/repositories/organizations.py +525 -525
- dtlpy/repositories/packages.py +1941 -1941
- dtlpy/repositories/pipeline_executions.py +451 -451
- dtlpy/repositories/pipelines.py +640 -640
- dtlpy/repositories/projects.py +539 -539
- dtlpy/repositories/recipes.py +429 -399
- dtlpy/repositories/resource_executions.py +137 -137
- dtlpy/repositories/schema.py +120 -120
- dtlpy/repositories/service_drivers.py +213 -213
- dtlpy/repositories/services.py +1704 -1704
- dtlpy/repositories/settings.py +339 -339
- dtlpy/repositories/tasks.py +1477 -1477
- dtlpy/repositories/times_series.py +278 -278
- dtlpy/repositories/triggers.py +536 -536
- dtlpy/repositories/upload_element.py +257 -257
- dtlpy/repositories/uploader.py +661 -661
- dtlpy/repositories/webhooks.py +249 -249
- dtlpy/services/__init__.py +22 -22
- dtlpy/services/aihttp_retry.py +131 -131
- dtlpy/services/api_client.py +1786 -1785
- dtlpy/services/api_reference.py +40 -40
- dtlpy/services/async_utils.py +133 -133
- dtlpy/services/calls_counter.py +44 -44
- dtlpy/services/check_sdk.py +68 -68
- dtlpy/services/cookie.py +115 -115
- dtlpy/services/create_logger.py +156 -156
- dtlpy/services/events.py +84 -84
- dtlpy/services/logins.py +235 -235
- dtlpy/services/reporter.py +256 -256
- dtlpy/services/service_defaults.py +91 -91
- dtlpy/utilities/__init__.py +20 -20
- dtlpy/utilities/annotations/__init__.py +16 -16
- dtlpy/utilities/annotations/annotation_converters.py +269 -269
- dtlpy/utilities/base_package_runner.py +285 -264
- dtlpy/utilities/converter.py +1650 -1650
- dtlpy/utilities/dataset_generators/__init__.py +1 -1
- dtlpy/utilities/dataset_generators/dataset_generator.py +670 -670
- dtlpy/utilities/dataset_generators/dataset_generator_tensorflow.py +23 -23
- dtlpy/utilities/dataset_generators/dataset_generator_torch.py +21 -21
- dtlpy/utilities/local_development/__init__.py +1 -1
- dtlpy/utilities/local_development/local_session.py +179 -179
- dtlpy/utilities/reports/__init__.py +2 -2
- dtlpy/utilities/reports/figures.py +343 -343
- dtlpy/utilities/reports/report.py +71 -71
- dtlpy/utilities/videos/__init__.py +17 -17
- dtlpy/utilities/videos/video_player.py +598 -598
- dtlpy/utilities/videos/videos.py +470 -470
- {dtlpy-1.115.44.data → dtlpy-1.117.6.data}/scripts/dlp +1 -1
- dtlpy-1.117.6.data/scripts/dlp.bat +2 -0
- {dtlpy-1.115.44.data → dtlpy-1.117.6.data}/scripts/dlp.py +128 -128
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/METADATA +186 -186
- dtlpy-1.117.6.dist-info/RECORD +239 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/WHEEL +1 -1
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/licenses/LICENSE +200 -200
- tests/features/environment.py +551 -551
- dtlpy/assets/__pycache__/__init__.cpython-310.pyc +0 -0
- dtlpy-1.115.44.data/scripts/dlp.bat +0 -2
- dtlpy-1.115.44.dist-info/RECORD +0 -240
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.117.6.dist-info}/top_level.txt +0 -0
|
@@ -1,213 +1,213 @@
|
|
|
1
|
-
from dtlpy import miscellaneous
|
|
2
|
-
|
|
3
|
-
from ..services.api_client import ApiClient
|
|
4
|
-
from .. import exceptions, entities
|
|
5
|
-
import logging
|
|
6
|
-
|
|
7
|
-
logger = logging.getLogger(name='dtlpy')
|
|
8
|
-
|
|
9
|
-
class ServiceDrivers:
|
|
10
|
-
|
|
11
|
-
def __init__(self, client_api: ApiClient):
|
|
12
|
-
self._client_api = client_api
|
|
13
|
-
self._base_url = '/serviceDrivers'
|
|
14
|
-
|
|
15
|
-
def create(
|
|
16
|
-
self,
|
|
17
|
-
name: str,
|
|
18
|
-
compute_id: str,
|
|
19
|
-
context: entities.ComputeContext,
|
|
20
|
-
namespace: str = None
|
|
21
|
-
):
|
|
22
|
-
"""
|
|
23
|
-
Create a new service driver
|
|
24
|
-
|
|
25
|
-
:param name: Service driver name
|
|
26
|
-
:param compute_id: Compute ID
|
|
27
|
-
:param context: Compute context
|
|
28
|
-
:param namespace: Namespace
|
|
29
|
-
:return: Service driver
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
payload = {
|
|
34
|
-
'name': name,
|
|
35
|
-
'computeId': compute_id,
|
|
36
|
-
'context': context.to_json()
|
|
37
|
-
}
|
|
38
|
-
if namespace is not None:
|
|
39
|
-
payload['namespace'] = namespace
|
|
40
|
-
|
|
41
|
-
# request
|
|
42
|
-
success, response = self._client_api.gen_request(
|
|
43
|
-
req_type='post',
|
|
44
|
-
path=self._base_url,
|
|
45
|
-
json_req=payload
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
if not success:
|
|
49
|
-
raise exceptions.PlatformException(response)
|
|
50
|
-
|
|
51
|
-
service_driver = entities.ServiceDriver.from_json(
|
|
52
|
-
_json=response.json(),
|
|
53
|
-
client_api=self._client_api
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
return service_driver
|
|
57
|
-
|
|
58
|
-
def get(self, service_driver_id: str):
|
|
59
|
-
"""
|
|
60
|
-
Get a service driver
|
|
61
|
-
|
|
62
|
-
:param service_driver_id: Service driver ID
|
|
63
|
-
:return: Service driver
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
# request
|
|
67
|
-
success, response = self._client_api.gen_request(
|
|
68
|
-
req_type='get',
|
|
69
|
-
path=self._base_url + '/{}'.format(service_driver_id)
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
if not success:
|
|
73
|
-
raise exceptions.PlatformException(response)
|
|
74
|
-
|
|
75
|
-
service_driver = entities.ServiceDriver.from_json(
|
|
76
|
-
_json=response.json(),
|
|
77
|
-
client_api=self._client_api
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
return service_driver
|
|
81
|
-
|
|
82
|
-
def delete(self, service_driver_id: str):
|
|
83
|
-
"""
|
|
84
|
-
Delete a service driver
|
|
85
|
-
|
|
86
|
-
:param service_driver_id: Service driver ID
|
|
87
|
-
"""
|
|
88
|
-
|
|
89
|
-
# request
|
|
90
|
-
success, response = self._client_api.gen_request(
|
|
91
|
-
req_type='delete',
|
|
92
|
-
path=self._base_url + '/{}'.format(service_driver_id)
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
if not success:
|
|
96
|
-
raise exceptions.PlatformException(response)
|
|
97
|
-
|
|
98
|
-
return True
|
|
99
|
-
|
|
100
|
-
def set_default(self, service_driver_id: str, org_id: str, update_existing_services=False):
|
|
101
|
-
"""
|
|
102
|
-
Set a service driver as default
|
|
103
|
-
|
|
104
|
-
:param service_driver_id: Compute name
|
|
105
|
-
:param org_id: Organization ID
|
|
106
|
-
:param update_existing_services: Update existing services
|
|
107
|
-
|
|
108
|
-
:return: Service driver
|
|
109
|
-
"""
|
|
110
|
-
|
|
111
|
-
# request
|
|
112
|
-
success, response = self._client_api.gen_request(
|
|
113
|
-
req_type='post',
|
|
114
|
-
path=self._base_url + '/default',
|
|
115
|
-
json_req={
|
|
116
|
-
'organizationId': org_id,
|
|
117
|
-
'updateExistingServices': update_existing_services,
|
|
118
|
-
'driverName': service_driver_id
|
|
119
|
-
}
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
if not success:
|
|
123
|
-
raise exceptions.PlatformException(response)
|
|
124
|
-
|
|
125
|
-
service_driver = entities.ServiceDriver.from_json(
|
|
126
|
-
_json=response.json(),
|
|
127
|
-
client_api=self._client_api
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
return service_driver
|
|
131
|
-
|
|
132
|
-
def update(self, service_driver: entities.ServiceDriver):
|
|
133
|
-
"""
|
|
134
|
-
Update a service driver
|
|
135
|
-
|
|
136
|
-
:param dtlpy.entities.service_driver.ServiceDriver service_driver: updated service driver object
|
|
137
|
-
:return: Service driver entity
|
|
138
|
-
:rtype: dtlpy.entities.service_driver.ServiceDriver
|
|
139
|
-
"""
|
|
140
|
-
|
|
141
|
-
# request
|
|
142
|
-
success, response = self._client_api.gen_request(
|
|
143
|
-
req_type='patch',
|
|
144
|
-
path=self._base_url + '/{}'.format(service_driver.id),
|
|
145
|
-
json_req=service_driver.to_json()
|
|
146
|
-
)
|
|
147
|
-
|
|
148
|
-
if not success:
|
|
149
|
-
raise exceptions.PlatformException(response)
|
|
150
|
-
|
|
151
|
-
service_driver = entities.ServiceDriver.from_json(
|
|
152
|
-
_json=response.json(),
|
|
153
|
-
client_api=self._client_api
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
return service_driver
|
|
157
|
-
|
|
158
|
-
def _list(self, filters: entities.Filters):
|
|
159
|
-
url = self._base_url + '/query'
|
|
160
|
-
success, response = self._client_api.gen_request(req_type='POST',
|
|
161
|
-
path=url,
|
|
162
|
-
json_req=filters.prepare())
|
|
163
|
-
if not success:
|
|
164
|
-
raise exceptions.PlatformException(response)
|
|
165
|
-
|
|
166
|
-
return response.json()
|
|
167
|
-
|
|
168
|
-
def _build_entities_from_response(self, response_items) -> miscellaneous.List[entities.ServiceDriver]:
|
|
169
|
-
pool = self._client_api.thread_pools(pool_name='entity.create')
|
|
170
|
-
jobs = [None for _ in range(len(response_items))]
|
|
171
|
-
for i_item, item in enumerate(response_items):
|
|
172
|
-
jobs[i_item] = pool.submit(entities.ServiceDriver._protected_from_json,
|
|
173
|
-
**{'client_api': self._client_api,
|
|
174
|
-
'_json': item})
|
|
175
|
-
results = [j.result() for j in jobs]
|
|
176
|
-
_ = [logger.warning(r[1]) for r in results if r[0] is False]
|
|
177
|
-
items = miscellaneous.List([r[1] for r in results if r[0] is True])
|
|
178
|
-
return items
|
|
179
|
-
|
|
180
|
-
def list(self, filters: entities.Filters = None) -> entities.PagedEntities:
|
|
181
|
-
"""
|
|
182
|
-
List all services drivers
|
|
183
|
-
|
|
184
|
-
:param dtlpy.entities.filters.Filters filters: Filters entity or a dictionary containing filters parameters
|
|
185
|
-
:return: Paged entity
|
|
186
|
-
:rtype: dtlpy.entities.paged_entities.PagedEntities
|
|
187
|
-
|
|
188
|
-
**Example**:
|
|
189
|
-
|
|
190
|
-
.. code-block:: python
|
|
191
|
-
|
|
192
|
-
services = dl.service_drivers.list()
|
|
193
|
-
"""
|
|
194
|
-
# default filters
|
|
195
|
-
if filters is None:
|
|
196
|
-
filters = entities.Filters(resource=entities.FiltersResource.SERVICE_DRIVER)
|
|
197
|
-
|
|
198
|
-
if filters.resource != entities.FiltersResource.SERVICE_DRIVER:
|
|
199
|
-
raise exceptions.PlatformException(
|
|
200
|
-
error='400',
|
|
201
|
-
message='Filters resource must to be FiltersResource.SERVICE_DRIVER. Got: {!r}'.format(
|
|
202
|
-
filters.resource))
|
|
203
|
-
|
|
204
|
-
if not isinstance(filters, entities.Filters):
|
|
205
|
-
raise exceptions.PlatformException('400', 'Unknown filters type')
|
|
206
|
-
|
|
207
|
-
paged = entities.PagedEntities(items_repository=self,
|
|
208
|
-
filters=filters,
|
|
209
|
-
page_offset=filters.page,
|
|
210
|
-
page_size=filters.page_size,
|
|
211
|
-
client_api=self._client_api)
|
|
212
|
-
paged.get_page()
|
|
213
|
-
return paged
|
|
1
|
+
from dtlpy import miscellaneous
|
|
2
|
+
|
|
3
|
+
from ..services.api_client import ApiClient
|
|
4
|
+
from .. import exceptions, entities
|
|
5
|
+
import logging
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger(name='dtlpy')
|
|
8
|
+
|
|
9
|
+
class ServiceDrivers:
|
|
10
|
+
|
|
11
|
+
def __init__(self, client_api: ApiClient):
|
|
12
|
+
self._client_api = client_api
|
|
13
|
+
self._base_url = '/serviceDrivers'
|
|
14
|
+
|
|
15
|
+
def create(
|
|
16
|
+
self,
|
|
17
|
+
name: str,
|
|
18
|
+
compute_id: str,
|
|
19
|
+
context: entities.ComputeContext,
|
|
20
|
+
namespace: str = None
|
|
21
|
+
):
|
|
22
|
+
"""
|
|
23
|
+
Create a new service driver
|
|
24
|
+
|
|
25
|
+
:param name: Service driver name
|
|
26
|
+
:param compute_id: Compute ID
|
|
27
|
+
:param context: Compute context
|
|
28
|
+
:param namespace: Namespace
|
|
29
|
+
:return: Service driver
|
|
30
|
+
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
payload = {
|
|
34
|
+
'name': name,
|
|
35
|
+
'computeId': compute_id,
|
|
36
|
+
'context': context.to_json()
|
|
37
|
+
}
|
|
38
|
+
if namespace is not None:
|
|
39
|
+
payload['namespace'] = namespace
|
|
40
|
+
|
|
41
|
+
# request
|
|
42
|
+
success, response = self._client_api.gen_request(
|
|
43
|
+
req_type='post',
|
|
44
|
+
path=self._base_url,
|
|
45
|
+
json_req=payload
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
if not success:
|
|
49
|
+
raise exceptions.PlatformException(response)
|
|
50
|
+
|
|
51
|
+
service_driver = entities.ServiceDriver.from_json(
|
|
52
|
+
_json=response.json(),
|
|
53
|
+
client_api=self._client_api
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
return service_driver
|
|
57
|
+
|
|
58
|
+
def get(self, service_driver_id: str):
|
|
59
|
+
"""
|
|
60
|
+
Get a service driver
|
|
61
|
+
|
|
62
|
+
:param service_driver_id: Service driver ID
|
|
63
|
+
:return: Service driver
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
# request
|
|
67
|
+
success, response = self._client_api.gen_request(
|
|
68
|
+
req_type='get',
|
|
69
|
+
path=self._base_url + '/{}'.format(service_driver_id)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
if not success:
|
|
73
|
+
raise exceptions.PlatformException(response)
|
|
74
|
+
|
|
75
|
+
service_driver = entities.ServiceDriver.from_json(
|
|
76
|
+
_json=response.json(),
|
|
77
|
+
client_api=self._client_api
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return service_driver
|
|
81
|
+
|
|
82
|
+
def delete(self, service_driver_id: str):
|
|
83
|
+
"""
|
|
84
|
+
Delete a service driver
|
|
85
|
+
|
|
86
|
+
:param service_driver_id: Service driver ID
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
# request
|
|
90
|
+
success, response = self._client_api.gen_request(
|
|
91
|
+
req_type='delete',
|
|
92
|
+
path=self._base_url + '/{}'.format(service_driver_id)
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
if not success:
|
|
96
|
+
raise exceptions.PlatformException(response)
|
|
97
|
+
|
|
98
|
+
return True
|
|
99
|
+
|
|
100
|
+
def set_default(self, service_driver_id: str, org_id: str, update_existing_services=False):
|
|
101
|
+
"""
|
|
102
|
+
Set a service driver as default
|
|
103
|
+
|
|
104
|
+
:param service_driver_id: Compute name
|
|
105
|
+
:param org_id: Organization ID
|
|
106
|
+
:param update_existing_services: Update existing services
|
|
107
|
+
|
|
108
|
+
:return: Service driver
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
# request
|
|
112
|
+
success, response = self._client_api.gen_request(
|
|
113
|
+
req_type='post',
|
|
114
|
+
path=self._base_url + '/default',
|
|
115
|
+
json_req={
|
|
116
|
+
'organizationId': org_id,
|
|
117
|
+
'updateExistingServices': update_existing_services,
|
|
118
|
+
'driverName': service_driver_id
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
if not success:
|
|
123
|
+
raise exceptions.PlatformException(response)
|
|
124
|
+
|
|
125
|
+
service_driver = entities.ServiceDriver.from_json(
|
|
126
|
+
_json=response.json(),
|
|
127
|
+
client_api=self._client_api
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
return service_driver
|
|
131
|
+
|
|
132
|
+
def update(self, service_driver: entities.ServiceDriver):
|
|
133
|
+
"""
|
|
134
|
+
Update a service driver
|
|
135
|
+
|
|
136
|
+
:param dtlpy.entities.service_driver.ServiceDriver service_driver: updated service driver object
|
|
137
|
+
:return: Service driver entity
|
|
138
|
+
:rtype: dtlpy.entities.service_driver.ServiceDriver
|
|
139
|
+
"""
|
|
140
|
+
|
|
141
|
+
# request
|
|
142
|
+
success, response = self._client_api.gen_request(
|
|
143
|
+
req_type='patch',
|
|
144
|
+
path=self._base_url + '/{}'.format(service_driver.id),
|
|
145
|
+
json_req=service_driver.to_json()
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
if not success:
|
|
149
|
+
raise exceptions.PlatformException(response)
|
|
150
|
+
|
|
151
|
+
service_driver = entities.ServiceDriver.from_json(
|
|
152
|
+
_json=response.json(),
|
|
153
|
+
client_api=self._client_api
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
return service_driver
|
|
157
|
+
|
|
158
|
+
def _list(self, filters: entities.Filters):
|
|
159
|
+
url = self._base_url + '/query'
|
|
160
|
+
success, response = self._client_api.gen_request(req_type='POST',
|
|
161
|
+
path=url,
|
|
162
|
+
json_req=filters.prepare())
|
|
163
|
+
if not success:
|
|
164
|
+
raise exceptions.PlatformException(response)
|
|
165
|
+
|
|
166
|
+
return response.json()
|
|
167
|
+
|
|
168
|
+
def _build_entities_from_response(self, response_items) -> miscellaneous.List[entities.ServiceDriver]:
|
|
169
|
+
pool = self._client_api.thread_pools(pool_name='entity.create')
|
|
170
|
+
jobs = [None for _ in range(len(response_items))]
|
|
171
|
+
for i_item, item in enumerate(response_items):
|
|
172
|
+
jobs[i_item] = pool.submit(entities.ServiceDriver._protected_from_json,
|
|
173
|
+
**{'client_api': self._client_api,
|
|
174
|
+
'_json': item})
|
|
175
|
+
results = [j.result() for j in jobs]
|
|
176
|
+
_ = [logger.warning(r[1]) for r in results if r[0] is False]
|
|
177
|
+
items = miscellaneous.List([r[1] for r in results if r[0] is True])
|
|
178
|
+
return items
|
|
179
|
+
|
|
180
|
+
def list(self, filters: entities.Filters = None) -> entities.PagedEntities:
|
|
181
|
+
"""
|
|
182
|
+
List all services drivers
|
|
183
|
+
|
|
184
|
+
:param dtlpy.entities.filters.Filters filters: Filters entity or a dictionary containing filters parameters
|
|
185
|
+
:return: Paged entity
|
|
186
|
+
:rtype: dtlpy.entities.paged_entities.PagedEntities
|
|
187
|
+
|
|
188
|
+
**Example**:
|
|
189
|
+
|
|
190
|
+
.. code-block:: python
|
|
191
|
+
|
|
192
|
+
services = dl.service_drivers.list()
|
|
193
|
+
"""
|
|
194
|
+
# default filters
|
|
195
|
+
if filters is None:
|
|
196
|
+
filters = entities.Filters(resource=entities.FiltersResource.SERVICE_DRIVER)
|
|
197
|
+
|
|
198
|
+
if filters.resource != entities.FiltersResource.SERVICE_DRIVER:
|
|
199
|
+
raise exceptions.PlatformException(
|
|
200
|
+
error='400',
|
|
201
|
+
message='Filters resource must to be FiltersResource.SERVICE_DRIVER. Got: {!r}'.format(
|
|
202
|
+
filters.resource))
|
|
203
|
+
|
|
204
|
+
if not isinstance(filters, entities.Filters):
|
|
205
|
+
raise exceptions.PlatformException('400', 'Unknown filters type')
|
|
206
|
+
|
|
207
|
+
paged = entities.PagedEntities(items_repository=self,
|
|
208
|
+
filters=filters,
|
|
209
|
+
page_offset=filters.page,
|
|
210
|
+
page_size=filters.page_size,
|
|
211
|
+
client_api=self._client_api)
|
|
212
|
+
paged.get_page()
|
|
213
|
+
return paged
|