dtlpy 1.113.10__py3-none-any.whl → 1.114.13__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 +488 -488
- dtlpy/__version__.py +1 -1
- dtlpy/assets/__init__.py +26 -26
- dtlpy/assets/__pycache__/__init__.cpython-38.pyc +0 -0
- 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 +311 -311
- 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 +296 -296
- dtlpy/entities/collection.py +38 -38
- dtlpy/entities/command.py +169 -169
- dtlpy/entities/compute.py +442 -442
- dtlpy/entities/dataset.py +1285 -1285
- dtlpy/entities/directory_tree.py +44 -44
- dtlpy/entities/dpk.py +470 -470
- dtlpy/entities/driver.py +222 -222
- dtlpy/entities/execution.py +397 -397
- dtlpy/entities/feature.py +124 -124
- dtlpy/entities/feature_set.py +145 -145
- dtlpy/entities/filters.py +641 -641
- dtlpy/entities/gis_item.py +107 -107
- dtlpy/entities/integration.py +184 -184
- dtlpy/entities/item.py +953 -953
- dtlpy/entities/label.py +123 -123
- dtlpy/entities/links.py +85 -85
- dtlpy/entities/message.py +175 -175
- dtlpy/entities/model.py +694 -691
- dtlpy/entities/node.py +1005 -1005
- dtlpy/entities/ontology.py +803 -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 +290 -267
- dtlpy/entities/pipeline.py +593 -593
- dtlpy/entities/pipeline_execution.py +279 -279
- dtlpy/entities/project.py +394 -394
- dtlpy/entities/prompt_item.py +499 -499
- dtlpy/entities/recipe.py +301 -301
- dtlpy/entities/reflect_dict.py +102 -102
- dtlpy/entities/resource_execution.py +138 -138
- dtlpy/entities/service.py +958 -958
- dtlpy/entities/service_driver.py +117 -117
- dtlpy/entities/setting.py +294 -294
- dtlpy/entities/task.py +491 -491
- 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 +945 -940
- 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 -348
- dtlpy/repositories/commands.py +158 -158
- dtlpy/repositories/compositions.py +61 -61
- dtlpy/repositories/computes.py +434 -406
- dtlpy/repositories/datasets.py +1291 -1291
- dtlpy/repositories/downloader.py +895 -895
- dtlpy/repositories/dpks.py +433 -433
- dtlpy/repositories/drivers.py +266 -266
- dtlpy/repositories/executions.py +817 -817
- dtlpy/repositories/feature_sets.py +226 -226
- dtlpy/repositories/features.py +238 -238
- dtlpy/repositories/integrations.py +484 -484
- dtlpy/repositories/items.py +909 -915
- dtlpy/repositories/messages.py +94 -94
- dtlpy/repositories/models.py +877 -867
- 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 +448 -448
- dtlpy/repositories/pipelines.py +642 -642
- dtlpy/repositories/projects.py +539 -539
- dtlpy/repositories/recipes.py +399 -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 +1124 -1124
- dtlpy/repositories/times_series.py +278 -278
- dtlpy/repositories/triggers.py +536 -536
- dtlpy/repositories/upload_element.py +257 -257
- dtlpy/repositories/uploader.py +651 -651
- dtlpy/repositories/webhooks.py +249 -249
- dtlpy/services/__init__.py +22 -22
- dtlpy/services/aihttp_retry.py +131 -131
- dtlpy/services/api_client.py +1782 -1782
- 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 +264 -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.113.10.data → dtlpy-1.114.13.data}/scripts/dlp +1 -1
- dtlpy-1.114.13.data/scripts/dlp.bat +2 -0
- {dtlpy-1.113.10.data → dtlpy-1.114.13.data}/scripts/dlp.py +128 -128
- {dtlpy-1.113.10.dist-info → dtlpy-1.114.13.dist-info}/LICENSE +200 -200
- {dtlpy-1.113.10.dist-info → dtlpy-1.114.13.dist-info}/METADATA +172 -172
- dtlpy-1.114.13.dist-info/RECORD +240 -0
- {dtlpy-1.113.10.dist-info → dtlpy-1.114.13.dist-info}/WHEEL +1 -1
- tests/features/environment.py +551 -550
- dtlpy-1.113.10.data/scripts/dlp.bat +0 -2
- dtlpy-1.113.10.dist-info/RECORD +0 -244
- tests/assets/__init__.py +0 -0
- tests/assets/models_flow/__init__.py +0 -0
- tests/assets/models_flow/failedmain.py +0 -52
- tests/assets/models_flow/main.py +0 -62
- tests/assets/models_flow/main_model.py +0 -54
- {dtlpy-1.113.10.dist-info → dtlpy-1.114.13.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.113.10.dist-info → dtlpy-1.114.13.dist-info}/top_level.txt +0 -0
dtlpy/entities/driver.py
CHANGED
|
@@ -1,222 +1,222 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import attr
|
|
3
|
-
from enum import Enum
|
|
4
|
-
from collections import namedtuple
|
|
5
|
-
from .. import entities, repositories
|
|
6
|
-
from ..services.api_client import ApiClient
|
|
7
|
-
|
|
8
|
-
logger = logging.getLogger(name='dtlpy')
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ExternalStorage(str, Enum):
|
|
12
|
-
""" The type of the Integration.
|
|
13
|
-
|
|
14
|
-
.. list-table::
|
|
15
|
-
:widths: 15 150
|
|
16
|
-
:header-rows: 1
|
|
17
|
-
|
|
18
|
-
* - State
|
|
19
|
-
- Description
|
|
20
|
-
* - S3
|
|
21
|
-
- AWS S3 drivers
|
|
22
|
-
* - GCS
|
|
23
|
-
- Google GCS drivers
|
|
24
|
-
* - AZUREBLOB
|
|
25
|
-
- Microsoft AZURE BLOB drivers
|
|
26
|
-
* - AZURE_DATALAKE_GEN2
|
|
27
|
-
- Microsoft AZURE GEN2 drivers
|
|
28
|
-
"""
|
|
29
|
-
S3 = "s3"
|
|
30
|
-
GCS = "gcs"
|
|
31
|
-
AZUREBLOB = "azureblob"
|
|
32
|
-
AZURE_DATALAKE_GEN2 = 'azureDatalakeGen2'
|
|
33
|
-
KEY_VALUE = "key_value"
|
|
34
|
-
AWS_STS = 'aws-sts'
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@attr.s()
|
|
38
|
-
class Driver(entities.BaseEntity):
|
|
39
|
-
"""
|
|
40
|
-
Driver entity
|
|
41
|
-
"""
|
|
42
|
-
creator = attr.ib()
|
|
43
|
-
allow_external_delete = attr.ib()
|
|
44
|
-
allow_external_modification = attr.ib()
|
|
45
|
-
created_at = attr.ib()
|
|
46
|
-
type = attr.ib()
|
|
47
|
-
integration_id = attr.ib()
|
|
48
|
-
integration_type = attr.ib()
|
|
49
|
-
metadata = attr.ib(repr=False)
|
|
50
|
-
name = attr.ib()
|
|
51
|
-
id = attr.ib()
|
|
52
|
-
path = attr.ib()
|
|
53
|
-
# api
|
|
54
|
-
_client_api = attr.ib(type=ApiClient, repr=False)
|
|
55
|
-
_repositories = attr.ib(repr=False)
|
|
56
|
-
|
|
57
|
-
@_repositories.default
|
|
58
|
-
def set_repositories(self):
|
|
59
|
-
reps = namedtuple('repositories',
|
|
60
|
-
field_names=['drivers'])
|
|
61
|
-
return reps(
|
|
62
|
-
drivers=repositories.Drivers(client_api=self._client_api),
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
@property
|
|
66
|
-
def drivers(self):
|
|
67
|
-
assert isinstance(self._repositories.drivers, repositories.Drivers)
|
|
68
|
-
return self._repositories.drivers
|
|
69
|
-
|
|
70
|
-
@classmethod
|
|
71
|
-
def from_json(cls, _json, client_api, is_fetched=True):
|
|
72
|
-
"""
|
|
73
|
-
Build a Driver entity object from a json
|
|
74
|
-
|
|
75
|
-
:param _json: _json response from host
|
|
76
|
-
:param client_api: ApiClient entity
|
|
77
|
-
:param is_fetched: is Entity fetched from Platform
|
|
78
|
-
:return: Driver object
|
|
79
|
-
"""
|
|
80
|
-
inst = cls(creator=_json.get('creator', None),
|
|
81
|
-
allow_external_delete=_json.get('allowExternalDelete', None),
|
|
82
|
-
allow_external_modification=_json.get('allowExternalModification', None),
|
|
83
|
-
created_at=_json.get('createdAt', None),
|
|
84
|
-
type=_json.get('type', None),
|
|
85
|
-
integration_id=_json.get('integrationId', None),
|
|
86
|
-
integration_type=_json.get('integrationType', None),
|
|
87
|
-
metadata=_json.get('metadata', None),
|
|
88
|
-
name=_json.get('name', None),
|
|
89
|
-
id=_json.get('id', None),
|
|
90
|
-
client_api=client_api,
|
|
91
|
-
path=_json.get('path', None))
|
|
92
|
-
|
|
93
|
-
inst.is_fetched = is_fetched
|
|
94
|
-
return inst
|
|
95
|
-
|
|
96
|
-
def to_json(self):
|
|
97
|
-
"""
|
|
98
|
-
Returns platform _json format of object
|
|
99
|
-
|
|
100
|
-
:return: platform json format of object
|
|
101
|
-
:rtype: dict
|
|
102
|
-
"""
|
|
103
|
-
output_dict = attr.asdict(self,
|
|
104
|
-
filter=attr.filters.exclude(attr.fields(Driver)._client_api,
|
|
105
|
-
attr.fields(Driver).allow_external_delete,
|
|
106
|
-
attr.fields(Driver).allow_external_modification,
|
|
107
|
-
attr.fields(Driver).created_at,
|
|
108
|
-
attr.fields(Driver).integration_id,
|
|
109
|
-
attr.fields(Driver).integration_type,
|
|
110
|
-
attr.fields(Driver).path
|
|
111
|
-
))
|
|
112
|
-
output_dict['allowExternalDelete'] = self.allow_external_delete
|
|
113
|
-
output_dict['allowExternalModification'] = self.allow_external_modification
|
|
114
|
-
output_dict['createdAt'] = self.created_at
|
|
115
|
-
output_dict['integrationId'] = self.integration_id
|
|
116
|
-
output_dict['integrationType'] = self.integration_type
|
|
117
|
-
|
|
118
|
-
if self.path is not None:
|
|
119
|
-
output_dict['path'] = self.path
|
|
120
|
-
|
|
121
|
-
return output_dict
|
|
122
|
-
|
|
123
|
-
def delete(self, sure=False, really=False):
|
|
124
|
-
"""
|
|
125
|
-
Delete a driver forever!
|
|
126
|
-
|
|
127
|
-
**Prerequisites**: You must be an *owner* or *developer* to use this method.
|
|
128
|
-
|
|
129
|
-
:param bool sure: are you sure you want to delete?
|
|
130
|
-
:param bool really: really really?
|
|
131
|
-
:return: True if success
|
|
132
|
-
:rtype: bool
|
|
133
|
-
|
|
134
|
-
**Example**:
|
|
135
|
-
|
|
136
|
-
.. code-block:: python
|
|
137
|
-
|
|
138
|
-
driver.delete(sure=True, really=True)
|
|
139
|
-
"""
|
|
140
|
-
return self.drivers.delete(driver_id=self.id,
|
|
141
|
-
sure=sure,
|
|
142
|
-
really=really)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
@attr.s()
|
|
146
|
-
class AzureBlobDriver(Driver):
|
|
147
|
-
container_name = attr.ib(default=None)
|
|
148
|
-
|
|
149
|
-
def to_json(self):
|
|
150
|
-
_json = super().to_json()
|
|
151
|
-
_json['containerName'] = self.container_name
|
|
152
|
-
return _json
|
|
153
|
-
|
|
154
|
-
@classmethod
|
|
155
|
-
def from_json(cls, _json, client_api, is_fetched=True):
|
|
156
|
-
"""
|
|
157
|
-
Build a Driver entity object from a json
|
|
158
|
-
|
|
159
|
-
:param _json: _json response from host
|
|
160
|
-
:param client_api: ApiClient entity
|
|
161
|
-
:param is_fetched: is Entity fetched from Platform
|
|
162
|
-
:return: Driver object
|
|
163
|
-
"""
|
|
164
|
-
inst = super().from_json(_json, client_api, is_fetched=True)
|
|
165
|
-
inst.container_name = _json.get('containerName', None)
|
|
166
|
-
return inst
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
@attr.s()
|
|
170
|
-
class GcsDriver(Driver):
|
|
171
|
-
bucket = attr.ib(default=None)
|
|
172
|
-
|
|
173
|
-
def to_json(self):
|
|
174
|
-
_json = super().to_json()
|
|
175
|
-
_json['bucket'] = self.bucket
|
|
176
|
-
return _json
|
|
177
|
-
|
|
178
|
-
@classmethod
|
|
179
|
-
def from_json(cls, _json, client_api, is_fetched=True):
|
|
180
|
-
"""
|
|
181
|
-
Build a Driver entity object from a json
|
|
182
|
-
|
|
183
|
-
:param _json: _json response from host
|
|
184
|
-
:param client_api: ApiClient entity
|
|
185
|
-
:param is_fetched: is Entity fetched from Platform
|
|
186
|
-
:return: Driver object
|
|
187
|
-
"""
|
|
188
|
-
inst = super().from_json(_json, client_api, is_fetched=True)
|
|
189
|
-
inst.bucket = _json.get('bucket', None)
|
|
190
|
-
return inst
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
@attr.s()
|
|
194
|
-
class S3Driver(Driver):
|
|
195
|
-
bucket_name = attr.ib(default=None)
|
|
196
|
-
region = attr.ib(default=None)
|
|
197
|
-
storage_class = attr.ib(default=None)
|
|
198
|
-
|
|
199
|
-
def to_json(self):
|
|
200
|
-
_json = super().to_json()
|
|
201
|
-
_json['bucketName'] = self.bucket_name
|
|
202
|
-
if self.region is not None:
|
|
203
|
-
_json['region'] = self.region
|
|
204
|
-
if self.storage_class is not None:
|
|
205
|
-
_json['storageClass'] = self.storage_class
|
|
206
|
-
return _json
|
|
207
|
-
|
|
208
|
-
@classmethod
|
|
209
|
-
def from_json(cls, _json, client_api, is_fetched=True):
|
|
210
|
-
"""
|
|
211
|
-
Build a Driver entity object from a json
|
|
212
|
-
|
|
213
|
-
:param _json: _json response from host
|
|
214
|
-
:param client_api: ApiClient entity
|
|
215
|
-
:param is_fetched: is Entity fetched from Platform
|
|
216
|
-
:return: Driver object
|
|
217
|
-
"""
|
|
218
|
-
inst = super().from_json(_json, client_api, is_fetched=True)
|
|
219
|
-
inst.bucket_name = _json.get('bucketName', None)
|
|
220
|
-
inst.region = _json.get('region', None)
|
|
221
|
-
inst.storage_class = _json.get('storageClass', None)
|
|
222
|
-
return inst
|
|
1
|
+
import logging
|
|
2
|
+
import attr
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from collections import namedtuple
|
|
5
|
+
from .. import entities, repositories
|
|
6
|
+
from ..services.api_client import ApiClient
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(name='dtlpy')
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ExternalStorage(str, Enum):
|
|
12
|
+
""" The type of the Integration.
|
|
13
|
+
|
|
14
|
+
.. list-table::
|
|
15
|
+
:widths: 15 150
|
|
16
|
+
:header-rows: 1
|
|
17
|
+
|
|
18
|
+
* - State
|
|
19
|
+
- Description
|
|
20
|
+
* - S3
|
|
21
|
+
- AWS S3 drivers
|
|
22
|
+
* - GCS
|
|
23
|
+
- Google GCS drivers
|
|
24
|
+
* - AZUREBLOB
|
|
25
|
+
- Microsoft AZURE BLOB drivers
|
|
26
|
+
* - AZURE_DATALAKE_GEN2
|
|
27
|
+
- Microsoft AZURE GEN2 drivers
|
|
28
|
+
"""
|
|
29
|
+
S3 = "s3"
|
|
30
|
+
GCS = "gcs"
|
|
31
|
+
AZUREBLOB = "azureblob"
|
|
32
|
+
AZURE_DATALAKE_GEN2 = 'azureDatalakeGen2'
|
|
33
|
+
KEY_VALUE = "key_value"
|
|
34
|
+
AWS_STS = 'aws-sts'
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@attr.s()
|
|
38
|
+
class Driver(entities.BaseEntity):
|
|
39
|
+
"""
|
|
40
|
+
Driver entity
|
|
41
|
+
"""
|
|
42
|
+
creator = attr.ib()
|
|
43
|
+
allow_external_delete = attr.ib()
|
|
44
|
+
allow_external_modification = attr.ib()
|
|
45
|
+
created_at = attr.ib()
|
|
46
|
+
type = attr.ib()
|
|
47
|
+
integration_id = attr.ib()
|
|
48
|
+
integration_type = attr.ib()
|
|
49
|
+
metadata = attr.ib(repr=False)
|
|
50
|
+
name = attr.ib()
|
|
51
|
+
id = attr.ib()
|
|
52
|
+
path = attr.ib()
|
|
53
|
+
# api
|
|
54
|
+
_client_api = attr.ib(type=ApiClient, repr=False)
|
|
55
|
+
_repositories = attr.ib(repr=False)
|
|
56
|
+
|
|
57
|
+
@_repositories.default
|
|
58
|
+
def set_repositories(self):
|
|
59
|
+
reps = namedtuple('repositories',
|
|
60
|
+
field_names=['drivers'])
|
|
61
|
+
return reps(
|
|
62
|
+
drivers=repositories.Drivers(client_api=self._client_api),
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def drivers(self):
|
|
67
|
+
assert isinstance(self._repositories.drivers, repositories.Drivers)
|
|
68
|
+
return self._repositories.drivers
|
|
69
|
+
|
|
70
|
+
@classmethod
|
|
71
|
+
def from_json(cls, _json, client_api, is_fetched=True):
|
|
72
|
+
"""
|
|
73
|
+
Build a Driver entity object from a json
|
|
74
|
+
|
|
75
|
+
:param _json: _json response from host
|
|
76
|
+
:param client_api: ApiClient entity
|
|
77
|
+
:param is_fetched: is Entity fetched from Platform
|
|
78
|
+
:return: Driver object
|
|
79
|
+
"""
|
|
80
|
+
inst = cls(creator=_json.get('creator', None),
|
|
81
|
+
allow_external_delete=_json.get('allowExternalDelete', None),
|
|
82
|
+
allow_external_modification=_json.get('allowExternalModification', None),
|
|
83
|
+
created_at=_json.get('createdAt', None),
|
|
84
|
+
type=_json.get('type', None),
|
|
85
|
+
integration_id=_json.get('integrationId', None),
|
|
86
|
+
integration_type=_json.get('integrationType', None),
|
|
87
|
+
metadata=_json.get('metadata', None),
|
|
88
|
+
name=_json.get('name', None),
|
|
89
|
+
id=_json.get('id', None),
|
|
90
|
+
client_api=client_api,
|
|
91
|
+
path=_json.get('path', None))
|
|
92
|
+
|
|
93
|
+
inst.is_fetched = is_fetched
|
|
94
|
+
return inst
|
|
95
|
+
|
|
96
|
+
def to_json(self):
|
|
97
|
+
"""
|
|
98
|
+
Returns platform _json format of object
|
|
99
|
+
|
|
100
|
+
:return: platform json format of object
|
|
101
|
+
:rtype: dict
|
|
102
|
+
"""
|
|
103
|
+
output_dict = attr.asdict(self,
|
|
104
|
+
filter=attr.filters.exclude(attr.fields(Driver)._client_api,
|
|
105
|
+
attr.fields(Driver).allow_external_delete,
|
|
106
|
+
attr.fields(Driver).allow_external_modification,
|
|
107
|
+
attr.fields(Driver).created_at,
|
|
108
|
+
attr.fields(Driver).integration_id,
|
|
109
|
+
attr.fields(Driver).integration_type,
|
|
110
|
+
attr.fields(Driver).path
|
|
111
|
+
))
|
|
112
|
+
output_dict['allowExternalDelete'] = self.allow_external_delete
|
|
113
|
+
output_dict['allowExternalModification'] = self.allow_external_modification
|
|
114
|
+
output_dict['createdAt'] = self.created_at
|
|
115
|
+
output_dict['integrationId'] = self.integration_id
|
|
116
|
+
output_dict['integrationType'] = self.integration_type
|
|
117
|
+
|
|
118
|
+
if self.path is not None:
|
|
119
|
+
output_dict['path'] = self.path
|
|
120
|
+
|
|
121
|
+
return output_dict
|
|
122
|
+
|
|
123
|
+
def delete(self, sure=False, really=False):
|
|
124
|
+
"""
|
|
125
|
+
Delete a driver forever!
|
|
126
|
+
|
|
127
|
+
**Prerequisites**: You must be an *owner* or *developer* to use this method.
|
|
128
|
+
|
|
129
|
+
:param bool sure: are you sure you want to delete?
|
|
130
|
+
:param bool really: really really?
|
|
131
|
+
:return: True if success
|
|
132
|
+
:rtype: bool
|
|
133
|
+
|
|
134
|
+
**Example**:
|
|
135
|
+
|
|
136
|
+
.. code-block:: python
|
|
137
|
+
|
|
138
|
+
driver.delete(sure=True, really=True)
|
|
139
|
+
"""
|
|
140
|
+
return self.drivers.delete(driver_id=self.id,
|
|
141
|
+
sure=sure,
|
|
142
|
+
really=really)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@attr.s()
|
|
146
|
+
class AzureBlobDriver(Driver):
|
|
147
|
+
container_name = attr.ib(default=None)
|
|
148
|
+
|
|
149
|
+
def to_json(self):
|
|
150
|
+
_json = super().to_json()
|
|
151
|
+
_json['containerName'] = self.container_name
|
|
152
|
+
return _json
|
|
153
|
+
|
|
154
|
+
@classmethod
|
|
155
|
+
def from_json(cls, _json, client_api, is_fetched=True):
|
|
156
|
+
"""
|
|
157
|
+
Build a Driver entity object from a json
|
|
158
|
+
|
|
159
|
+
:param _json: _json response from host
|
|
160
|
+
:param client_api: ApiClient entity
|
|
161
|
+
:param is_fetched: is Entity fetched from Platform
|
|
162
|
+
:return: Driver object
|
|
163
|
+
"""
|
|
164
|
+
inst = super().from_json(_json, client_api, is_fetched=True)
|
|
165
|
+
inst.container_name = _json.get('containerName', None)
|
|
166
|
+
return inst
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@attr.s()
|
|
170
|
+
class GcsDriver(Driver):
|
|
171
|
+
bucket = attr.ib(default=None)
|
|
172
|
+
|
|
173
|
+
def to_json(self):
|
|
174
|
+
_json = super().to_json()
|
|
175
|
+
_json['bucket'] = self.bucket
|
|
176
|
+
return _json
|
|
177
|
+
|
|
178
|
+
@classmethod
|
|
179
|
+
def from_json(cls, _json, client_api, is_fetched=True):
|
|
180
|
+
"""
|
|
181
|
+
Build a Driver entity object from a json
|
|
182
|
+
|
|
183
|
+
:param _json: _json response from host
|
|
184
|
+
:param client_api: ApiClient entity
|
|
185
|
+
:param is_fetched: is Entity fetched from Platform
|
|
186
|
+
:return: Driver object
|
|
187
|
+
"""
|
|
188
|
+
inst = super().from_json(_json, client_api, is_fetched=True)
|
|
189
|
+
inst.bucket = _json.get('bucket', None)
|
|
190
|
+
return inst
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@attr.s()
|
|
194
|
+
class S3Driver(Driver):
|
|
195
|
+
bucket_name = attr.ib(default=None)
|
|
196
|
+
region = attr.ib(default=None)
|
|
197
|
+
storage_class = attr.ib(default=None)
|
|
198
|
+
|
|
199
|
+
def to_json(self):
|
|
200
|
+
_json = super().to_json()
|
|
201
|
+
_json['bucketName'] = self.bucket_name
|
|
202
|
+
if self.region is not None:
|
|
203
|
+
_json['region'] = self.region
|
|
204
|
+
if self.storage_class is not None:
|
|
205
|
+
_json['storageClass'] = self.storage_class
|
|
206
|
+
return _json
|
|
207
|
+
|
|
208
|
+
@classmethod
|
|
209
|
+
def from_json(cls, _json, client_api, is_fetched=True):
|
|
210
|
+
"""
|
|
211
|
+
Build a Driver entity object from a json
|
|
212
|
+
|
|
213
|
+
:param _json: _json response from host
|
|
214
|
+
:param client_api: ApiClient entity
|
|
215
|
+
:param is_fetched: is Entity fetched from Platform
|
|
216
|
+
:return: Driver object
|
|
217
|
+
"""
|
|
218
|
+
inst = super().from_json(_json, client_api, is_fetched=True)
|
|
219
|
+
inst.bucket_name = _json.get('bucketName', None)
|
|
220
|
+
inst.region = _json.get('region', None)
|
|
221
|
+
inst.storage_class = _json.get('storageClass', None)
|
|
222
|
+
return inst
|