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/trigger.py
CHANGED
|
@@ -1,426 +1,426 @@
|
|
|
1
|
-
import attr
|
|
2
|
-
import traceback
|
|
3
|
-
import logging
|
|
4
|
-
from enum import Enum
|
|
5
|
-
from collections import namedtuple
|
|
6
|
-
|
|
7
|
-
from .. import entities, exceptions, repositories
|
|
8
|
-
from ..services.api_client import ApiClient
|
|
9
|
-
|
|
10
|
-
logger = logging.getLogger(name='dtlpy')
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class TriggerResource(str, Enum):
|
|
14
|
-
ITEM = "Item"
|
|
15
|
-
DATASET = "Dataset"
|
|
16
|
-
ANNOTATION = "Annotation"
|
|
17
|
-
TASK = 'Task',
|
|
18
|
-
ASSIGNMENT = 'Assignment',
|
|
19
|
-
ITEM_STATUS = "ItemStatus"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class TriggerAction(str, Enum):
|
|
23
|
-
CREATED = "Created"
|
|
24
|
-
UPDATED = "Updated"
|
|
25
|
-
DELETED = "Deleted"
|
|
26
|
-
STATUS_CHANGED = 'statusChanged'
|
|
27
|
-
CLONE = 'Clone'
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class TriggerExecutionMode(str, Enum):
|
|
31
|
-
ONCE = "Once"
|
|
32
|
-
ALWAYS = "Always"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class TriggerType(str, Enum):
|
|
36
|
-
EVENT = "Event"
|
|
37
|
-
CRON = "Cron"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
@attr.s
|
|
41
|
-
class BaseTrigger(entities.BaseEntity):
|
|
42
|
-
"""
|
|
43
|
-
Trigger Entity
|
|
44
|
-
"""
|
|
45
|
-
#######################
|
|
46
|
-
# Platform attributes #
|
|
47
|
-
#######################
|
|
48
|
-
id = attr.ib()
|
|
49
|
-
url = attr.ib(repr=False)
|
|
50
|
-
created_at = attr.ib()
|
|
51
|
-
updated_at = attr.ib(repr=False)
|
|
52
|
-
creator = attr.ib()
|
|
53
|
-
name = attr.ib()
|
|
54
|
-
active = attr.ib()
|
|
55
|
-
type = attr.ib()
|
|
56
|
-
scope = attr.ib()
|
|
57
|
-
is_global = attr.ib()
|
|
58
|
-
input = attr.ib()
|
|
59
|
-
|
|
60
|
-
# name change
|
|
61
|
-
function_name = attr.ib()
|
|
62
|
-
service_id = attr.ib()
|
|
63
|
-
webhook_id = attr.ib()
|
|
64
|
-
pipeline_id = attr.ib()
|
|
65
|
-
|
|
66
|
-
########
|
|
67
|
-
# temp #
|
|
68
|
-
########
|
|
69
|
-
special = attr.ib(repr=False)
|
|
70
|
-
|
|
71
|
-
##############################
|
|
72
|
-
# different name in platform #
|
|
73
|
-
##############################
|
|
74
|
-
project_id = attr.ib()
|
|
75
|
-
_spec = attr.ib()
|
|
76
|
-
operation = attr.ib()
|
|
77
|
-
|
|
78
|
-
##################
|
|
79
|
-
# SDK attributes #
|
|
80
|
-
##################
|
|
81
|
-
_service = attr.ib(repr=False)
|
|
82
|
-
_project = attr.ib(repr=False)
|
|
83
|
-
_client_api = attr.ib(type=ApiClient, repr=False)
|
|
84
|
-
_op_type = attr.ib(default='service')
|
|
85
|
-
_repositories = attr.ib(repr=False)
|
|
86
|
-
|
|
87
|
-
updated_by = attr.ib(default=None)
|
|
88
|
-
|
|
89
|
-
@staticmethod
|
|
90
|
-
def _get_operation(operation):
|
|
91
|
-
op_type = operation.get('type', None)
|
|
92
|
-
if op_type == 'function':
|
|
93
|
-
service_id = operation.get('serviceId', None)
|
|
94
|
-
webhook_id = None
|
|
95
|
-
pipeline_id = None
|
|
96
|
-
elif op_type == 'webhook':
|
|
97
|
-
webhook_id = operation.get('webhookId', None)
|
|
98
|
-
service_id = None
|
|
99
|
-
pipeline_id = None
|
|
100
|
-
elif op_type == 'rabbitmq':
|
|
101
|
-
webhook_id = None
|
|
102
|
-
service_id = None
|
|
103
|
-
pipeline_id = None
|
|
104
|
-
elif op_type == 'pipeline':
|
|
105
|
-
webhook_id = None
|
|
106
|
-
service_id = None
|
|
107
|
-
pipeline_id = operation.get('id', None)
|
|
108
|
-
else:
|
|
109
|
-
raise exceptions.PlatformException('400', 'unknown trigger operation type: {}'.format(op_type))
|
|
110
|
-
|
|
111
|
-
return service_id, webhook_id, pipeline_id
|
|
112
|
-
|
|
113
|
-
@property
|
|
114
|
-
def createdAt(self):
|
|
115
|
-
return self.created_at
|
|
116
|
-
|
|
117
|
-
@property
|
|
118
|
-
def updatedAt(self):
|
|
119
|
-
return self.updated_at
|
|
120
|
-
|
|
121
|
-
@staticmethod
|
|
122
|
-
def _protected_from_json(_json, client_api, project=None, service=None):
|
|
123
|
-
"""
|
|
124
|
-
Same as from_json but with try-except to catch if error
|
|
125
|
-
|
|
126
|
-
:param _json: platform json
|
|
127
|
-
:param client_api: ApiClient entity
|
|
128
|
-
:param project: project entity
|
|
129
|
-
:param service: service entity
|
|
130
|
-
:return:
|
|
131
|
-
"""
|
|
132
|
-
try:
|
|
133
|
-
trigger = BaseTrigger.from_json(_json=_json,
|
|
134
|
-
client_api=client_api,
|
|
135
|
-
project=project,
|
|
136
|
-
service=service)
|
|
137
|
-
status = True
|
|
138
|
-
except Exception:
|
|
139
|
-
trigger = traceback.format_exc()
|
|
140
|
-
status = False
|
|
141
|
-
return status, trigger
|
|
142
|
-
|
|
143
|
-
@classmethod
|
|
144
|
-
def from_json(cls, _json, client_api, project=None, service=None):
|
|
145
|
-
"""
|
|
146
|
-
Build a trigger entity object from a json
|
|
147
|
-
|
|
148
|
-
:param dict _json: platform json
|
|
149
|
-
:param dl.ApiClient client_api: ApiClient entity
|
|
150
|
-
:param dtlpy.entities.project.Project project: project entity
|
|
151
|
-
:param dtlpy.entities.service.Service service: service entity
|
|
152
|
-
:return:
|
|
153
|
-
"""
|
|
154
|
-
if project is not None:
|
|
155
|
-
if project.id != _json.get('projectId', None):
|
|
156
|
-
logger.warning('Trigger has been fetched from a project that is not belong to it')
|
|
157
|
-
project = None
|
|
158
|
-
|
|
159
|
-
if service is not None:
|
|
160
|
-
spec = _json.get('spec', dict())
|
|
161
|
-
operation = spec.get('operation', dict())
|
|
162
|
-
if service.id != operation.get('serviceId', None):
|
|
163
|
-
logger.warning('Trigger has been fetched from a service that is not belong to it')
|
|
164
|
-
service = None
|
|
165
|
-
|
|
166
|
-
trigger_type = _json.get('type', None)
|
|
167
|
-
|
|
168
|
-
if trigger_type == TriggerType.CRON:
|
|
169
|
-
ent = CronTrigger.from_json(_json, client_api, project, service)
|
|
170
|
-
else:
|
|
171
|
-
ent = Trigger.from_json(_json, client_api, project, service)
|
|
172
|
-
return ent
|
|
173
|
-
|
|
174
|
-
################
|
|
175
|
-
# repositories #
|
|
176
|
-
################
|
|
177
|
-
@_repositories.default
|
|
178
|
-
def set_repositories(self):
|
|
179
|
-
reps = namedtuple('repositories',
|
|
180
|
-
field_names=['services', 'triggers'])
|
|
181
|
-
|
|
182
|
-
if self._project is None:
|
|
183
|
-
services_repo = repositories.Services(client_api=self._client_api, project=self._project)
|
|
184
|
-
else:
|
|
185
|
-
services_repo = self._project.services
|
|
186
|
-
|
|
187
|
-
triggers = repositories.Triggers(client_api=self._client_api,
|
|
188
|
-
project=self._project)
|
|
189
|
-
|
|
190
|
-
r = reps(services=services_repo, triggers=triggers)
|
|
191
|
-
return r
|
|
192
|
-
|
|
193
|
-
@property
|
|
194
|
-
def triggers(self):
|
|
195
|
-
assert isinstance(self._repositories.triggers, repositories.Triggers)
|
|
196
|
-
return self._repositories.triggers
|
|
197
|
-
|
|
198
|
-
@property
|
|
199
|
-
def services(self):
|
|
200
|
-
assert isinstance(self._repositories.services, repositories.Services)
|
|
201
|
-
return self._repositories.services
|
|
202
|
-
|
|
203
|
-
############
|
|
204
|
-
# entities #
|
|
205
|
-
############
|
|
206
|
-
@property
|
|
207
|
-
def project(self):
|
|
208
|
-
if self._project is None:
|
|
209
|
-
self._project = repositories.Projects(client_api=self._client_api).get(project_id=self.project_id,
|
|
210
|
-
fetch=None)
|
|
211
|
-
assert isinstance(self._project, entities.Project)
|
|
212
|
-
return self._project
|
|
213
|
-
|
|
214
|
-
@property
|
|
215
|
-
def service(self):
|
|
216
|
-
if self._service is None:
|
|
217
|
-
self._service = self.services.get(service_id=self.service_id, fetch=None)
|
|
218
|
-
assert isinstance(self._service, entities.Service)
|
|
219
|
-
return self._service
|
|
220
|
-
|
|
221
|
-
###########
|
|
222
|
-
# methods #
|
|
223
|
-
###########
|
|
224
|
-
def to_json(self):
|
|
225
|
-
"""
|
|
226
|
-
Returns platform _json format of object
|
|
227
|
-
|
|
228
|
-
:return: platform json format of object
|
|
229
|
-
:rtype: dict
|
|
230
|
-
"""
|
|
231
|
-
# get excluded
|
|
232
|
-
_json = attr.asdict(self, filter=attr.filters.exclude(attr.fields(BaseTrigger)._client_api,
|
|
233
|
-
attr.fields(BaseTrigger).project_id,
|
|
234
|
-
attr.fields(BaseTrigger)._project,
|
|
235
|
-
attr.fields(BaseTrigger)._service,
|
|
236
|
-
attr.fields(BaseTrigger).special,
|
|
237
|
-
attr.fields(BaseTrigger)._op_type,
|
|
238
|
-
attr.fields(BaseTrigger)._spec,
|
|
239
|
-
attr.fields(BaseTrigger)._repositories,
|
|
240
|
-
attr.fields(BaseTrigger).service_id,
|
|
241
|
-
attr.fields(BaseTrigger).webhook_id,
|
|
242
|
-
attr.fields(BaseTrigger).pipeline_id,
|
|
243
|
-
attr.fields(BaseTrigger).function_name,
|
|
244
|
-
attr.fields(BaseTrigger).is_global,
|
|
245
|
-
attr.fields(BaseTrigger).created_at,
|
|
246
|
-
attr.fields(BaseTrigger).updated_at,
|
|
247
|
-
attr.fields(BaseTrigger).operation,
|
|
248
|
-
attr.fields(BaseTrigger).updated_by,
|
|
249
|
-
))
|
|
250
|
-
|
|
251
|
-
# rename
|
|
252
|
-
_json['projectId'] = self.project_id
|
|
253
|
-
_json['createdAt'] = self.created_at
|
|
254
|
-
_json['updatedAt'] = self.updated_at
|
|
255
|
-
if self.is_global is not None:
|
|
256
|
-
_json['global'] = self.is_global
|
|
257
|
-
if self.updated_by is not None:
|
|
258
|
-
_json['updatedBy'] = self.updated_by
|
|
259
|
-
return _json
|
|
260
|
-
|
|
261
|
-
def delete(self):
|
|
262
|
-
"""
|
|
263
|
-
Delete Trigger object
|
|
264
|
-
|
|
265
|
-
:return: True
|
|
266
|
-
"""
|
|
267
|
-
return self.project.triggers.delete(trigger_id=self.id)
|
|
268
|
-
|
|
269
|
-
def update(self):
|
|
270
|
-
"""
|
|
271
|
-
Update Trigger object
|
|
272
|
-
|
|
273
|
-
:return: Trigger entity
|
|
274
|
-
"""
|
|
275
|
-
return self.project.triggers.update(trigger=self)
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
@attr.s
|
|
279
|
-
class Trigger(BaseTrigger):
|
|
280
|
-
"""
|
|
281
|
-
Trigger Entity
|
|
282
|
-
"""
|
|
283
|
-
filters = attr.ib(default=None, repr=False)
|
|
284
|
-
execution_mode = attr.ib(default=TriggerExecutionMode.ONCE, repr=False)
|
|
285
|
-
actions = attr.ib(default=TriggerAction.CREATED, repr=False)
|
|
286
|
-
resource = attr.ib(default=TriggerResource.ITEM, repr=False)
|
|
287
|
-
|
|
288
|
-
def to_json(self):
|
|
289
|
-
"""
|
|
290
|
-
Returns platform _json format of object
|
|
291
|
-
|
|
292
|
-
:return: platform json format of object
|
|
293
|
-
:rtype: dict
|
|
294
|
-
"""
|
|
295
|
-
_json = super().to_json()
|
|
296
|
-
|
|
297
|
-
_json['spec'] = {
|
|
298
|
-
'filter': _json.pop('filters'),
|
|
299
|
-
'executionMode': _json.pop('execution_mode'),
|
|
300
|
-
'resource': _json.pop('resource'),
|
|
301
|
-
'actions': _json.pop('actions'),
|
|
302
|
-
'input': _json.pop('input', None),
|
|
303
|
-
'operation': self.operation,
|
|
304
|
-
}
|
|
305
|
-
return _json
|
|
306
|
-
|
|
307
|
-
@classmethod
|
|
308
|
-
def from_json(cls, _json, client_api, project=None, service=None):
|
|
309
|
-
"""
|
|
310
|
-
Build a trigger entity object from a json
|
|
311
|
-
|
|
312
|
-
:param _json: platform json
|
|
313
|
-
:param client_api: ApiClient entity
|
|
314
|
-
:param dtlpy.entities.project.Project project: project entity
|
|
315
|
-
:param dtlpy.entities.service.Service service: service entity
|
|
316
|
-
:return:
|
|
317
|
-
"""
|
|
318
|
-
spec = _json.get('spec', dict())
|
|
319
|
-
operation = spec.get('operation', dict())
|
|
320
|
-
|
|
321
|
-
service_id, webhook_id, pipeline_id = cls._get_operation(operation=operation)
|
|
322
|
-
|
|
323
|
-
return cls(
|
|
324
|
-
execution_mode=spec.get('executionMode', None),
|
|
325
|
-
updated_at=_json.get('updatedAt', None),
|
|
326
|
-
created_at=_json.get('createdAt', None),
|
|
327
|
-
resource=spec.get('resource', None),
|
|
328
|
-
creator=_json.get('creator', None),
|
|
329
|
-
special=_json.get('special', None),
|
|
330
|
-
actions=spec.get('actions', None),
|
|
331
|
-
active=_json.get('active', None),
|
|
332
|
-
function_name=operation.get('functionName', None),
|
|
333
|
-
scope=_json.get('scope', None),
|
|
334
|
-
is_global=_json.get('global', None),
|
|
335
|
-
type=_json.get('type', None),
|
|
336
|
-
name=_json.get('name', None),
|
|
337
|
-
url=_json.get('url', None),
|
|
338
|
-
service_id=service_id,
|
|
339
|
-
project_id=_json.get('projectId', None),
|
|
340
|
-
input=spec.get('input', None),
|
|
341
|
-
webhook_id=webhook_id,
|
|
342
|
-
client_api=client_api,
|
|
343
|
-
filters=spec.get('filter', dict()),
|
|
344
|
-
project=project,
|
|
345
|
-
service=service,
|
|
346
|
-
id=_json.get('id', None),
|
|
347
|
-
op_type=operation.get('type', None),
|
|
348
|
-
spec=spec,
|
|
349
|
-
pipeline_id=pipeline_id,
|
|
350
|
-
operation=operation,
|
|
351
|
-
updated_by=_json.get('updatedBy', None),
|
|
352
|
-
)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
@attr.s
|
|
356
|
-
class CronTrigger(BaseTrigger):
|
|
357
|
-
start_at = attr.ib(default=None)
|
|
358
|
-
end_at = attr.ib(default=None)
|
|
359
|
-
cron = attr.ib(default=None)
|
|
360
|
-
|
|
361
|
-
def to_json(self):
|
|
362
|
-
"""
|
|
363
|
-
Returns platform _json format of object
|
|
364
|
-
|
|
365
|
-
:return: platform json format of object
|
|
366
|
-
:rtype: dict
|
|
367
|
-
"""
|
|
368
|
-
_json = super().to_json()
|
|
369
|
-
|
|
370
|
-
_json['spec'] = {
|
|
371
|
-
'startAt': _json.pop('start_at'),
|
|
372
|
-
'endAt': _json.pop('end_at'),
|
|
373
|
-
'cron': _json.pop('cron'),
|
|
374
|
-
'input': _json.pop('input'),
|
|
375
|
-
'operation': self.operation,
|
|
376
|
-
}
|
|
377
|
-
return _json
|
|
378
|
-
|
|
379
|
-
@classmethod
|
|
380
|
-
def from_json(cls, _json, client_api, project=None, service=None):
|
|
381
|
-
"""
|
|
382
|
-
Build a trigger entity object from a json
|
|
383
|
-
|
|
384
|
-
:param _json: platform json
|
|
385
|
-
:param client_api: ApiClient entity
|
|
386
|
-
:param project: project entity
|
|
387
|
-
:param service: service entity
|
|
388
|
-
:return:
|
|
389
|
-
"""
|
|
390
|
-
spec = _json.get('spec', dict())
|
|
391
|
-
operation = spec.get('operation', dict())
|
|
392
|
-
|
|
393
|
-
project_id = _json.get('projectId', None)
|
|
394
|
-
if project_id is not None and project is not None:
|
|
395
|
-
if project_id != project.id:
|
|
396
|
-
project = None
|
|
397
|
-
|
|
398
|
-
service_id, webhook_id, pipeline_id = cls._get_operation(operation=operation)
|
|
399
|
-
return cls(
|
|
400
|
-
updated_at=_json.get('updatedAt', None),
|
|
401
|
-
created_at=_json.get('createdAt', None),
|
|
402
|
-
creator=_json.get('creator', None),
|
|
403
|
-
special=_json.get('special', None),
|
|
404
|
-
active=_json.get('active', None),
|
|
405
|
-
function_name=operation.get('functionName', None),
|
|
406
|
-
scope=_json.get('scope', None),
|
|
407
|
-
is_global=_json.get('global', None),
|
|
408
|
-
type=_json.get('type', None),
|
|
409
|
-
name=_json.get('name', None),
|
|
410
|
-
input=spec.get('input', None),
|
|
411
|
-
end_at=spec.get('endAt', None),
|
|
412
|
-
start_at=spec.get('startAt', None),
|
|
413
|
-
cron=spec.get('cron', None),
|
|
414
|
-
url=_json.get('url', None),
|
|
415
|
-
service_id=service_id,
|
|
416
|
-
project_id=project_id,
|
|
417
|
-
webhook_id=webhook_id,
|
|
418
|
-
client_api=client_api,
|
|
419
|
-
project=project,
|
|
420
|
-
service=service,
|
|
421
|
-
id=_json['id'],
|
|
422
|
-
op_type=operation.get('type', None),
|
|
423
|
-
spec=spec,
|
|
424
|
-
pipeline_id=pipeline_id,
|
|
425
|
-
operation=operation
|
|
426
|
-
)
|
|
1
|
+
import attr
|
|
2
|
+
import traceback
|
|
3
|
+
import logging
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from collections import namedtuple
|
|
6
|
+
|
|
7
|
+
from .. import entities, exceptions, repositories
|
|
8
|
+
from ..services.api_client import ApiClient
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(name='dtlpy')
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TriggerResource(str, Enum):
|
|
14
|
+
ITEM = "Item"
|
|
15
|
+
DATASET = "Dataset"
|
|
16
|
+
ANNOTATION = "Annotation"
|
|
17
|
+
TASK = 'Task',
|
|
18
|
+
ASSIGNMENT = 'Assignment',
|
|
19
|
+
ITEM_STATUS = "ItemStatus"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TriggerAction(str, Enum):
|
|
23
|
+
CREATED = "Created"
|
|
24
|
+
UPDATED = "Updated"
|
|
25
|
+
DELETED = "Deleted"
|
|
26
|
+
STATUS_CHANGED = 'statusChanged'
|
|
27
|
+
CLONE = 'Clone'
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class TriggerExecutionMode(str, Enum):
|
|
31
|
+
ONCE = "Once"
|
|
32
|
+
ALWAYS = "Always"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class TriggerType(str, Enum):
|
|
36
|
+
EVENT = "Event"
|
|
37
|
+
CRON = "Cron"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@attr.s
|
|
41
|
+
class BaseTrigger(entities.BaseEntity):
|
|
42
|
+
"""
|
|
43
|
+
Trigger Entity
|
|
44
|
+
"""
|
|
45
|
+
#######################
|
|
46
|
+
# Platform attributes #
|
|
47
|
+
#######################
|
|
48
|
+
id = attr.ib()
|
|
49
|
+
url = attr.ib(repr=False)
|
|
50
|
+
created_at = attr.ib()
|
|
51
|
+
updated_at = attr.ib(repr=False)
|
|
52
|
+
creator = attr.ib()
|
|
53
|
+
name = attr.ib()
|
|
54
|
+
active = attr.ib()
|
|
55
|
+
type = attr.ib()
|
|
56
|
+
scope = attr.ib()
|
|
57
|
+
is_global = attr.ib()
|
|
58
|
+
input = attr.ib()
|
|
59
|
+
|
|
60
|
+
# name change
|
|
61
|
+
function_name = attr.ib()
|
|
62
|
+
service_id = attr.ib()
|
|
63
|
+
webhook_id = attr.ib()
|
|
64
|
+
pipeline_id = attr.ib()
|
|
65
|
+
|
|
66
|
+
########
|
|
67
|
+
# temp #
|
|
68
|
+
########
|
|
69
|
+
special = attr.ib(repr=False)
|
|
70
|
+
|
|
71
|
+
##############################
|
|
72
|
+
# different name in platform #
|
|
73
|
+
##############################
|
|
74
|
+
project_id = attr.ib()
|
|
75
|
+
_spec = attr.ib()
|
|
76
|
+
operation = attr.ib()
|
|
77
|
+
|
|
78
|
+
##################
|
|
79
|
+
# SDK attributes #
|
|
80
|
+
##################
|
|
81
|
+
_service = attr.ib(repr=False)
|
|
82
|
+
_project = attr.ib(repr=False)
|
|
83
|
+
_client_api = attr.ib(type=ApiClient, repr=False)
|
|
84
|
+
_op_type = attr.ib(default='service')
|
|
85
|
+
_repositories = attr.ib(repr=False)
|
|
86
|
+
|
|
87
|
+
updated_by = attr.ib(default=None)
|
|
88
|
+
|
|
89
|
+
@staticmethod
|
|
90
|
+
def _get_operation(operation):
|
|
91
|
+
op_type = operation.get('type', None)
|
|
92
|
+
if op_type == 'function':
|
|
93
|
+
service_id = operation.get('serviceId', None)
|
|
94
|
+
webhook_id = None
|
|
95
|
+
pipeline_id = None
|
|
96
|
+
elif op_type == 'webhook':
|
|
97
|
+
webhook_id = operation.get('webhookId', None)
|
|
98
|
+
service_id = None
|
|
99
|
+
pipeline_id = None
|
|
100
|
+
elif op_type == 'rabbitmq':
|
|
101
|
+
webhook_id = None
|
|
102
|
+
service_id = None
|
|
103
|
+
pipeline_id = None
|
|
104
|
+
elif op_type == 'pipeline':
|
|
105
|
+
webhook_id = None
|
|
106
|
+
service_id = None
|
|
107
|
+
pipeline_id = operation.get('id', None)
|
|
108
|
+
else:
|
|
109
|
+
raise exceptions.PlatformException('400', 'unknown trigger operation type: {}'.format(op_type))
|
|
110
|
+
|
|
111
|
+
return service_id, webhook_id, pipeline_id
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def createdAt(self):
|
|
115
|
+
return self.created_at
|
|
116
|
+
|
|
117
|
+
@property
|
|
118
|
+
def updatedAt(self):
|
|
119
|
+
return self.updated_at
|
|
120
|
+
|
|
121
|
+
@staticmethod
|
|
122
|
+
def _protected_from_json(_json, client_api, project=None, service=None):
|
|
123
|
+
"""
|
|
124
|
+
Same as from_json but with try-except to catch if error
|
|
125
|
+
|
|
126
|
+
:param _json: platform json
|
|
127
|
+
:param client_api: ApiClient entity
|
|
128
|
+
:param project: project entity
|
|
129
|
+
:param service: service entity
|
|
130
|
+
:return:
|
|
131
|
+
"""
|
|
132
|
+
try:
|
|
133
|
+
trigger = BaseTrigger.from_json(_json=_json,
|
|
134
|
+
client_api=client_api,
|
|
135
|
+
project=project,
|
|
136
|
+
service=service)
|
|
137
|
+
status = True
|
|
138
|
+
except Exception:
|
|
139
|
+
trigger = traceback.format_exc()
|
|
140
|
+
status = False
|
|
141
|
+
return status, trigger
|
|
142
|
+
|
|
143
|
+
@classmethod
|
|
144
|
+
def from_json(cls, _json, client_api, project=None, service=None):
|
|
145
|
+
"""
|
|
146
|
+
Build a trigger entity object from a json
|
|
147
|
+
|
|
148
|
+
:param dict _json: platform json
|
|
149
|
+
:param dl.ApiClient client_api: ApiClient entity
|
|
150
|
+
:param dtlpy.entities.project.Project project: project entity
|
|
151
|
+
:param dtlpy.entities.service.Service service: service entity
|
|
152
|
+
:return:
|
|
153
|
+
"""
|
|
154
|
+
if project is not None:
|
|
155
|
+
if project.id != _json.get('projectId', None):
|
|
156
|
+
logger.warning('Trigger has been fetched from a project that is not belong to it')
|
|
157
|
+
project = None
|
|
158
|
+
|
|
159
|
+
if service is not None:
|
|
160
|
+
spec = _json.get('spec', dict())
|
|
161
|
+
operation = spec.get('operation', dict())
|
|
162
|
+
if service.id != operation.get('serviceId', None):
|
|
163
|
+
logger.warning('Trigger has been fetched from a service that is not belong to it')
|
|
164
|
+
service = None
|
|
165
|
+
|
|
166
|
+
trigger_type = _json.get('type', None)
|
|
167
|
+
|
|
168
|
+
if trigger_type == TriggerType.CRON:
|
|
169
|
+
ent = CronTrigger.from_json(_json, client_api, project, service)
|
|
170
|
+
else:
|
|
171
|
+
ent = Trigger.from_json(_json, client_api, project, service)
|
|
172
|
+
return ent
|
|
173
|
+
|
|
174
|
+
################
|
|
175
|
+
# repositories #
|
|
176
|
+
################
|
|
177
|
+
@_repositories.default
|
|
178
|
+
def set_repositories(self):
|
|
179
|
+
reps = namedtuple('repositories',
|
|
180
|
+
field_names=['services', 'triggers'])
|
|
181
|
+
|
|
182
|
+
if self._project is None:
|
|
183
|
+
services_repo = repositories.Services(client_api=self._client_api, project=self._project)
|
|
184
|
+
else:
|
|
185
|
+
services_repo = self._project.services
|
|
186
|
+
|
|
187
|
+
triggers = repositories.Triggers(client_api=self._client_api,
|
|
188
|
+
project=self._project)
|
|
189
|
+
|
|
190
|
+
r = reps(services=services_repo, triggers=triggers)
|
|
191
|
+
return r
|
|
192
|
+
|
|
193
|
+
@property
|
|
194
|
+
def triggers(self):
|
|
195
|
+
assert isinstance(self._repositories.triggers, repositories.Triggers)
|
|
196
|
+
return self._repositories.triggers
|
|
197
|
+
|
|
198
|
+
@property
|
|
199
|
+
def services(self):
|
|
200
|
+
assert isinstance(self._repositories.services, repositories.Services)
|
|
201
|
+
return self._repositories.services
|
|
202
|
+
|
|
203
|
+
############
|
|
204
|
+
# entities #
|
|
205
|
+
############
|
|
206
|
+
@property
|
|
207
|
+
def project(self):
|
|
208
|
+
if self._project is None:
|
|
209
|
+
self._project = repositories.Projects(client_api=self._client_api).get(project_id=self.project_id,
|
|
210
|
+
fetch=None)
|
|
211
|
+
assert isinstance(self._project, entities.Project)
|
|
212
|
+
return self._project
|
|
213
|
+
|
|
214
|
+
@property
|
|
215
|
+
def service(self):
|
|
216
|
+
if self._service is None:
|
|
217
|
+
self._service = self.services.get(service_id=self.service_id, fetch=None)
|
|
218
|
+
assert isinstance(self._service, entities.Service)
|
|
219
|
+
return self._service
|
|
220
|
+
|
|
221
|
+
###########
|
|
222
|
+
# methods #
|
|
223
|
+
###########
|
|
224
|
+
def to_json(self):
|
|
225
|
+
"""
|
|
226
|
+
Returns platform _json format of object
|
|
227
|
+
|
|
228
|
+
:return: platform json format of object
|
|
229
|
+
:rtype: dict
|
|
230
|
+
"""
|
|
231
|
+
# get excluded
|
|
232
|
+
_json = attr.asdict(self, filter=attr.filters.exclude(attr.fields(BaseTrigger)._client_api,
|
|
233
|
+
attr.fields(BaseTrigger).project_id,
|
|
234
|
+
attr.fields(BaseTrigger)._project,
|
|
235
|
+
attr.fields(BaseTrigger)._service,
|
|
236
|
+
attr.fields(BaseTrigger).special,
|
|
237
|
+
attr.fields(BaseTrigger)._op_type,
|
|
238
|
+
attr.fields(BaseTrigger)._spec,
|
|
239
|
+
attr.fields(BaseTrigger)._repositories,
|
|
240
|
+
attr.fields(BaseTrigger).service_id,
|
|
241
|
+
attr.fields(BaseTrigger).webhook_id,
|
|
242
|
+
attr.fields(BaseTrigger).pipeline_id,
|
|
243
|
+
attr.fields(BaseTrigger).function_name,
|
|
244
|
+
attr.fields(BaseTrigger).is_global,
|
|
245
|
+
attr.fields(BaseTrigger).created_at,
|
|
246
|
+
attr.fields(BaseTrigger).updated_at,
|
|
247
|
+
attr.fields(BaseTrigger).operation,
|
|
248
|
+
attr.fields(BaseTrigger).updated_by,
|
|
249
|
+
))
|
|
250
|
+
|
|
251
|
+
# rename
|
|
252
|
+
_json['projectId'] = self.project_id
|
|
253
|
+
_json['createdAt'] = self.created_at
|
|
254
|
+
_json['updatedAt'] = self.updated_at
|
|
255
|
+
if self.is_global is not None:
|
|
256
|
+
_json['global'] = self.is_global
|
|
257
|
+
if self.updated_by is not None:
|
|
258
|
+
_json['updatedBy'] = self.updated_by
|
|
259
|
+
return _json
|
|
260
|
+
|
|
261
|
+
def delete(self):
|
|
262
|
+
"""
|
|
263
|
+
Delete Trigger object
|
|
264
|
+
|
|
265
|
+
:return: True
|
|
266
|
+
"""
|
|
267
|
+
return self.project.triggers.delete(trigger_id=self.id)
|
|
268
|
+
|
|
269
|
+
def update(self):
|
|
270
|
+
"""
|
|
271
|
+
Update Trigger object
|
|
272
|
+
|
|
273
|
+
:return: Trigger entity
|
|
274
|
+
"""
|
|
275
|
+
return self.project.triggers.update(trigger=self)
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
@attr.s
|
|
279
|
+
class Trigger(BaseTrigger):
|
|
280
|
+
"""
|
|
281
|
+
Trigger Entity
|
|
282
|
+
"""
|
|
283
|
+
filters = attr.ib(default=None, repr=False)
|
|
284
|
+
execution_mode = attr.ib(default=TriggerExecutionMode.ONCE, repr=False)
|
|
285
|
+
actions = attr.ib(default=TriggerAction.CREATED, repr=False)
|
|
286
|
+
resource = attr.ib(default=TriggerResource.ITEM, repr=False)
|
|
287
|
+
|
|
288
|
+
def to_json(self):
|
|
289
|
+
"""
|
|
290
|
+
Returns platform _json format of object
|
|
291
|
+
|
|
292
|
+
:return: platform json format of object
|
|
293
|
+
:rtype: dict
|
|
294
|
+
"""
|
|
295
|
+
_json = super().to_json()
|
|
296
|
+
|
|
297
|
+
_json['spec'] = {
|
|
298
|
+
'filter': _json.pop('filters'),
|
|
299
|
+
'executionMode': _json.pop('execution_mode'),
|
|
300
|
+
'resource': _json.pop('resource'),
|
|
301
|
+
'actions': _json.pop('actions'),
|
|
302
|
+
'input': _json.pop('input', None),
|
|
303
|
+
'operation': self.operation,
|
|
304
|
+
}
|
|
305
|
+
return _json
|
|
306
|
+
|
|
307
|
+
@classmethod
|
|
308
|
+
def from_json(cls, _json, client_api, project=None, service=None):
|
|
309
|
+
"""
|
|
310
|
+
Build a trigger entity object from a json
|
|
311
|
+
|
|
312
|
+
:param _json: platform json
|
|
313
|
+
:param client_api: ApiClient entity
|
|
314
|
+
:param dtlpy.entities.project.Project project: project entity
|
|
315
|
+
:param dtlpy.entities.service.Service service: service entity
|
|
316
|
+
:return:
|
|
317
|
+
"""
|
|
318
|
+
spec = _json.get('spec', dict())
|
|
319
|
+
operation = spec.get('operation', dict())
|
|
320
|
+
|
|
321
|
+
service_id, webhook_id, pipeline_id = cls._get_operation(operation=operation)
|
|
322
|
+
|
|
323
|
+
return cls(
|
|
324
|
+
execution_mode=spec.get('executionMode', None),
|
|
325
|
+
updated_at=_json.get('updatedAt', None),
|
|
326
|
+
created_at=_json.get('createdAt', None),
|
|
327
|
+
resource=spec.get('resource', None),
|
|
328
|
+
creator=_json.get('creator', None),
|
|
329
|
+
special=_json.get('special', None),
|
|
330
|
+
actions=spec.get('actions', None),
|
|
331
|
+
active=_json.get('active', None),
|
|
332
|
+
function_name=operation.get('functionName', None),
|
|
333
|
+
scope=_json.get('scope', None),
|
|
334
|
+
is_global=_json.get('global', None),
|
|
335
|
+
type=_json.get('type', None),
|
|
336
|
+
name=_json.get('name', None),
|
|
337
|
+
url=_json.get('url', None),
|
|
338
|
+
service_id=service_id,
|
|
339
|
+
project_id=_json.get('projectId', None),
|
|
340
|
+
input=spec.get('input', None),
|
|
341
|
+
webhook_id=webhook_id,
|
|
342
|
+
client_api=client_api,
|
|
343
|
+
filters=spec.get('filter', dict()),
|
|
344
|
+
project=project,
|
|
345
|
+
service=service,
|
|
346
|
+
id=_json.get('id', None),
|
|
347
|
+
op_type=operation.get('type', None),
|
|
348
|
+
spec=spec,
|
|
349
|
+
pipeline_id=pipeline_id,
|
|
350
|
+
operation=operation,
|
|
351
|
+
updated_by=_json.get('updatedBy', None),
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
@attr.s
|
|
356
|
+
class CronTrigger(BaseTrigger):
|
|
357
|
+
start_at = attr.ib(default=None)
|
|
358
|
+
end_at = attr.ib(default=None)
|
|
359
|
+
cron = attr.ib(default=None)
|
|
360
|
+
|
|
361
|
+
def to_json(self):
|
|
362
|
+
"""
|
|
363
|
+
Returns platform _json format of object
|
|
364
|
+
|
|
365
|
+
:return: platform json format of object
|
|
366
|
+
:rtype: dict
|
|
367
|
+
"""
|
|
368
|
+
_json = super().to_json()
|
|
369
|
+
|
|
370
|
+
_json['spec'] = {
|
|
371
|
+
'startAt': _json.pop('start_at'),
|
|
372
|
+
'endAt': _json.pop('end_at'),
|
|
373
|
+
'cron': _json.pop('cron'),
|
|
374
|
+
'input': _json.pop('input'),
|
|
375
|
+
'operation': self.operation,
|
|
376
|
+
}
|
|
377
|
+
return _json
|
|
378
|
+
|
|
379
|
+
@classmethod
|
|
380
|
+
def from_json(cls, _json, client_api, project=None, service=None):
|
|
381
|
+
"""
|
|
382
|
+
Build a trigger entity object from a json
|
|
383
|
+
|
|
384
|
+
:param _json: platform json
|
|
385
|
+
:param client_api: ApiClient entity
|
|
386
|
+
:param project: project entity
|
|
387
|
+
:param service: service entity
|
|
388
|
+
:return:
|
|
389
|
+
"""
|
|
390
|
+
spec = _json.get('spec', dict())
|
|
391
|
+
operation = spec.get('operation', dict())
|
|
392
|
+
|
|
393
|
+
project_id = _json.get('projectId', None)
|
|
394
|
+
if project_id is not None and project is not None:
|
|
395
|
+
if project_id != project.id:
|
|
396
|
+
project = None
|
|
397
|
+
|
|
398
|
+
service_id, webhook_id, pipeline_id = cls._get_operation(operation=operation)
|
|
399
|
+
return cls(
|
|
400
|
+
updated_at=_json.get('updatedAt', None),
|
|
401
|
+
created_at=_json.get('createdAt', None),
|
|
402
|
+
creator=_json.get('creator', None),
|
|
403
|
+
special=_json.get('special', None),
|
|
404
|
+
active=_json.get('active', None),
|
|
405
|
+
function_name=operation.get('functionName', None),
|
|
406
|
+
scope=_json.get('scope', None),
|
|
407
|
+
is_global=_json.get('global', None),
|
|
408
|
+
type=_json.get('type', None),
|
|
409
|
+
name=_json.get('name', None),
|
|
410
|
+
input=spec.get('input', None),
|
|
411
|
+
end_at=spec.get('endAt', None),
|
|
412
|
+
start_at=spec.get('startAt', None),
|
|
413
|
+
cron=spec.get('cron', None),
|
|
414
|
+
url=_json.get('url', None),
|
|
415
|
+
service_id=service_id,
|
|
416
|
+
project_id=project_id,
|
|
417
|
+
webhook_id=webhook_id,
|
|
418
|
+
client_api=client_api,
|
|
419
|
+
project=project,
|
|
420
|
+
service=service,
|
|
421
|
+
id=_json['id'],
|
|
422
|
+
op_type=operation.get('type', None),
|
|
423
|
+
spec=spec,
|
|
424
|
+
pipeline_id=pipeline_id,
|
|
425
|
+
operation=operation
|
|
426
|
+
)
|