dtlpy 1.114.17__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 -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 +292 -296
- dtlpy/entities/collection.py +38 -38
- dtlpy/entities/command.py +169 -169
- dtlpy/entities/compute.py +449 -442
- dtlpy/entities/dataset.py +1299 -1285
- dtlpy/entities/directory_tree.py +44 -44
- dtlpy/entities/dpk.py +470 -470
- dtlpy/entities/driver.py +235 -223
- dtlpy/entities/execution.py +397 -397
- dtlpy/entities/feature.py +124 -124
- dtlpy/entities/feature_set.py +145 -145
- dtlpy/entities/filters.py +798 -645
- dtlpy/entities/gis_item.py +107 -107
- dtlpy/entities/integration.py +184 -184
- dtlpy/entities/item.py +959 -953
- 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 -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 +963 -958
- 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 -1086
- 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 -158
- dtlpy/repositories/compositions.py +61 -61
- dtlpy/repositories/computes.py +439 -435
- dtlpy/repositories/datasets.py +1504 -1291
- dtlpy/repositories/downloader.py +976 -903
- dtlpy/repositories/dpks.py +433 -433
- dtlpy/repositories/drivers.py +482 -470
- dtlpy/repositories/executions.py +815 -817
- dtlpy/repositories/feature_sets.py +226 -226
- dtlpy/repositories/features.py +255 -238
- dtlpy/repositories/integrations.py +484 -484
- dtlpy/repositories/items.py +912 -909
- dtlpy/repositories/messages.py +94 -94
- dtlpy/repositories/models.py +1000 -988
- 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 -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 +1785 -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 +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.114.17.data → dtlpy-1.116.6.data}/scripts/dlp +1 -1
- dtlpy-1.116.6.data/scripts/dlp.bat +2 -0
- {dtlpy-1.114.17.data → dtlpy-1.116.6.data}/scripts/dlp.py +128 -128
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/METADATA +186 -183
- dtlpy-1.116.6.dist-info/RECORD +239 -0
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/WHEEL +1 -1
- {dtlpy-1.114.17.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.114.17.data/scripts/dlp.bat +0 -2
- dtlpy-1.114.17.dist-info/RECORD +0 -240
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.114.17.dist-info → dtlpy-1.116.6.dist-info}/top_level.txt +0 -0
dtlpy/entities/dpk.py
CHANGED
|
@@ -1,470 +1,470 @@
|
|
|
1
|
-
from collections import namedtuple
|
|
2
|
-
from typing import List, Union
|
|
3
|
-
import traceback
|
|
4
|
-
import enum
|
|
5
|
-
|
|
6
|
-
from .. import entities, repositories, exceptions
|
|
7
|
-
from ..services.api_client import ApiClient
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class SlotType(str, enum.Enum):
|
|
11
|
-
ITEM_VIEWER = 'itemViewer'
|
|
12
|
-
FLOATING_WINDOW = 'floatingWindow'
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
DEFAULT_STOPS = {SlotType.ITEM_VIEWER: {"type": "itemViewer",
|
|
16
|
-
"configuration": {"layout": {"leftBar": True,
|
|
17
|
-
"rightBar": True,
|
|
18
|
-
"bottomBar": True,
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
SlotType.FLOATING_WINDOW: {"type": "floatingWindow",
|
|
23
|
-
"configuration": {"layout": {"width": 455,
|
|
24
|
-
"height": 340,
|
|
25
|
-
"resizable": True,
|
|
26
|
-
"backgroundColor": "dl-color-studio-panel"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class Slot(entities.DlEntity):
|
|
34
|
-
type: str = entities.DlProperty(location=['type'], _type=str)
|
|
35
|
-
configuration: dict = entities.DlProperty(location=['configuration'], _type=dict)
|
|
36
|
-
|
|
37
|
-
def to_json(self) -> dict:
|
|
38
|
-
return self._dict.copy()
|
|
39
|
-
|
|
40
|
-
@classmethod
|
|
41
|
-
def from_json(cls, _json):
|
|
42
|
-
return cls(_dict=_json)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class Toolbar(entities.DlEntity):
|
|
46
|
-
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
47
|
-
display_name: str = entities.DlProperty(location=['displayName'], _type=str)
|
|
48
|
-
conditions: dict = entities.DlProperty(location=['conditions'], _type=dict)
|
|
49
|
-
invoke: dict = entities.DlProperty(location=['invoke'], _type=dict)
|
|
50
|
-
location: str = entities.DlProperty(location=['location'], _type=str)
|
|
51
|
-
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
52
|
-
action: str = entities.DlProperty(location=['action'], _type=str, default=None)
|
|
53
|
-
|
|
54
|
-
def to_json(self) -> dict:
|
|
55
|
-
return self._dict.copy()
|
|
56
|
-
|
|
57
|
-
@classmethod
|
|
58
|
-
def from_json(cls, _json):
|
|
59
|
-
return cls(_dict=_json)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
class Panel(entities.DlEntity):
|
|
63
|
-
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
64
|
-
path: str = entities.DlProperty(location=['path'], _type=str, default=None)
|
|
65
|
-
min_role: list = entities.DlProperty(location=['minRole'], _type=list)
|
|
66
|
-
supported_slots: list = entities.DlProperty(location=['supportedSlots'], _type=list)
|
|
67
|
-
|
|
68
|
-
metadata = entities.DlProperty(location=['metadata'], _type=list)
|
|
69
|
-
default_settings = entities.DlProperty(location=['defaultSettings'], _type=list)
|
|
70
|
-
conditions = entities.DlProperty(location=['conditions'], _type=list)
|
|
71
|
-
|
|
72
|
-
def to_json(self) -> dict:
|
|
73
|
-
return self._dict.copy()
|
|
74
|
-
|
|
75
|
-
@classmethod
|
|
76
|
-
def from_json(cls, _json):
|
|
77
|
-
return cls(_dict=_json)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
class ToolbarInvoke(entities.DlEntity):
|
|
81
|
-
type: str = entities.DlProperty(location=['type'], _type=str)
|
|
82
|
-
panel: str = entities.DlProperty(location=['panel'], _type=str)
|
|
83
|
-
namespace: str = entities.DlProperty(location=['namespace'], _type=str)
|
|
84
|
-
source: str = entities.DlProperty(location=['source'], _type=str)
|
|
85
|
-
input_options: dict = entities.DlProperty(location=['inputOptions'], _type=dict)
|
|
86
|
-
|
|
87
|
-
def to_json(self) -> dict:
|
|
88
|
-
return self._dict.copy()
|
|
89
|
-
|
|
90
|
-
@classmethod
|
|
91
|
-
def from_json(cls, _json):
|
|
92
|
-
return cls(_dict=_json)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
class CustomNodeScope(str, enum.Enum):
|
|
96
|
-
GLOBAL = "global",
|
|
97
|
-
PROJECT = "project",
|
|
98
|
-
NODE = 'node'
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
class PipelineNode(entities.DlEntity):
|
|
102
|
-
display_name: str = entities.DlProperty(location=['displayName'], _type=str)
|
|
103
|
-
panel: str = entities.DlProperty(location=['panel'], _type=str)
|
|
104
|
-
invoke: ToolbarInvoke = entities.DlProperty(location=['invoke'], _kls='ToolbarInvoke')
|
|
105
|
-
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
106
|
-
categories: List[str] = entities.DlProperty(location=['categories'], _type=list)
|
|
107
|
-
description: str = entities.DlProperty(location=['description'], _type=str)
|
|
108
|
-
configuration: dict = entities.DlProperty(location=['configuration'], _type=dict)
|
|
109
|
-
scope: CustomNodeScope = entities.DlProperty(location=['scope'], _type=CustomNodeScope)
|
|
110
|
-
compute_config: str = entities.DlProperty(location=['computeConfig'], _type=str, default=None)
|
|
111
|
-
|
|
112
|
-
def to_json(self) -> dict:
|
|
113
|
-
return self._dict.copy()
|
|
114
|
-
|
|
115
|
-
@classmethod
|
|
116
|
-
def from_json(cls, _json):
|
|
117
|
-
return cls(_dict=_json)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
class DpkComputeConfig(entities.DlEntity):
|
|
121
|
-
run_execution_as_process: bool = entities.DlProperty(location=['runExecutionAsProcess'], _type=bool)
|
|
122
|
-
execution_timeout: int = entities.DlProperty(location=['executionTimeout'], _type=int)
|
|
123
|
-
drain_time: int = entities.DlProperty(location=['drainTime'], _type=int)
|
|
124
|
-
on_reset: str = entities.DlProperty(location=['onReset'], _type=str)
|
|
125
|
-
runtime: dict = entities.DlProperty(location=['runtime'], _type=dict)
|
|
126
|
-
bot_user_name: str = entities.DlProperty(location=['botUserName'], _type=str)
|
|
127
|
-
max_attempts: int = entities.DlProperty(location=['maxAttempts'], _type=int)
|
|
128
|
-
use_user_jwt: bool = entities.DlProperty(location=['useUserJwt'], _type=bool)
|
|
129
|
-
driver_id: str = entities.DlProperty(location=['driverId'], _type=str)
|
|
130
|
-
versions: dict = entities.DlProperty(location=['versions'], _type=dict)
|
|
131
|
-
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
132
|
-
integrations: List[dict] = entities.DlProperty(location=['integrations'], _type=list)
|
|
133
|
-
|
|
134
|
-
def to_json(self) -> dict:
|
|
135
|
-
return self._dict.copy()
|
|
136
|
-
|
|
137
|
-
@classmethod
|
|
138
|
-
def from_json(cls, _json):
|
|
139
|
-
return cls(_dict=_json)
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
class DpkComponentChannel(entities.DlEntity):
|
|
143
|
-
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
144
|
-
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
145
|
-
description: str = entities.DlProperty(location=['description'], _type=str)
|
|
146
|
-
is_global: bool = entities.DlProperty(location=['global'], _type=bool)
|
|
147
|
-
metadata: dict = entities.DlProperty(location=['metadata'], _type=dict)
|
|
148
|
-
context: dict = entities.DlProperty(location=['context'], _type=dict)
|
|
149
|
-
filters: List[dict] = entities.DlProperty(location=['filters'], _type=list)
|
|
150
|
-
|
|
151
|
-
def to_json(self) -> dict:
|
|
152
|
-
return self._dict.copy()
|
|
153
|
-
|
|
154
|
-
@classmethod
|
|
155
|
-
def from_json(cls, _json):
|
|
156
|
-
return cls(_dict=_json)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
class Components(entities.DlEntity):
|
|
160
|
-
panels: List[Panel] = entities.DlProperty(location=['panels'], _kls='Panel')
|
|
161
|
-
modules: List[entities.PackageModule] = entities.DlProperty(location=['modules'], _kls='PackageModule')
|
|
162
|
-
services: List[dict] = entities.DlProperty(location=['services'])
|
|
163
|
-
triggers: List[dict] = entities.DlProperty(location=['triggers'])
|
|
164
|
-
pipeline_nodes: List[PipelineNode] = entities.DlProperty(location=['pipelineNodes'])
|
|
165
|
-
toolbars: List[Toolbar] = entities.DlProperty(location=['toolbars'], _kls='Toolbar')
|
|
166
|
-
models: List[dict] = entities.DlProperty(location=['models'])
|
|
167
|
-
compute_configs: List[DpkComputeConfig] = entities.DlProperty(location=['computeConfigs'], _kls='DpkComputeConfig')
|
|
168
|
-
channels: List[DpkComponentChannel] = entities.DlProperty(location=['channels'], _kls='DpkComponentChannel')
|
|
169
|
-
pipeline_templates: List[dict] = entities.DlProperty(location=['pipelineTemplates'])
|
|
170
|
-
integrations: List[dict] = entities.DlProperty(location=['integrations'])
|
|
171
|
-
|
|
172
|
-
@panels.default
|
|
173
|
-
def default_panels(self):
|
|
174
|
-
self._dict['panels'] = list()
|
|
175
|
-
return self._dict['panels']
|
|
176
|
-
|
|
177
|
-
@modules.default
|
|
178
|
-
def default_modules(self):
|
|
179
|
-
self._dict['modules'] = list()
|
|
180
|
-
return self._dict['modules']
|
|
181
|
-
|
|
182
|
-
@services.default
|
|
183
|
-
def default_services(self):
|
|
184
|
-
self._dict['services'] = list()
|
|
185
|
-
return self._dict['services']
|
|
186
|
-
|
|
187
|
-
@triggers.default
|
|
188
|
-
def default_triggers(self):
|
|
189
|
-
self._dict['triggers'] = list()
|
|
190
|
-
return self._dict['triggers']
|
|
191
|
-
|
|
192
|
-
@pipeline_nodes.default
|
|
193
|
-
def default_pipelines(self):
|
|
194
|
-
self._dict['pipelines'] = list()
|
|
195
|
-
return self._dict['pipelines']
|
|
196
|
-
|
|
197
|
-
@toolbars.default
|
|
198
|
-
def default_toolbars(self):
|
|
199
|
-
self._dict['toolbars'] = list()
|
|
200
|
-
return self._dict['toolbars']
|
|
201
|
-
|
|
202
|
-
@models.default
|
|
203
|
-
def default_models(self):
|
|
204
|
-
self._dict['models'] = list()
|
|
205
|
-
return self._dict['models']
|
|
206
|
-
|
|
207
|
-
@compute_configs.default
|
|
208
|
-
def default_compute_configs(self):
|
|
209
|
-
self._dict['computeConfigs'] = list()
|
|
210
|
-
return self._dict['computeConfigs']
|
|
211
|
-
|
|
212
|
-
@channels.default
|
|
213
|
-
def default_channels(self):
|
|
214
|
-
self._dict['channels'] = list()
|
|
215
|
-
return self._dict['channels']
|
|
216
|
-
|
|
217
|
-
@pipeline_templates.default
|
|
218
|
-
def default_pipeline_templates(self):
|
|
219
|
-
self._dict['pipelineTemplates'] = list()
|
|
220
|
-
return self._dict['pipelineTemplates']
|
|
221
|
-
|
|
222
|
-
@classmethod
|
|
223
|
-
def from_json(cls, _json):
|
|
224
|
-
inst = cls(_dict=_json)
|
|
225
|
-
return inst
|
|
226
|
-
|
|
227
|
-
def to_json(self):
|
|
228
|
-
return self._dict.copy()
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
class Dpk(entities.DlEntity):
|
|
232
|
-
# name change
|
|
233
|
-
id: str = entities.DlProperty(location=['id'], _type=str)
|
|
234
|
-
base_id: str = entities.DlProperty(location=['baseId'], _type=str)
|
|
235
|
-
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
236
|
-
version: str = entities.DlProperty(location=['version'], _type=str)
|
|
237
|
-
attributes: dict = entities.DlProperty(location=['attributes'], _type=dict)
|
|
238
|
-
created_at: str = entities.DlProperty(location=['createdAt'], _type=str)
|
|
239
|
-
updated_at: str = entities.DlProperty(location=['updatedAt'], _type=str)
|
|
240
|
-
creator: str = entities.DlProperty(location=['creator'], _type=str)
|
|
241
|
-
display_name: str = entities.DlProperty(location=['displayName'], _type=str)
|
|
242
|
-
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
243
|
-
tags: list = entities.DlProperty(location=['tags'], _type=list)
|
|
244
|
-
codebase: Union[entities.Codebase, None] = entities.DlProperty(location=['codebase'], _kls="Codebase")
|
|
245
|
-
scope: str = entities.DlProperty(location=['scope'], _type=str)
|
|
246
|
-
context: dict = entities.DlProperty(location=['context'], _type=dict)
|
|
247
|
-
metadata: dict = entities.DlProperty(location=['metadata'], _type=dict)
|
|
248
|
-
dependencies: dict = entities.DlProperty(location=['dependencies'], _type=List[dict])
|
|
249
|
-
|
|
250
|
-
# defaults
|
|
251
|
-
components: Components = entities.DlProperty(location=['components'], _kls='Components')
|
|
252
|
-
description: str = entities.DlProperty(location=['description'], _type=str)
|
|
253
|
-
url: str = entities.DlProperty(location=['url'], _type=str)
|
|
254
|
-
|
|
255
|
-
# sdk
|
|
256
|
-
client_api: ApiClient
|
|
257
|
-
project: entities.Project
|
|
258
|
-
_revisions = None
|
|
259
|
-
__repositories = None
|
|
260
|
-
|
|
261
|
-
@components.default
|
|
262
|
-
def default_components(self):
|
|
263
|
-
self._dict['components'] = dict()
|
|
264
|
-
return self._dict['components']
|
|
265
|
-
|
|
266
|
-
################
|
|
267
|
-
# repositories #
|
|
268
|
-
################
|
|
269
|
-
@property
|
|
270
|
-
def _repositories(self):
|
|
271
|
-
if self.__repositories is None:
|
|
272
|
-
reps = namedtuple('repositories',
|
|
273
|
-
field_names=['dpks', 'codebases', 'organizations', 'services'])
|
|
274
|
-
|
|
275
|
-
self.__repositories = reps(
|
|
276
|
-
dpks=repositories.Dpks(client_api=self.client_api, project=self.project),
|
|
277
|
-
codebases=repositories.Codebases(client_api=self.client_api),
|
|
278
|
-
organizations=repositories.Organizations(client_api=self.client_api),
|
|
279
|
-
services=repositories.Services(client_api=self.client_api, project=self.project, package=self),
|
|
280
|
-
)
|
|
281
|
-
|
|
282
|
-
return self.__repositories
|
|
283
|
-
|
|
284
|
-
@property
|
|
285
|
-
def codebases(self):
|
|
286
|
-
assert isinstance(self._repositories.codebases, repositories.Codebases)
|
|
287
|
-
return self._repositories.codebases
|
|
288
|
-
|
|
289
|
-
@property
|
|
290
|
-
def organizations(self):
|
|
291
|
-
assert isinstance(self._repositories.organizations, repositories.Organizations)
|
|
292
|
-
return self._repositories.organizationsFapp
|
|
293
|
-
|
|
294
|
-
@property
|
|
295
|
-
def dpks(self) -> 'repositories.Dpks':
|
|
296
|
-
assert isinstance(self._repositories.dpks, repositories.Dpks)
|
|
297
|
-
return self._repositories.dpks
|
|
298
|
-
|
|
299
|
-
@property
|
|
300
|
-
def services(self):
|
|
301
|
-
assert isinstance(self._repositories.services, repositories.Services)
|
|
302
|
-
return self._repositories.services
|
|
303
|
-
|
|
304
|
-
###########
|
|
305
|
-
# methods #
|
|
306
|
-
###########
|
|
307
|
-
def publish(self):
|
|
308
|
-
"""
|
|
309
|
-
Publish the dpk to Dataloop platform.
|
|
310
|
-
|
|
311
|
-
**Example**
|
|
312
|
-
.. code-block:: python
|
|
313
|
-
published_dpk = dpk.publish()
|
|
314
|
-
"""
|
|
315
|
-
return self.dpks.publish(dpk=self)
|
|
316
|
-
|
|
317
|
-
def update(self):
|
|
318
|
-
"""
|
|
319
|
-
Update the dpk attributes to Dataloop platform.
|
|
320
|
-
|
|
321
|
-
**Example**
|
|
322
|
-
.. code-block:: python
|
|
323
|
-
updated_dpk = dpk.update()
|
|
324
|
-
"""
|
|
325
|
-
return self.dpks.update(dpk=self)
|
|
326
|
-
|
|
327
|
-
def pull(self, local_path):
|
|
328
|
-
"""
|
|
329
|
-
Pulls the app from the platform as dpk file.
|
|
330
|
-
|
|
331
|
-
Note: you must pass either dpk_name or dpk_id to the function.
|
|
332
|
-
:param local_path: the path where you want to install the dpk file.
|
|
333
|
-
:return local path where the package pull
|
|
334
|
-
|
|
335
|
-
**Example**
|
|
336
|
-
..code-block:: python
|
|
337
|
-
path = dl.dpks.pull(dpk_name='my-app')
|
|
338
|
-
"""
|
|
339
|
-
return self.dpks.pull(dpk=self, local_path=local_path)
|
|
340
|
-
|
|
341
|
-
def delete(self):
|
|
342
|
-
"""
|
|
343
|
-
Delete the dpk from the app store.
|
|
344
|
-
|
|
345
|
-
Note: after removing the dpk, you cant get it again, it's advised to pull it first.
|
|
346
|
-
|
|
347
|
-
:return whether the operation ran successfully
|
|
348
|
-
:rtype bool
|
|
349
|
-
"""
|
|
350
|
-
return self.dpks.delete(self.id)
|
|
351
|
-
|
|
352
|
-
def _get_revision_pages(self, filters: entities.Filters = None) -> entities.PagedEntities:
|
|
353
|
-
"""
|
|
354
|
-
returns the available versions of the dpk.
|
|
355
|
-
|
|
356
|
-
:param entities.Filters filters: the filters to apply to the search.
|
|
357
|
-
:return the available versions of the dpk.
|
|
358
|
-
|
|
359
|
-
** Example **
|
|
360
|
-
..code-block:: python
|
|
361
|
-
versions = dl.dpks.revisions(dpk_name='name')
|
|
362
|
-
"""
|
|
363
|
-
if filters is None:
|
|
364
|
-
filters = entities.Filters(resource=entities.FiltersResource.DPK)
|
|
365
|
-
elif not isinstance(filters, entities.Filters):
|
|
366
|
-
raise ValueError('Unknown filters type: {!r}'.format(type(filters)))
|
|
367
|
-
elif filters.resource != entities.FiltersResource.DPK:
|
|
368
|
-
raise TypeError('Filters resource must to be FiltersResource.DPK. Got: {!r}'.format(filters.resource))
|
|
369
|
-
|
|
370
|
-
paged = entities.PagedEntities(items_repository=self,
|
|
371
|
-
filters=filters,
|
|
372
|
-
page_offset=filters.page,
|
|
373
|
-
page_size=filters.page_size,
|
|
374
|
-
client_api=self.client_api,
|
|
375
|
-
list_function=self._list_revisions)
|
|
376
|
-
paged.get_page()
|
|
377
|
-
return paged
|
|
378
|
-
|
|
379
|
-
def _build_entities_from_response(self, response_items):
|
|
380
|
-
return self.dpks._build_entities_from_response(response_items=response_items)
|
|
381
|
-
|
|
382
|
-
def _list_revisions(self, filters: entities.Filters):
|
|
383
|
-
url = '/app-registry/{}/revisions'.format(self.name)
|
|
384
|
-
# request
|
|
385
|
-
success, response = self.client_api.gen_request(req_type='post',
|
|
386
|
-
path=url,
|
|
387
|
-
json_req=filters.prepare())
|
|
388
|
-
if not success:
|
|
389
|
-
raise exceptions.PlatformException(response)
|
|
390
|
-
return response.json()
|
|
391
|
-
|
|
392
|
-
@property
|
|
393
|
-
def revisions(self):
|
|
394
|
-
"""
|
|
395
|
-
Returns the available versions of the dpk.
|
|
396
|
-
|
|
397
|
-
:return List[Dpk]
|
|
398
|
-
|
|
399
|
-
** Example **
|
|
400
|
-
..code-block:: python
|
|
401
|
-
versions = dpk.revisions
|
|
402
|
-
"""
|
|
403
|
-
if self._revisions is None:
|
|
404
|
-
self._revisions = self._get_revision_pages()
|
|
405
|
-
return self._revisions
|
|
406
|
-
|
|
407
|
-
def get_revisions(self, version: str):
|
|
408
|
-
"""
|
|
409
|
-
Get the dpk with the specified version.
|
|
410
|
-
|
|
411
|
-
:param str version: the version of the dpk to get.
|
|
412
|
-
:return: Dpk
|
|
413
|
-
|
|
414
|
-
** Example **
|
|
415
|
-
..code-block:: python
|
|
416
|
-
dpk = dpk.get_revisions(version='1.0.0')
|
|
417
|
-
"""
|
|
418
|
-
return self.dpks.get_revisions(dpk_id=self.base_id, version=version)
|
|
419
|
-
|
|
420
|
-
@staticmethod
|
|
421
|
-
def _protected_from_json(_json, client_api, project, is_fetched=True):
|
|
422
|
-
"""
|
|
423
|
-
Same as from_json but with try-except to catch if error
|
|
424
|
-
|
|
425
|
-
:param _json: platform json
|
|
426
|
-
:param client_api: ApiClient entity
|
|
427
|
-
:return:
|
|
428
|
-
"""
|
|
429
|
-
try:
|
|
430
|
-
package = Dpk.from_json(_json=_json,
|
|
431
|
-
client_api=client_api,
|
|
432
|
-
project=project,
|
|
433
|
-
is_fetched=is_fetched)
|
|
434
|
-
status = True
|
|
435
|
-
except Exception:
|
|
436
|
-
package = traceback.format_exc()
|
|
437
|
-
status = False
|
|
438
|
-
return status, package
|
|
439
|
-
|
|
440
|
-
def to_json(self):
|
|
441
|
-
"""
|
|
442
|
-
convert the class to json
|
|
443
|
-
"""
|
|
444
|
-
_json = self._dict.copy()
|
|
445
|
-
return _json
|
|
446
|
-
|
|
447
|
-
@classmethod
|
|
448
|
-
def from_json(cls,
|
|
449
|
-
_json,
|
|
450
|
-
client_api: ApiClient = None,
|
|
451
|
-
project: entities.Project = None,
|
|
452
|
-
is_fetched=True) -> 'Dpk':
|
|
453
|
-
"""
|
|
454
|
-
Turn platform representation of app into an app entity
|
|
455
|
-
|
|
456
|
-
:param dict _json: platform representation of package
|
|
457
|
-
:param dl.ApiClient client_api: ApiClient entity
|
|
458
|
-
:param dl.entities.Project project: The project where the dpk resides
|
|
459
|
-
:param bool is_fetched: is Entity fetched from Platform
|
|
460
|
-
:return: App entity
|
|
461
|
-
:rtype: dtlpy.entities.App
|
|
462
|
-
"""
|
|
463
|
-
res = cls(
|
|
464
|
-
_dict=_json,
|
|
465
|
-
client_api=client_api,
|
|
466
|
-
project=project,
|
|
467
|
-
is_fetched=is_fetched
|
|
468
|
-
)
|
|
469
|
-
|
|
470
|
-
return res
|
|
1
|
+
from collections import namedtuple
|
|
2
|
+
from typing import List, Union
|
|
3
|
+
import traceback
|
|
4
|
+
import enum
|
|
5
|
+
|
|
6
|
+
from .. import entities, repositories, exceptions
|
|
7
|
+
from ..services.api_client import ApiClient
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SlotType(str, enum.Enum):
|
|
11
|
+
ITEM_VIEWER = 'itemViewer'
|
|
12
|
+
FLOATING_WINDOW = 'floatingWindow'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
DEFAULT_STOPS = {SlotType.ITEM_VIEWER: {"type": "itemViewer",
|
|
16
|
+
"configuration": {"layout": {"leftBar": True,
|
|
17
|
+
"rightBar": True,
|
|
18
|
+
"bottomBar": True,
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
SlotType.FLOATING_WINDOW: {"type": "floatingWindow",
|
|
23
|
+
"configuration": {"layout": {"width": 455,
|
|
24
|
+
"height": 340,
|
|
25
|
+
"resizable": True,
|
|
26
|
+
"backgroundColor": "dl-color-studio-panel"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Slot(entities.DlEntity):
|
|
34
|
+
type: str = entities.DlProperty(location=['type'], _type=str)
|
|
35
|
+
configuration: dict = entities.DlProperty(location=['configuration'], _type=dict)
|
|
36
|
+
|
|
37
|
+
def to_json(self) -> dict:
|
|
38
|
+
return self._dict.copy()
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def from_json(cls, _json):
|
|
42
|
+
return cls(_dict=_json)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class Toolbar(entities.DlEntity):
|
|
46
|
+
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
47
|
+
display_name: str = entities.DlProperty(location=['displayName'], _type=str)
|
|
48
|
+
conditions: dict = entities.DlProperty(location=['conditions'], _type=dict)
|
|
49
|
+
invoke: dict = entities.DlProperty(location=['invoke'], _type=dict)
|
|
50
|
+
location: str = entities.DlProperty(location=['location'], _type=str)
|
|
51
|
+
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
52
|
+
action: str = entities.DlProperty(location=['action'], _type=str, default=None)
|
|
53
|
+
|
|
54
|
+
def to_json(self) -> dict:
|
|
55
|
+
return self._dict.copy()
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
def from_json(cls, _json):
|
|
59
|
+
return cls(_dict=_json)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class Panel(entities.DlEntity):
|
|
63
|
+
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
64
|
+
path: str = entities.DlProperty(location=['path'], _type=str, default=None)
|
|
65
|
+
min_role: list = entities.DlProperty(location=['minRole'], _type=list)
|
|
66
|
+
supported_slots: list = entities.DlProperty(location=['supportedSlots'], _type=list)
|
|
67
|
+
|
|
68
|
+
metadata = entities.DlProperty(location=['metadata'], _type=list)
|
|
69
|
+
default_settings = entities.DlProperty(location=['defaultSettings'], _type=list)
|
|
70
|
+
conditions = entities.DlProperty(location=['conditions'], _type=list)
|
|
71
|
+
|
|
72
|
+
def to_json(self) -> dict:
|
|
73
|
+
return self._dict.copy()
|
|
74
|
+
|
|
75
|
+
@classmethod
|
|
76
|
+
def from_json(cls, _json):
|
|
77
|
+
return cls(_dict=_json)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class ToolbarInvoke(entities.DlEntity):
|
|
81
|
+
type: str = entities.DlProperty(location=['type'], _type=str)
|
|
82
|
+
panel: str = entities.DlProperty(location=['panel'], _type=str)
|
|
83
|
+
namespace: str = entities.DlProperty(location=['namespace'], _type=str)
|
|
84
|
+
source: str = entities.DlProperty(location=['source'], _type=str)
|
|
85
|
+
input_options: dict = entities.DlProperty(location=['inputOptions'], _type=dict)
|
|
86
|
+
|
|
87
|
+
def to_json(self) -> dict:
|
|
88
|
+
return self._dict.copy()
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def from_json(cls, _json):
|
|
92
|
+
return cls(_dict=_json)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class CustomNodeScope(str, enum.Enum):
|
|
96
|
+
GLOBAL = "global",
|
|
97
|
+
PROJECT = "project",
|
|
98
|
+
NODE = 'node'
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class PipelineNode(entities.DlEntity):
|
|
102
|
+
display_name: str = entities.DlProperty(location=['displayName'], _type=str)
|
|
103
|
+
panel: str = entities.DlProperty(location=['panel'], _type=str)
|
|
104
|
+
invoke: ToolbarInvoke = entities.DlProperty(location=['invoke'], _kls='ToolbarInvoke')
|
|
105
|
+
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
106
|
+
categories: List[str] = entities.DlProperty(location=['categories'], _type=list)
|
|
107
|
+
description: str = entities.DlProperty(location=['description'], _type=str)
|
|
108
|
+
configuration: dict = entities.DlProperty(location=['configuration'], _type=dict)
|
|
109
|
+
scope: CustomNodeScope = entities.DlProperty(location=['scope'], _type=CustomNodeScope)
|
|
110
|
+
compute_config: str = entities.DlProperty(location=['computeConfig'], _type=str, default=None)
|
|
111
|
+
|
|
112
|
+
def to_json(self) -> dict:
|
|
113
|
+
return self._dict.copy()
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def from_json(cls, _json):
|
|
117
|
+
return cls(_dict=_json)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class DpkComputeConfig(entities.DlEntity):
|
|
121
|
+
run_execution_as_process: bool = entities.DlProperty(location=['runExecutionAsProcess'], _type=bool)
|
|
122
|
+
execution_timeout: int = entities.DlProperty(location=['executionTimeout'], _type=int)
|
|
123
|
+
drain_time: int = entities.DlProperty(location=['drainTime'], _type=int)
|
|
124
|
+
on_reset: str = entities.DlProperty(location=['onReset'], _type=str)
|
|
125
|
+
runtime: dict = entities.DlProperty(location=['runtime'], _type=dict)
|
|
126
|
+
bot_user_name: str = entities.DlProperty(location=['botUserName'], _type=str)
|
|
127
|
+
max_attempts: int = entities.DlProperty(location=['maxAttempts'], _type=int)
|
|
128
|
+
use_user_jwt: bool = entities.DlProperty(location=['useUserJwt'], _type=bool)
|
|
129
|
+
driver_id: str = entities.DlProperty(location=['driverId'], _type=str)
|
|
130
|
+
versions: dict = entities.DlProperty(location=['versions'], _type=dict)
|
|
131
|
+
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
132
|
+
integrations: List[dict] = entities.DlProperty(location=['integrations'], _type=list)
|
|
133
|
+
|
|
134
|
+
def to_json(self) -> dict:
|
|
135
|
+
return self._dict.copy()
|
|
136
|
+
|
|
137
|
+
@classmethod
|
|
138
|
+
def from_json(cls, _json):
|
|
139
|
+
return cls(_dict=_json)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class DpkComponentChannel(entities.DlEntity):
|
|
143
|
+
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
144
|
+
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
145
|
+
description: str = entities.DlProperty(location=['description'], _type=str)
|
|
146
|
+
is_global: bool = entities.DlProperty(location=['global'], _type=bool)
|
|
147
|
+
metadata: dict = entities.DlProperty(location=['metadata'], _type=dict)
|
|
148
|
+
context: dict = entities.DlProperty(location=['context'], _type=dict)
|
|
149
|
+
filters: List[dict] = entities.DlProperty(location=['filters'], _type=list)
|
|
150
|
+
|
|
151
|
+
def to_json(self) -> dict:
|
|
152
|
+
return self._dict.copy()
|
|
153
|
+
|
|
154
|
+
@classmethod
|
|
155
|
+
def from_json(cls, _json):
|
|
156
|
+
return cls(_dict=_json)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class Components(entities.DlEntity):
|
|
160
|
+
panels: List[Panel] = entities.DlProperty(location=['panels'], _kls='Panel')
|
|
161
|
+
modules: List[entities.PackageModule] = entities.DlProperty(location=['modules'], _kls='PackageModule')
|
|
162
|
+
services: List[dict] = entities.DlProperty(location=['services'])
|
|
163
|
+
triggers: List[dict] = entities.DlProperty(location=['triggers'])
|
|
164
|
+
pipeline_nodes: List[PipelineNode] = entities.DlProperty(location=['pipelineNodes'])
|
|
165
|
+
toolbars: List[Toolbar] = entities.DlProperty(location=['toolbars'], _kls='Toolbar')
|
|
166
|
+
models: List[dict] = entities.DlProperty(location=['models'])
|
|
167
|
+
compute_configs: List[DpkComputeConfig] = entities.DlProperty(location=['computeConfigs'], _kls='DpkComputeConfig')
|
|
168
|
+
channels: List[DpkComponentChannel] = entities.DlProperty(location=['channels'], _kls='DpkComponentChannel')
|
|
169
|
+
pipeline_templates: List[dict] = entities.DlProperty(location=['pipelineTemplates'])
|
|
170
|
+
integrations: List[dict] = entities.DlProperty(location=['integrations'])
|
|
171
|
+
|
|
172
|
+
@panels.default
|
|
173
|
+
def default_panels(self):
|
|
174
|
+
self._dict['panels'] = list()
|
|
175
|
+
return self._dict['panels']
|
|
176
|
+
|
|
177
|
+
@modules.default
|
|
178
|
+
def default_modules(self):
|
|
179
|
+
self._dict['modules'] = list()
|
|
180
|
+
return self._dict['modules']
|
|
181
|
+
|
|
182
|
+
@services.default
|
|
183
|
+
def default_services(self):
|
|
184
|
+
self._dict['services'] = list()
|
|
185
|
+
return self._dict['services']
|
|
186
|
+
|
|
187
|
+
@triggers.default
|
|
188
|
+
def default_triggers(self):
|
|
189
|
+
self._dict['triggers'] = list()
|
|
190
|
+
return self._dict['triggers']
|
|
191
|
+
|
|
192
|
+
@pipeline_nodes.default
|
|
193
|
+
def default_pipelines(self):
|
|
194
|
+
self._dict['pipelines'] = list()
|
|
195
|
+
return self._dict['pipelines']
|
|
196
|
+
|
|
197
|
+
@toolbars.default
|
|
198
|
+
def default_toolbars(self):
|
|
199
|
+
self._dict['toolbars'] = list()
|
|
200
|
+
return self._dict['toolbars']
|
|
201
|
+
|
|
202
|
+
@models.default
|
|
203
|
+
def default_models(self):
|
|
204
|
+
self._dict['models'] = list()
|
|
205
|
+
return self._dict['models']
|
|
206
|
+
|
|
207
|
+
@compute_configs.default
|
|
208
|
+
def default_compute_configs(self):
|
|
209
|
+
self._dict['computeConfigs'] = list()
|
|
210
|
+
return self._dict['computeConfigs']
|
|
211
|
+
|
|
212
|
+
@channels.default
|
|
213
|
+
def default_channels(self):
|
|
214
|
+
self._dict['channels'] = list()
|
|
215
|
+
return self._dict['channels']
|
|
216
|
+
|
|
217
|
+
@pipeline_templates.default
|
|
218
|
+
def default_pipeline_templates(self):
|
|
219
|
+
self._dict['pipelineTemplates'] = list()
|
|
220
|
+
return self._dict['pipelineTemplates']
|
|
221
|
+
|
|
222
|
+
@classmethod
|
|
223
|
+
def from_json(cls, _json):
|
|
224
|
+
inst = cls(_dict=_json)
|
|
225
|
+
return inst
|
|
226
|
+
|
|
227
|
+
def to_json(self):
|
|
228
|
+
return self._dict.copy()
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
class Dpk(entities.DlEntity):
|
|
232
|
+
# name change
|
|
233
|
+
id: str = entities.DlProperty(location=['id'], _type=str)
|
|
234
|
+
base_id: str = entities.DlProperty(location=['baseId'], _type=str)
|
|
235
|
+
name: str = entities.DlProperty(location=['name'], _type=str)
|
|
236
|
+
version: str = entities.DlProperty(location=['version'], _type=str)
|
|
237
|
+
attributes: dict = entities.DlProperty(location=['attributes'], _type=dict)
|
|
238
|
+
created_at: str = entities.DlProperty(location=['createdAt'], _type=str)
|
|
239
|
+
updated_at: str = entities.DlProperty(location=['updatedAt'], _type=str)
|
|
240
|
+
creator: str = entities.DlProperty(location=['creator'], _type=str)
|
|
241
|
+
display_name: str = entities.DlProperty(location=['displayName'], _type=str)
|
|
242
|
+
icon: str = entities.DlProperty(location=['icon'], _type=str)
|
|
243
|
+
tags: list = entities.DlProperty(location=['tags'], _type=list)
|
|
244
|
+
codebase: Union[entities.Codebase, None] = entities.DlProperty(location=['codebase'], _kls="Codebase")
|
|
245
|
+
scope: str = entities.DlProperty(location=['scope'], _type=str)
|
|
246
|
+
context: dict = entities.DlProperty(location=['context'], _type=dict)
|
|
247
|
+
metadata: dict = entities.DlProperty(location=['metadata'], _type=dict)
|
|
248
|
+
dependencies: dict = entities.DlProperty(location=['dependencies'], _type=List[dict])
|
|
249
|
+
|
|
250
|
+
# defaults
|
|
251
|
+
components: Components = entities.DlProperty(location=['components'], _kls='Components')
|
|
252
|
+
description: str = entities.DlProperty(location=['description'], _type=str)
|
|
253
|
+
url: str = entities.DlProperty(location=['url'], _type=str)
|
|
254
|
+
|
|
255
|
+
# sdk
|
|
256
|
+
client_api: ApiClient
|
|
257
|
+
project: entities.Project
|
|
258
|
+
_revisions = None
|
|
259
|
+
__repositories = None
|
|
260
|
+
|
|
261
|
+
@components.default
|
|
262
|
+
def default_components(self):
|
|
263
|
+
self._dict['components'] = dict()
|
|
264
|
+
return self._dict['components']
|
|
265
|
+
|
|
266
|
+
################
|
|
267
|
+
# repositories #
|
|
268
|
+
################
|
|
269
|
+
@property
|
|
270
|
+
def _repositories(self):
|
|
271
|
+
if self.__repositories is None:
|
|
272
|
+
reps = namedtuple('repositories',
|
|
273
|
+
field_names=['dpks', 'codebases', 'organizations', 'services'])
|
|
274
|
+
|
|
275
|
+
self.__repositories = reps(
|
|
276
|
+
dpks=repositories.Dpks(client_api=self.client_api, project=self.project),
|
|
277
|
+
codebases=repositories.Codebases(client_api=self.client_api),
|
|
278
|
+
organizations=repositories.Organizations(client_api=self.client_api),
|
|
279
|
+
services=repositories.Services(client_api=self.client_api, project=self.project, package=self),
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
return self.__repositories
|
|
283
|
+
|
|
284
|
+
@property
|
|
285
|
+
def codebases(self):
|
|
286
|
+
assert isinstance(self._repositories.codebases, repositories.Codebases)
|
|
287
|
+
return self._repositories.codebases
|
|
288
|
+
|
|
289
|
+
@property
|
|
290
|
+
def organizations(self):
|
|
291
|
+
assert isinstance(self._repositories.organizations, repositories.Organizations)
|
|
292
|
+
return self._repositories.organizationsFapp
|
|
293
|
+
|
|
294
|
+
@property
|
|
295
|
+
def dpks(self) -> 'repositories.Dpks':
|
|
296
|
+
assert isinstance(self._repositories.dpks, repositories.Dpks)
|
|
297
|
+
return self._repositories.dpks
|
|
298
|
+
|
|
299
|
+
@property
|
|
300
|
+
def services(self):
|
|
301
|
+
assert isinstance(self._repositories.services, repositories.Services)
|
|
302
|
+
return self._repositories.services
|
|
303
|
+
|
|
304
|
+
###########
|
|
305
|
+
# methods #
|
|
306
|
+
###########
|
|
307
|
+
def publish(self):
|
|
308
|
+
"""
|
|
309
|
+
Publish the dpk to Dataloop platform.
|
|
310
|
+
|
|
311
|
+
**Example**
|
|
312
|
+
.. code-block:: python
|
|
313
|
+
published_dpk = dpk.publish()
|
|
314
|
+
"""
|
|
315
|
+
return self.dpks.publish(dpk=self)
|
|
316
|
+
|
|
317
|
+
def update(self):
|
|
318
|
+
"""
|
|
319
|
+
Update the dpk attributes to Dataloop platform.
|
|
320
|
+
|
|
321
|
+
**Example**
|
|
322
|
+
.. code-block:: python
|
|
323
|
+
updated_dpk = dpk.update()
|
|
324
|
+
"""
|
|
325
|
+
return self.dpks.update(dpk=self)
|
|
326
|
+
|
|
327
|
+
def pull(self, local_path):
|
|
328
|
+
"""
|
|
329
|
+
Pulls the app from the platform as dpk file.
|
|
330
|
+
|
|
331
|
+
Note: you must pass either dpk_name or dpk_id to the function.
|
|
332
|
+
:param local_path: the path where you want to install the dpk file.
|
|
333
|
+
:return local path where the package pull
|
|
334
|
+
|
|
335
|
+
**Example**
|
|
336
|
+
..code-block:: python
|
|
337
|
+
path = dl.dpks.pull(dpk_name='my-app')
|
|
338
|
+
"""
|
|
339
|
+
return self.dpks.pull(dpk=self, local_path=local_path)
|
|
340
|
+
|
|
341
|
+
def delete(self):
|
|
342
|
+
"""
|
|
343
|
+
Delete the dpk from the app store.
|
|
344
|
+
|
|
345
|
+
Note: after removing the dpk, you cant get it again, it's advised to pull it first.
|
|
346
|
+
|
|
347
|
+
:return whether the operation ran successfully
|
|
348
|
+
:rtype bool
|
|
349
|
+
"""
|
|
350
|
+
return self.dpks.delete(self.id)
|
|
351
|
+
|
|
352
|
+
def _get_revision_pages(self, filters: entities.Filters = None) -> entities.PagedEntities:
|
|
353
|
+
"""
|
|
354
|
+
returns the available versions of the dpk.
|
|
355
|
+
|
|
356
|
+
:param entities.Filters filters: the filters to apply to the search.
|
|
357
|
+
:return the available versions of the dpk.
|
|
358
|
+
|
|
359
|
+
** Example **
|
|
360
|
+
..code-block:: python
|
|
361
|
+
versions = dl.dpks.revisions(dpk_name='name')
|
|
362
|
+
"""
|
|
363
|
+
if filters is None:
|
|
364
|
+
filters = entities.Filters(resource=entities.FiltersResource.DPK)
|
|
365
|
+
elif not isinstance(filters, entities.Filters):
|
|
366
|
+
raise ValueError('Unknown filters type: {!r}'.format(type(filters)))
|
|
367
|
+
elif filters.resource != entities.FiltersResource.DPK:
|
|
368
|
+
raise TypeError('Filters resource must to be FiltersResource.DPK. Got: {!r}'.format(filters.resource))
|
|
369
|
+
|
|
370
|
+
paged = entities.PagedEntities(items_repository=self,
|
|
371
|
+
filters=filters,
|
|
372
|
+
page_offset=filters.page,
|
|
373
|
+
page_size=filters.page_size,
|
|
374
|
+
client_api=self.client_api,
|
|
375
|
+
list_function=self._list_revisions)
|
|
376
|
+
paged.get_page()
|
|
377
|
+
return paged
|
|
378
|
+
|
|
379
|
+
def _build_entities_from_response(self, response_items):
|
|
380
|
+
return self.dpks._build_entities_from_response(response_items=response_items)
|
|
381
|
+
|
|
382
|
+
def _list_revisions(self, filters: entities.Filters):
|
|
383
|
+
url = '/app-registry/{}/revisions'.format(self.name)
|
|
384
|
+
# request
|
|
385
|
+
success, response = self.client_api.gen_request(req_type='post',
|
|
386
|
+
path=url,
|
|
387
|
+
json_req=filters.prepare())
|
|
388
|
+
if not success:
|
|
389
|
+
raise exceptions.PlatformException(response)
|
|
390
|
+
return response.json()
|
|
391
|
+
|
|
392
|
+
@property
|
|
393
|
+
def revisions(self):
|
|
394
|
+
"""
|
|
395
|
+
Returns the available versions of the dpk.
|
|
396
|
+
|
|
397
|
+
:return List[Dpk]
|
|
398
|
+
|
|
399
|
+
** Example **
|
|
400
|
+
..code-block:: python
|
|
401
|
+
versions = dpk.revisions
|
|
402
|
+
"""
|
|
403
|
+
if self._revisions is None:
|
|
404
|
+
self._revisions = self._get_revision_pages()
|
|
405
|
+
return self._revisions
|
|
406
|
+
|
|
407
|
+
def get_revisions(self, version: str):
|
|
408
|
+
"""
|
|
409
|
+
Get the dpk with the specified version.
|
|
410
|
+
|
|
411
|
+
:param str version: the version of the dpk to get.
|
|
412
|
+
:return: Dpk
|
|
413
|
+
|
|
414
|
+
** Example **
|
|
415
|
+
..code-block:: python
|
|
416
|
+
dpk = dpk.get_revisions(version='1.0.0')
|
|
417
|
+
"""
|
|
418
|
+
return self.dpks.get_revisions(dpk_id=self.base_id, version=version)
|
|
419
|
+
|
|
420
|
+
@staticmethod
|
|
421
|
+
def _protected_from_json(_json, client_api, project, is_fetched=True):
|
|
422
|
+
"""
|
|
423
|
+
Same as from_json but with try-except to catch if error
|
|
424
|
+
|
|
425
|
+
:param _json: platform json
|
|
426
|
+
:param client_api: ApiClient entity
|
|
427
|
+
:return:
|
|
428
|
+
"""
|
|
429
|
+
try:
|
|
430
|
+
package = Dpk.from_json(_json=_json,
|
|
431
|
+
client_api=client_api,
|
|
432
|
+
project=project,
|
|
433
|
+
is_fetched=is_fetched)
|
|
434
|
+
status = True
|
|
435
|
+
except Exception:
|
|
436
|
+
package = traceback.format_exc()
|
|
437
|
+
status = False
|
|
438
|
+
return status, package
|
|
439
|
+
|
|
440
|
+
def to_json(self):
|
|
441
|
+
"""
|
|
442
|
+
convert the class to json
|
|
443
|
+
"""
|
|
444
|
+
_json = self._dict.copy()
|
|
445
|
+
return _json
|
|
446
|
+
|
|
447
|
+
@classmethod
|
|
448
|
+
def from_json(cls,
|
|
449
|
+
_json,
|
|
450
|
+
client_api: ApiClient = None,
|
|
451
|
+
project: entities.Project = None,
|
|
452
|
+
is_fetched=True) -> 'Dpk':
|
|
453
|
+
"""
|
|
454
|
+
Turn platform representation of app into an app entity
|
|
455
|
+
|
|
456
|
+
:param dict _json: platform representation of package
|
|
457
|
+
:param dl.ApiClient client_api: ApiClient entity
|
|
458
|
+
:param dl.entities.Project project: The project where the dpk resides
|
|
459
|
+
:param bool is_fetched: is Entity fetched from Platform
|
|
460
|
+
:return: App entity
|
|
461
|
+
:rtype: dtlpy.entities.App
|
|
462
|
+
"""
|
|
463
|
+
res = cls(
|
|
464
|
+
_dict=_json,
|
|
465
|
+
client_api=client_api,
|
|
466
|
+
project=project,
|
|
467
|
+
is_fetched=is_fetched
|
|
468
|
+
)
|
|
469
|
+
|
|
470
|
+
return res
|