dtlpy 1.115.44__py3-none-any.whl → 1.116.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 +145 -145
- dtlpy/entities/filters.py +798 -798
- dtlpy/entities/gis_item.py +107 -107
- dtlpy/entities/integration.py +184 -184
- dtlpy/entities/item.py +959 -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 +963 -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 +1257 -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 +1504 -1504
- dtlpy/repositories/downloader.py +976 -923
- dtlpy/repositories/dpks.py +433 -433
- dtlpy/repositories/drivers.py +482 -482
- dtlpy/repositories/executions.py +815 -815
- dtlpy/repositories/feature_sets.py +226 -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 +419 -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 +1785 -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.116.6.data}/scripts/dlp +1 -1
- dtlpy-1.116.6.data/scripts/dlp.bat +2 -0
- {dtlpy-1.115.44.data → dtlpy-1.116.6.data}/scripts/dlp.py +128 -128
- {dtlpy-1.115.44.dist-info → dtlpy-1.116.6.dist-info}/METADATA +186 -186
- dtlpy-1.116.6.dist-info/RECORD +239 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.116.6.dist-info}/WHEEL +1 -1
- {dtlpy-1.115.44.dist-info → dtlpy-1.116.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.116.6.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.115.44.dist-info → dtlpy-1.116.6.dist-info}/top_level.txt +0 -0
dtlpy/repositories/settings.py
CHANGED
|
@@ -1,339 +1,339 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from typing import Union
|
|
3
|
-
|
|
4
|
-
from .. import exceptions, entities, ApiClient
|
|
5
|
-
|
|
6
|
-
logger = logging.getLogger(name='dtlpy')
|
|
7
|
-
BASE_URL = '/settings'
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class Settings:
|
|
11
|
-
def __init__(
|
|
12
|
-
self,
|
|
13
|
-
client_api: ApiClient,
|
|
14
|
-
project: entities.Project = None,
|
|
15
|
-
dataset: entities.Dataset = None,
|
|
16
|
-
org: entities.Organization = None,
|
|
17
|
-
task: entities.Task = None,
|
|
18
|
-
resource=None,
|
|
19
|
-
resource_type=None
|
|
20
|
-
):
|
|
21
|
-
self._client_api = client_api
|
|
22
|
-
self._org = org
|
|
23
|
-
self._project = project
|
|
24
|
-
self._dataset = dataset
|
|
25
|
-
self._task = task
|
|
26
|
-
self._resource = resource
|
|
27
|
-
self._resource_type = resource_type
|
|
28
|
-
|
|
29
|
-
###########
|
|
30
|
-
# methods #
|
|
31
|
-
###########
|
|
32
|
-
|
|
33
|
-
@staticmethod
|
|
34
|
-
def get_constructor(res: dict):
|
|
35
|
-
constructor = entities.Setting.from_json
|
|
36
|
-
return constructor
|
|
37
|
-
|
|
38
|
-
def _build_entities_from_response(self, response_items):
|
|
39
|
-
settings = list()
|
|
40
|
-
for _, setting in enumerate(response_items):
|
|
41
|
-
settings.append(
|
|
42
|
-
self.get_constructor(setting)(
|
|
43
|
-
client_api=self._client_api,
|
|
44
|
-
_json=setting,
|
|
45
|
-
project=self._project
|
|
46
|
-
)
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
return settings
|
|
50
|
-
|
|
51
|
-
def _build_settings(self,
|
|
52
|
-
setting_name: str = None,
|
|
53
|
-
setting_value: entities.SettingsTypes = None,
|
|
54
|
-
setting_value_type: entities.SettingsValueTypes = None,
|
|
55
|
-
setting_default_value=None
|
|
56
|
-
):
|
|
57
|
-
if self._resource is None:
|
|
58
|
-
raise exceptions.PlatformException('400', 'Must have resource')
|
|
59
|
-
setting = entities.Setting(
|
|
60
|
-
name=setting_name,
|
|
61
|
-
value=setting_value,
|
|
62
|
-
value_type=setting_value_type,
|
|
63
|
-
section_name=entities.SettingsSectionNames.SDK,
|
|
64
|
-
default_value=setting_default_value,
|
|
65
|
-
scope=entities.SettingScope(type=self._resource_type,
|
|
66
|
-
id=self._resource.id,
|
|
67
|
-
role=entities.Role.ALL,
|
|
68
|
-
prevent_override=False,
|
|
69
|
-
visible=True),
|
|
70
|
-
)
|
|
71
|
-
return setting
|
|
72
|
-
|
|
73
|
-
def create(self,
|
|
74
|
-
setting: entities.Setting = None,
|
|
75
|
-
setting_name: str = None,
|
|
76
|
-
setting_value=None,
|
|
77
|
-
setting_value_type: entities.SettingsValueTypes = None,
|
|
78
|
-
setting_default_value=None,
|
|
79
|
-
) -> entities.Setting:
|
|
80
|
-
"""
|
|
81
|
-
Create a new setting
|
|
82
|
-
|
|
83
|
-
:param Setting setting: setting entity
|
|
84
|
-
:param str setting_name: the setting name
|
|
85
|
-
:param setting_value: the setting value
|
|
86
|
-
:param SettingsValueTypes setting_value_type: the setting type dl.SettingsValueTypes
|
|
87
|
-
:param setting_default_value: the setting default value
|
|
88
|
-
:return: setting entity
|
|
89
|
-
"""
|
|
90
|
-
if sum([1 for param in [setting_name, setting_value, setting_value_type] if param is None]) > 0 \
|
|
91
|
-
and setting is None:
|
|
92
|
-
raise exceptions.PlatformException('400', 'Must provide setting object or'
|
|
93
|
-
'setting_name, setting_value and setting_value_type')
|
|
94
|
-
|
|
95
|
-
if setting is None:
|
|
96
|
-
setting = self._build_settings(setting_name=setting_name,
|
|
97
|
-
setting_value=setting_value,
|
|
98
|
-
setting_value_type=setting_value_type,
|
|
99
|
-
setting_default_value=setting_default_value)
|
|
100
|
-
|
|
101
|
-
success, response = self._client_api.gen_request(
|
|
102
|
-
req_type='post',
|
|
103
|
-
path='{}'.format(
|
|
104
|
-
BASE_URL
|
|
105
|
-
),
|
|
106
|
-
json_req=setting.to_json()
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
if success:
|
|
110
|
-
_json = response.json()
|
|
111
|
-
constructor = self.get_constructor(_json)
|
|
112
|
-
else:
|
|
113
|
-
raise exceptions.PlatformException(response)
|
|
114
|
-
|
|
115
|
-
return constructor(
|
|
116
|
-
_json=_json,
|
|
117
|
-
client_api=self._client_api,
|
|
118
|
-
project=self._project,
|
|
119
|
-
org=self._org
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
def update(self,
|
|
123
|
-
setting: entities.BaseSetting = None,
|
|
124
|
-
setting_id: str = None,
|
|
125
|
-
setting_name: str = None,
|
|
126
|
-
setting_value=None,
|
|
127
|
-
setting_default_value=None,
|
|
128
|
-
) -> entities.Setting:
|
|
129
|
-
"""
|
|
130
|
-
Update a setting
|
|
131
|
-
|
|
132
|
-
:param Setting setting: setting entity
|
|
133
|
-
:param str setting_id: the setting id
|
|
134
|
-
:param str setting_name: the setting name
|
|
135
|
-
:param setting_value: the setting value
|
|
136
|
-
:param setting_default_value: the setting default value
|
|
137
|
-
:return: setting entity
|
|
138
|
-
"""
|
|
139
|
-
if sum([1 for param in [setting_name, setting_value] if param is None]) > 0 \
|
|
140
|
-
and setting is None:
|
|
141
|
-
raise exceptions.PlatformException('400', 'Must provide setting object or'
|
|
142
|
-
'setting_name, setting_value and setting_value_type')
|
|
143
|
-
|
|
144
|
-
if setting is None:
|
|
145
|
-
setting = self.get(setting_id=setting_id)
|
|
146
|
-
setting.name = setting_name
|
|
147
|
-
setting.value = setting_value
|
|
148
|
-
if setting_default_value is not None:
|
|
149
|
-
setting.default_value = setting_default_value
|
|
150
|
-
|
|
151
|
-
patch = setting.to_json()
|
|
152
|
-
patch.pop('id')
|
|
153
|
-
patch.pop('name')
|
|
154
|
-
success, response = self._client_api.gen_request(
|
|
155
|
-
req_type='patch',
|
|
156
|
-
path='{}/{}'.format(
|
|
157
|
-
BASE_URL,
|
|
158
|
-
setting.id
|
|
159
|
-
),
|
|
160
|
-
json_req=patch
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
if success:
|
|
164
|
-
_json = response.json()
|
|
165
|
-
constructor = self.get_constructor(_json)
|
|
166
|
-
else:
|
|
167
|
-
raise exceptions.PlatformException(response)
|
|
168
|
-
|
|
169
|
-
return constructor(
|
|
170
|
-
_json=_json,
|
|
171
|
-
client_api=self._client_api,
|
|
172
|
-
project=self._project,
|
|
173
|
-
org=self._org
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
def delete(self, setting_id: str) -> bool:
|
|
177
|
-
"""
|
|
178
|
-
Delete a setting
|
|
179
|
-
|
|
180
|
-
:param str setting_id: the setting id
|
|
181
|
-
:return: True if success exceptions if not
|
|
182
|
-
"""
|
|
183
|
-
success, response = self._client_api.gen_request(
|
|
184
|
-
req_type='delete',
|
|
185
|
-
path='{}/{}'.format(
|
|
186
|
-
BASE_URL,
|
|
187
|
-
setting_id
|
|
188
|
-
)
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
if success:
|
|
192
|
-
return True
|
|
193
|
-
else:
|
|
194
|
-
raise exceptions.PlatformException(response)
|
|
195
|
-
|
|
196
|
-
def get(self, setting_name: str = None, setting_id: str = None) -> entities.Setting:
|
|
197
|
-
"""
|
|
198
|
-
Get a setting by id
|
|
199
|
-
|
|
200
|
-
:param str setting_name: the setting name
|
|
201
|
-
:param str setting_id: the setting id
|
|
202
|
-
:return: setting entity
|
|
203
|
-
"""
|
|
204
|
-
if setting_id is not None:
|
|
205
|
-
success, response = self._client_api.gen_request(
|
|
206
|
-
req_type='get',
|
|
207
|
-
path='{}/{}'.format(
|
|
208
|
-
BASE_URL,
|
|
209
|
-
setting_id
|
|
210
|
-
)
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
if success:
|
|
214
|
-
_json = response.json()
|
|
215
|
-
constructor = self.get_constructor(_json)
|
|
216
|
-
setting = constructor(
|
|
217
|
-
_json=_json,
|
|
218
|
-
client_api=self._client_api,
|
|
219
|
-
project=self._project,
|
|
220
|
-
org=self._org
|
|
221
|
-
)
|
|
222
|
-
else:
|
|
223
|
-
raise exceptions.PlatformException(response)
|
|
224
|
-
elif setting_name is not None:
|
|
225
|
-
if not isinstance(setting_name, str):
|
|
226
|
-
raise exceptions.PlatformException(
|
|
227
|
-
error='400',
|
|
228
|
-
message='setting_name must be strings')
|
|
229
|
-
settings = self.list(
|
|
230
|
-
filters=entities.Filters(field='name', values=setting_name, resource=entities.FiltersResource.SETTINGS))
|
|
231
|
-
if len(settings.items) > 1:
|
|
232
|
-
raise exceptions.PlatformException(
|
|
233
|
-
error='404',
|
|
234
|
-
message='More than one setting with same name. Please "get" by id')
|
|
235
|
-
elif len(settings.items) == 0:
|
|
236
|
-
raise exceptions.PlatformException('404', 'setting not found')
|
|
237
|
-
else:
|
|
238
|
-
setting = settings.items[0]
|
|
239
|
-
else:
|
|
240
|
-
raise exceptions.PlatformException(
|
|
241
|
-
error='400',
|
|
242
|
-
message='Must provide at least ONE of the following params: setting_id, setting_name.')
|
|
243
|
-
return setting
|
|
244
|
-
|
|
245
|
-
def _list(self, filters: entities.Filters):
|
|
246
|
-
success, response = self._client_api.gen_request(
|
|
247
|
-
req_type='post',
|
|
248
|
-
path='{}/query'.format(BASE_URL),
|
|
249
|
-
json_req=filters.prepare()
|
|
250
|
-
)
|
|
251
|
-
if not success:
|
|
252
|
-
raise exceptions.PlatformException(response)
|
|
253
|
-
return response.json()
|
|
254
|
-
|
|
255
|
-
def list(self, filters: entities.Filters = None) -> entities.PagedEntities:
|
|
256
|
-
"""
|
|
257
|
-
List settings
|
|
258
|
-
|
|
259
|
-
:param dtlpy.entities.filters.Filters filters: Filters entity or a dictionary containing filters parameters
|
|
260
|
-
:return: Paged entity
|
|
261
|
-
:rtype: dtlpy.entities.paged_entities.PagedEntities
|
|
262
|
-
"""
|
|
263
|
-
if filters is None:
|
|
264
|
-
filters = entities.Filters(resource=entities.FiltersResource.SETTINGS)
|
|
265
|
-
filters.sort_by(entities.FiltersOrderByDirection.ASCENDING)
|
|
266
|
-
|
|
267
|
-
if filters.resource != entities.FiltersResource.SETTINGS:
|
|
268
|
-
raise exceptions.PlatformException(
|
|
269
|
-
error='400',
|
|
270
|
-
message='Filters resource must to be FiltersResource.SETTINGS . Got: {!r}'.format(filters.resource))
|
|
271
|
-
|
|
272
|
-
if self._project is not None:
|
|
273
|
-
filters.add(field='scope.id', values=self._project.id)
|
|
274
|
-
|
|
275
|
-
paged = entities.PagedEntities(
|
|
276
|
-
items_repository=self,
|
|
277
|
-
filters=filters,
|
|
278
|
-
page_offset=filters.page,
|
|
279
|
-
page_size=filters.page_size,
|
|
280
|
-
project_id=self._project.id if self._project is not None else None,
|
|
281
|
-
client_api=self._client_api
|
|
282
|
-
)
|
|
283
|
-
|
|
284
|
-
paged.get_page()
|
|
285
|
-
|
|
286
|
-
return paged
|
|
287
|
-
|
|
288
|
-
def resolve(
|
|
289
|
-
self,
|
|
290
|
-
user_email: str,
|
|
291
|
-
org_id: str = None,
|
|
292
|
-
project_id: str = None,
|
|
293
|
-
dataset_id: str = None,
|
|
294
|
-
task_id: str = None,
|
|
295
|
-
):
|
|
296
|
-
"""
|
|
297
|
-
return all the settings that relevant to the provider params
|
|
298
|
-
|
|
299
|
-
:param str user_email: user email
|
|
300
|
-
:param str org_id: org id
|
|
301
|
-
:param str project_id: project id
|
|
302
|
-
:param str dataset_id: dataset id
|
|
303
|
-
:param str task_id: task id
|
|
304
|
-
"""
|
|
305
|
-
payload = {
|
|
306
|
-
'userId': user_email
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
if self._project:
|
|
310
|
-
payload['projectId'] = self._project.id
|
|
311
|
-
elif project_id:
|
|
312
|
-
payload['projectId'] = project_id
|
|
313
|
-
|
|
314
|
-
if self._org:
|
|
315
|
-
payload['orgId'] = self._org.id
|
|
316
|
-
elif org_id:
|
|
317
|
-
payload['orgId'] = org_id
|
|
318
|
-
|
|
319
|
-
if self._dataset:
|
|
320
|
-
payload['datasetId'] = self._dataset.id
|
|
321
|
-
elif dataset_id:
|
|
322
|
-
payload['datasetId'] = dataset_id
|
|
323
|
-
|
|
324
|
-
if self._task:
|
|
325
|
-
payload['taskId'] = self._task.id
|
|
326
|
-
elif task_id:
|
|
327
|
-
payload['taskId'] = task_id
|
|
328
|
-
|
|
329
|
-
success, response = self._client_api.gen_request(
|
|
330
|
-
req_type='post',
|
|
331
|
-
path='{}/resolve'.format(BASE_URL),
|
|
332
|
-
json_req=payload
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
if success:
|
|
336
|
-
_json = response.json()
|
|
337
|
-
return self._build_entities_from_response(response_items=_json)
|
|
338
|
-
else:
|
|
339
|
-
raise exceptions.PlatformException(response)
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Union
|
|
3
|
+
|
|
4
|
+
from .. import exceptions, entities, ApiClient
|
|
5
|
+
|
|
6
|
+
logger = logging.getLogger(name='dtlpy')
|
|
7
|
+
BASE_URL = '/settings'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Settings:
|
|
11
|
+
def __init__(
|
|
12
|
+
self,
|
|
13
|
+
client_api: ApiClient,
|
|
14
|
+
project: entities.Project = None,
|
|
15
|
+
dataset: entities.Dataset = None,
|
|
16
|
+
org: entities.Organization = None,
|
|
17
|
+
task: entities.Task = None,
|
|
18
|
+
resource=None,
|
|
19
|
+
resource_type=None
|
|
20
|
+
):
|
|
21
|
+
self._client_api = client_api
|
|
22
|
+
self._org = org
|
|
23
|
+
self._project = project
|
|
24
|
+
self._dataset = dataset
|
|
25
|
+
self._task = task
|
|
26
|
+
self._resource = resource
|
|
27
|
+
self._resource_type = resource_type
|
|
28
|
+
|
|
29
|
+
###########
|
|
30
|
+
# methods #
|
|
31
|
+
###########
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def get_constructor(res: dict):
|
|
35
|
+
constructor = entities.Setting.from_json
|
|
36
|
+
return constructor
|
|
37
|
+
|
|
38
|
+
def _build_entities_from_response(self, response_items):
|
|
39
|
+
settings = list()
|
|
40
|
+
for _, setting in enumerate(response_items):
|
|
41
|
+
settings.append(
|
|
42
|
+
self.get_constructor(setting)(
|
|
43
|
+
client_api=self._client_api,
|
|
44
|
+
_json=setting,
|
|
45
|
+
project=self._project
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
return settings
|
|
50
|
+
|
|
51
|
+
def _build_settings(self,
|
|
52
|
+
setting_name: str = None,
|
|
53
|
+
setting_value: entities.SettingsTypes = None,
|
|
54
|
+
setting_value_type: entities.SettingsValueTypes = None,
|
|
55
|
+
setting_default_value=None
|
|
56
|
+
):
|
|
57
|
+
if self._resource is None:
|
|
58
|
+
raise exceptions.PlatformException('400', 'Must have resource')
|
|
59
|
+
setting = entities.Setting(
|
|
60
|
+
name=setting_name,
|
|
61
|
+
value=setting_value,
|
|
62
|
+
value_type=setting_value_type,
|
|
63
|
+
section_name=entities.SettingsSectionNames.SDK,
|
|
64
|
+
default_value=setting_default_value,
|
|
65
|
+
scope=entities.SettingScope(type=self._resource_type,
|
|
66
|
+
id=self._resource.id,
|
|
67
|
+
role=entities.Role.ALL,
|
|
68
|
+
prevent_override=False,
|
|
69
|
+
visible=True),
|
|
70
|
+
)
|
|
71
|
+
return setting
|
|
72
|
+
|
|
73
|
+
def create(self,
|
|
74
|
+
setting: entities.Setting = None,
|
|
75
|
+
setting_name: str = None,
|
|
76
|
+
setting_value=None,
|
|
77
|
+
setting_value_type: entities.SettingsValueTypes = None,
|
|
78
|
+
setting_default_value=None,
|
|
79
|
+
) -> entities.Setting:
|
|
80
|
+
"""
|
|
81
|
+
Create a new setting
|
|
82
|
+
|
|
83
|
+
:param Setting setting: setting entity
|
|
84
|
+
:param str setting_name: the setting name
|
|
85
|
+
:param setting_value: the setting value
|
|
86
|
+
:param SettingsValueTypes setting_value_type: the setting type dl.SettingsValueTypes
|
|
87
|
+
:param setting_default_value: the setting default value
|
|
88
|
+
:return: setting entity
|
|
89
|
+
"""
|
|
90
|
+
if sum([1 for param in [setting_name, setting_value, setting_value_type] if param is None]) > 0 \
|
|
91
|
+
and setting is None:
|
|
92
|
+
raise exceptions.PlatformException('400', 'Must provide setting object or'
|
|
93
|
+
'setting_name, setting_value and setting_value_type')
|
|
94
|
+
|
|
95
|
+
if setting is None:
|
|
96
|
+
setting = self._build_settings(setting_name=setting_name,
|
|
97
|
+
setting_value=setting_value,
|
|
98
|
+
setting_value_type=setting_value_type,
|
|
99
|
+
setting_default_value=setting_default_value)
|
|
100
|
+
|
|
101
|
+
success, response = self._client_api.gen_request(
|
|
102
|
+
req_type='post',
|
|
103
|
+
path='{}'.format(
|
|
104
|
+
BASE_URL
|
|
105
|
+
),
|
|
106
|
+
json_req=setting.to_json()
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
if success:
|
|
110
|
+
_json = response.json()
|
|
111
|
+
constructor = self.get_constructor(_json)
|
|
112
|
+
else:
|
|
113
|
+
raise exceptions.PlatformException(response)
|
|
114
|
+
|
|
115
|
+
return constructor(
|
|
116
|
+
_json=_json,
|
|
117
|
+
client_api=self._client_api,
|
|
118
|
+
project=self._project,
|
|
119
|
+
org=self._org
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
def update(self,
|
|
123
|
+
setting: entities.BaseSetting = None,
|
|
124
|
+
setting_id: str = None,
|
|
125
|
+
setting_name: str = None,
|
|
126
|
+
setting_value=None,
|
|
127
|
+
setting_default_value=None,
|
|
128
|
+
) -> entities.Setting:
|
|
129
|
+
"""
|
|
130
|
+
Update a setting
|
|
131
|
+
|
|
132
|
+
:param Setting setting: setting entity
|
|
133
|
+
:param str setting_id: the setting id
|
|
134
|
+
:param str setting_name: the setting name
|
|
135
|
+
:param setting_value: the setting value
|
|
136
|
+
:param setting_default_value: the setting default value
|
|
137
|
+
:return: setting entity
|
|
138
|
+
"""
|
|
139
|
+
if sum([1 for param in [setting_name, setting_value] if param is None]) > 0 \
|
|
140
|
+
and setting is None:
|
|
141
|
+
raise exceptions.PlatformException('400', 'Must provide setting object or'
|
|
142
|
+
'setting_name, setting_value and setting_value_type')
|
|
143
|
+
|
|
144
|
+
if setting is None:
|
|
145
|
+
setting = self.get(setting_id=setting_id)
|
|
146
|
+
setting.name = setting_name
|
|
147
|
+
setting.value = setting_value
|
|
148
|
+
if setting_default_value is not None:
|
|
149
|
+
setting.default_value = setting_default_value
|
|
150
|
+
|
|
151
|
+
patch = setting.to_json()
|
|
152
|
+
patch.pop('id')
|
|
153
|
+
patch.pop('name')
|
|
154
|
+
success, response = self._client_api.gen_request(
|
|
155
|
+
req_type='patch',
|
|
156
|
+
path='{}/{}'.format(
|
|
157
|
+
BASE_URL,
|
|
158
|
+
setting.id
|
|
159
|
+
),
|
|
160
|
+
json_req=patch
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
if success:
|
|
164
|
+
_json = response.json()
|
|
165
|
+
constructor = self.get_constructor(_json)
|
|
166
|
+
else:
|
|
167
|
+
raise exceptions.PlatformException(response)
|
|
168
|
+
|
|
169
|
+
return constructor(
|
|
170
|
+
_json=_json,
|
|
171
|
+
client_api=self._client_api,
|
|
172
|
+
project=self._project,
|
|
173
|
+
org=self._org
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
def delete(self, setting_id: str) -> bool:
|
|
177
|
+
"""
|
|
178
|
+
Delete a setting
|
|
179
|
+
|
|
180
|
+
:param str setting_id: the setting id
|
|
181
|
+
:return: True if success exceptions if not
|
|
182
|
+
"""
|
|
183
|
+
success, response = self._client_api.gen_request(
|
|
184
|
+
req_type='delete',
|
|
185
|
+
path='{}/{}'.format(
|
|
186
|
+
BASE_URL,
|
|
187
|
+
setting_id
|
|
188
|
+
)
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
if success:
|
|
192
|
+
return True
|
|
193
|
+
else:
|
|
194
|
+
raise exceptions.PlatformException(response)
|
|
195
|
+
|
|
196
|
+
def get(self, setting_name: str = None, setting_id: str = None) -> entities.Setting:
|
|
197
|
+
"""
|
|
198
|
+
Get a setting by id
|
|
199
|
+
|
|
200
|
+
:param str setting_name: the setting name
|
|
201
|
+
:param str setting_id: the setting id
|
|
202
|
+
:return: setting entity
|
|
203
|
+
"""
|
|
204
|
+
if setting_id is not None:
|
|
205
|
+
success, response = self._client_api.gen_request(
|
|
206
|
+
req_type='get',
|
|
207
|
+
path='{}/{}'.format(
|
|
208
|
+
BASE_URL,
|
|
209
|
+
setting_id
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
if success:
|
|
214
|
+
_json = response.json()
|
|
215
|
+
constructor = self.get_constructor(_json)
|
|
216
|
+
setting = constructor(
|
|
217
|
+
_json=_json,
|
|
218
|
+
client_api=self._client_api,
|
|
219
|
+
project=self._project,
|
|
220
|
+
org=self._org
|
|
221
|
+
)
|
|
222
|
+
else:
|
|
223
|
+
raise exceptions.PlatformException(response)
|
|
224
|
+
elif setting_name is not None:
|
|
225
|
+
if not isinstance(setting_name, str):
|
|
226
|
+
raise exceptions.PlatformException(
|
|
227
|
+
error='400',
|
|
228
|
+
message='setting_name must be strings')
|
|
229
|
+
settings = self.list(
|
|
230
|
+
filters=entities.Filters(field='name', values=setting_name, resource=entities.FiltersResource.SETTINGS))
|
|
231
|
+
if len(settings.items) > 1:
|
|
232
|
+
raise exceptions.PlatformException(
|
|
233
|
+
error='404',
|
|
234
|
+
message='More than one setting with same name. Please "get" by id')
|
|
235
|
+
elif len(settings.items) == 0:
|
|
236
|
+
raise exceptions.PlatformException('404', 'setting not found')
|
|
237
|
+
else:
|
|
238
|
+
setting = settings.items[0]
|
|
239
|
+
else:
|
|
240
|
+
raise exceptions.PlatformException(
|
|
241
|
+
error='400',
|
|
242
|
+
message='Must provide at least ONE of the following params: setting_id, setting_name.')
|
|
243
|
+
return setting
|
|
244
|
+
|
|
245
|
+
def _list(self, filters: entities.Filters):
|
|
246
|
+
success, response = self._client_api.gen_request(
|
|
247
|
+
req_type='post',
|
|
248
|
+
path='{}/query'.format(BASE_URL),
|
|
249
|
+
json_req=filters.prepare()
|
|
250
|
+
)
|
|
251
|
+
if not success:
|
|
252
|
+
raise exceptions.PlatformException(response)
|
|
253
|
+
return response.json()
|
|
254
|
+
|
|
255
|
+
def list(self, filters: entities.Filters = None) -> entities.PagedEntities:
|
|
256
|
+
"""
|
|
257
|
+
List settings
|
|
258
|
+
|
|
259
|
+
:param dtlpy.entities.filters.Filters filters: Filters entity or a dictionary containing filters parameters
|
|
260
|
+
:return: Paged entity
|
|
261
|
+
:rtype: dtlpy.entities.paged_entities.PagedEntities
|
|
262
|
+
"""
|
|
263
|
+
if filters is None:
|
|
264
|
+
filters = entities.Filters(resource=entities.FiltersResource.SETTINGS)
|
|
265
|
+
filters.sort_by(entities.FiltersOrderByDirection.ASCENDING)
|
|
266
|
+
|
|
267
|
+
if filters.resource != entities.FiltersResource.SETTINGS:
|
|
268
|
+
raise exceptions.PlatformException(
|
|
269
|
+
error='400',
|
|
270
|
+
message='Filters resource must to be FiltersResource.SETTINGS . Got: {!r}'.format(filters.resource))
|
|
271
|
+
|
|
272
|
+
if self._project is not None:
|
|
273
|
+
filters.add(field='scope.id', values=self._project.id)
|
|
274
|
+
|
|
275
|
+
paged = entities.PagedEntities(
|
|
276
|
+
items_repository=self,
|
|
277
|
+
filters=filters,
|
|
278
|
+
page_offset=filters.page,
|
|
279
|
+
page_size=filters.page_size,
|
|
280
|
+
project_id=self._project.id if self._project is not None else None,
|
|
281
|
+
client_api=self._client_api
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
paged.get_page()
|
|
285
|
+
|
|
286
|
+
return paged
|
|
287
|
+
|
|
288
|
+
def resolve(
|
|
289
|
+
self,
|
|
290
|
+
user_email: str,
|
|
291
|
+
org_id: str = None,
|
|
292
|
+
project_id: str = None,
|
|
293
|
+
dataset_id: str = None,
|
|
294
|
+
task_id: str = None,
|
|
295
|
+
):
|
|
296
|
+
"""
|
|
297
|
+
return all the settings that relevant to the provider params
|
|
298
|
+
|
|
299
|
+
:param str user_email: user email
|
|
300
|
+
:param str org_id: org id
|
|
301
|
+
:param str project_id: project id
|
|
302
|
+
:param str dataset_id: dataset id
|
|
303
|
+
:param str task_id: task id
|
|
304
|
+
"""
|
|
305
|
+
payload = {
|
|
306
|
+
'userId': user_email
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
if self._project:
|
|
310
|
+
payload['projectId'] = self._project.id
|
|
311
|
+
elif project_id:
|
|
312
|
+
payload['projectId'] = project_id
|
|
313
|
+
|
|
314
|
+
if self._org:
|
|
315
|
+
payload['orgId'] = self._org.id
|
|
316
|
+
elif org_id:
|
|
317
|
+
payload['orgId'] = org_id
|
|
318
|
+
|
|
319
|
+
if self._dataset:
|
|
320
|
+
payload['datasetId'] = self._dataset.id
|
|
321
|
+
elif dataset_id:
|
|
322
|
+
payload['datasetId'] = dataset_id
|
|
323
|
+
|
|
324
|
+
if self._task:
|
|
325
|
+
payload['taskId'] = self._task.id
|
|
326
|
+
elif task_id:
|
|
327
|
+
payload['taskId'] = task_id
|
|
328
|
+
|
|
329
|
+
success, response = self._client_api.gen_request(
|
|
330
|
+
req_type='post',
|
|
331
|
+
path='{}/resolve'.format(BASE_URL),
|
|
332
|
+
json_req=payload
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
if success:
|
|
336
|
+
_json = response.json()
|
|
337
|
+
return self._build_entities_from_response(response_items=_json)
|
|
338
|
+
else:
|
|
339
|
+
raise exceptions.PlatformException(response)
|