digitalhub 0.10.2__py3-none-any.whl → 0.11.0__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.
Potentially problematic release.
This version of digitalhub might be problematic. Click here for more details.
- digitalhub/__init__.py +10 -0
- digitalhub/context/api.py +10 -4
- digitalhub/context/builder.py +35 -20
- digitalhub/context/context.py +35 -24
- digitalhub/entities/_base/entity/builder.py +11 -0
- digitalhub/entities/_base/executable/entity.py +52 -5
- digitalhub/entities/_base/material/utils.py +11 -11
- digitalhub/entities/_commons/enums.py +4 -0
- digitalhub/entities/_processors/base.py +15 -15
- digitalhub/entities/_processors/context.py +62 -15
- digitalhub/entities/_processors/utils.py +2 -2
- digitalhub/entities/builders.py +2 -0
- digitalhub/entities/function/_base/entity.py +3 -3
- digitalhub/entities/project/_base/builder.py +4 -0
- digitalhub/entities/project/_base/entity.py +5 -2
- digitalhub/entities/project/_base/models.py +18 -0
- digitalhub/entities/project/_base/spec.py +6 -0
- digitalhub/entities/project/crud.py +2 -13
- digitalhub/entities/run/_base/entity.py +6 -12
- digitalhub/entities/task/_base/entity.py +4 -4
- digitalhub/entities/task/_base/models.py +20 -2
- digitalhub/entities/trigger/__init__.py +0 -0
- digitalhub/entities/trigger/_base/__init__.py +0 -0
- digitalhub/entities/trigger/_base/builder.py +70 -0
- digitalhub/entities/trigger/_base/entity.py +34 -0
- digitalhub/entities/trigger/_base/spec.py +40 -0
- digitalhub/entities/trigger/_base/status.py +9 -0
- digitalhub/entities/trigger/crud.py +309 -0
- digitalhub/entities/trigger/lifecycle/__init__.py +0 -0
- digitalhub/entities/trigger/lifecycle/builder.py +19 -0
- digitalhub/entities/trigger/lifecycle/entity.py +32 -0
- digitalhub/entities/trigger/lifecycle/spec.py +38 -0
- digitalhub/entities/trigger/lifecycle/status.py +9 -0
- digitalhub/entities/trigger/scheduler/__init__.py +0 -0
- digitalhub/entities/trigger/scheduler/builder.py +19 -0
- digitalhub/entities/trigger/scheduler/entity.py +32 -0
- digitalhub/entities/trigger/scheduler/spec.py +29 -0
- digitalhub/entities/trigger/scheduler/status.py +9 -0
- digitalhub/entities/workflow/_base/entity.py +3 -3
- digitalhub/factory/factory.py +113 -26
- digitalhub/factory/utils.py +31 -14
- digitalhub/runtimes/_base.py +22 -11
- digitalhub/runtimes/builder.py +16 -3
- digitalhub/runtimes/enums.py +11 -1
- digitalhub/stores/client/dhcore/client.py +1 -0
- digitalhub/stores/client/dhcore/configurator.py +80 -11
- digitalhub/stores/client/dhcore/utils.py +1 -0
- digitalhub/stores/configurator/configurator.py +5 -2
- digitalhub/stores/configurator/enums.py +9 -0
- digitalhub/stores/configurator/ini_module.py +58 -4
- digitalhub/stores/data/api.py +2 -2
- digitalhub/stores/data/builder.py +5 -6
- digitalhub/stores/data/enums.py +11 -0
- digitalhub/stores/data/local/store.py +0 -3
- digitalhub/stores/data/remote/store.py +0 -3
- digitalhub/stores/data/s3/configurator.py +0 -20
- digitalhub/stores/data/s3/enums.py +2 -3
- digitalhub/stores/data/s3/store.py +4 -10
- digitalhub/stores/data/s3/utils.py +13 -18
- digitalhub/stores/data/sql/configurator.py +9 -22
- digitalhub/stores/data/sql/store.py +1 -3
- digitalhub/stores/data/utils.py +34 -0
- digitalhub/utils/file_utils.py +1 -1
- digitalhub/utils/generic_utils.py +37 -0
- digitalhub/utils/uri_utils.py +5 -0
- {digitalhub-0.10.2.dist-info → digitalhub-0.11.0.dist-info}/METADATA +1 -1
- {digitalhub-0.10.2.dist-info → digitalhub-0.11.0.dist-info}/RECORD +69 -52
- digitalhub/factory/api.py +0 -277
- digitalhub/stores/data/s3/models.py +0 -21
- digitalhub/stores/data/sql/models.py +0 -24
- {digitalhub-0.10.2.dist-info → digitalhub-0.11.0.dist-info}/WHEEL +0 -0
- {digitalhub-0.10.2.dist-info → digitalhub-0.11.0.dist-info}/licenses/LICENSE.txt +0 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities._commons.enums import EntityTypes
|
|
6
|
+
from digitalhub.entities._processors.context import context_processor
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from digitalhub.entities.trigger._base.entity import Trigger
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
ENTITY_TYPE = EntityTypes.TRIGGER.value
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def new_trigger(
|
|
16
|
+
project: str,
|
|
17
|
+
name: str,
|
|
18
|
+
kind: str,
|
|
19
|
+
task: str,
|
|
20
|
+
function: str | None = None,
|
|
21
|
+
workflow: str | None = None,
|
|
22
|
+
uuid: str | None = None,
|
|
23
|
+
description: str | None = None,
|
|
24
|
+
labels: list[str] | None = None,
|
|
25
|
+
embedded: bool = False,
|
|
26
|
+
template: dict | None = None,
|
|
27
|
+
**kwargs,
|
|
28
|
+
) -> Trigger:
|
|
29
|
+
"""
|
|
30
|
+
Create a new object.
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
project : str
|
|
35
|
+
Project name.
|
|
36
|
+
name : str
|
|
37
|
+
Object name.
|
|
38
|
+
kind : str
|
|
39
|
+
Kind the object.
|
|
40
|
+
uuid : str
|
|
41
|
+
ID of the object.
|
|
42
|
+
description : str
|
|
43
|
+
Description of the object (human readable).
|
|
44
|
+
labels : list[str]
|
|
45
|
+
List of labels.
|
|
46
|
+
embedded : bool
|
|
47
|
+
Flag to determine if object spec must be embedded in project spec.
|
|
48
|
+
**kwargs : dict
|
|
49
|
+
Spec keyword arguments.
|
|
50
|
+
|
|
51
|
+
Returns
|
|
52
|
+
-------
|
|
53
|
+
Trigger
|
|
54
|
+
Object instance.
|
|
55
|
+
|
|
56
|
+
Examples
|
|
57
|
+
--------
|
|
58
|
+
>>> obj = new_trigger(project="my-project",
|
|
59
|
+
>>> kind="trigger",
|
|
60
|
+
>>> name="my-trigger",)
|
|
61
|
+
"""
|
|
62
|
+
if workflow is None and function is None:
|
|
63
|
+
raise ValueError("Workflow or function must be provided")
|
|
64
|
+
if kwargs is None:
|
|
65
|
+
kwargs = {}
|
|
66
|
+
if template is None:
|
|
67
|
+
template = {}
|
|
68
|
+
template["task"] = task
|
|
69
|
+
if workflow is not None:
|
|
70
|
+
template["workflow"] = workflow
|
|
71
|
+
if function is not None:
|
|
72
|
+
template["function"] = function
|
|
73
|
+
kwargs["template"] = template
|
|
74
|
+
return context_processor.create_context_entity(
|
|
75
|
+
project=project,
|
|
76
|
+
name=name,
|
|
77
|
+
kind=kind,
|
|
78
|
+
uuid=uuid,
|
|
79
|
+
description=description,
|
|
80
|
+
labels=labels,
|
|
81
|
+
embedded=embedded,
|
|
82
|
+
**kwargs,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def get_trigger(
|
|
87
|
+
identifier: str,
|
|
88
|
+
project: str | None = None,
|
|
89
|
+
entity_id: str | None = None,
|
|
90
|
+
**kwargs,
|
|
91
|
+
) -> Trigger:
|
|
92
|
+
"""
|
|
93
|
+
Get object from backend.
|
|
94
|
+
|
|
95
|
+
Parameters
|
|
96
|
+
----------
|
|
97
|
+
identifier : str
|
|
98
|
+
Entity key (store://...) or entity name.
|
|
99
|
+
project : str
|
|
100
|
+
Project name.
|
|
101
|
+
entity_id : str
|
|
102
|
+
Entity ID.
|
|
103
|
+
**kwargs : dict
|
|
104
|
+
Parameters to pass to the API call.
|
|
105
|
+
|
|
106
|
+
Returns
|
|
107
|
+
-------
|
|
108
|
+
Trigger
|
|
109
|
+
Object instance.
|
|
110
|
+
|
|
111
|
+
Examples
|
|
112
|
+
--------
|
|
113
|
+
Using entity key:
|
|
114
|
+
>>> obj = get_trigger("store://my-trigger-key")
|
|
115
|
+
|
|
116
|
+
Using entity name:
|
|
117
|
+
>>> obj = get_trigger("my-trigger-name"
|
|
118
|
+
>>> project="my-project",
|
|
119
|
+
>>> entity_id="my-trigger-id")
|
|
120
|
+
"""
|
|
121
|
+
return context_processor.read_context_entity(
|
|
122
|
+
identifier,
|
|
123
|
+
entity_type=ENTITY_TYPE,
|
|
124
|
+
project=project,
|
|
125
|
+
entity_id=entity_id,
|
|
126
|
+
**kwargs,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def get_trigger_versions(
|
|
131
|
+
identifier: str,
|
|
132
|
+
project: str | None = None,
|
|
133
|
+
**kwargs,
|
|
134
|
+
) -> list[Trigger]:
|
|
135
|
+
"""
|
|
136
|
+
Get object versions from backend.
|
|
137
|
+
|
|
138
|
+
Parameters
|
|
139
|
+
----------
|
|
140
|
+
identifier : str
|
|
141
|
+
Entity key (store://...) or entity name.
|
|
142
|
+
project : str
|
|
143
|
+
Project name.
|
|
144
|
+
**kwargs : dict
|
|
145
|
+
Parameters to pass to the API call.
|
|
146
|
+
|
|
147
|
+
Returns
|
|
148
|
+
-------
|
|
149
|
+
list[Trigger]
|
|
150
|
+
List of object instances.
|
|
151
|
+
|
|
152
|
+
Examples
|
|
153
|
+
--------
|
|
154
|
+
Using entity key:
|
|
155
|
+
>>> objs = get_trigger_versions("store://my-trigger-key")
|
|
156
|
+
|
|
157
|
+
Using entity name:
|
|
158
|
+
>>> objs = get_trigger_versions("my-trigger-name",
|
|
159
|
+
>>> project="my-project")
|
|
160
|
+
"""
|
|
161
|
+
return context_processor.read_context_entity_versions(
|
|
162
|
+
identifier,
|
|
163
|
+
entity_type=ENTITY_TYPE,
|
|
164
|
+
project=project,
|
|
165
|
+
**kwargs,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def list_triggers(project: str, **kwargs) -> list[Trigger]:
|
|
170
|
+
"""
|
|
171
|
+
List all latest version objects from backend.
|
|
172
|
+
|
|
173
|
+
Parameters
|
|
174
|
+
----------
|
|
175
|
+
project : str
|
|
176
|
+
Project name.
|
|
177
|
+
**kwargs : dict
|
|
178
|
+
Parameters to pass to the API call.
|
|
179
|
+
|
|
180
|
+
Returns
|
|
181
|
+
-------
|
|
182
|
+
list[Trigger]
|
|
183
|
+
List of object instances.
|
|
184
|
+
|
|
185
|
+
Examples
|
|
186
|
+
--------
|
|
187
|
+
>>> objs = list_triggers(project="my-project")
|
|
188
|
+
"""
|
|
189
|
+
return context_processor.list_context_entities(
|
|
190
|
+
project=project,
|
|
191
|
+
entity_type=ENTITY_TYPE,
|
|
192
|
+
**kwargs,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def import_trigger(file: str) -> Trigger:
|
|
197
|
+
"""
|
|
198
|
+
Import object from a YAML file and create a new object into the backend.
|
|
199
|
+
|
|
200
|
+
Parameters
|
|
201
|
+
----------
|
|
202
|
+
file : str
|
|
203
|
+
Path to YAML file.
|
|
204
|
+
|
|
205
|
+
Returns
|
|
206
|
+
-------
|
|
207
|
+
Trigger
|
|
208
|
+
Object instance.
|
|
209
|
+
|
|
210
|
+
Examples
|
|
211
|
+
--------
|
|
212
|
+
>>> obj = import_trigger("my-trigger.yaml")
|
|
213
|
+
"""
|
|
214
|
+
return context_processor.import_context_entity(file)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def load_trigger(file: str) -> Trigger:
|
|
218
|
+
"""
|
|
219
|
+
Load object from a YAML file and update an existing object into the backend.
|
|
220
|
+
|
|
221
|
+
Parameters
|
|
222
|
+
----------
|
|
223
|
+
file : str
|
|
224
|
+
Path to YAML file.
|
|
225
|
+
|
|
226
|
+
Returns
|
|
227
|
+
-------
|
|
228
|
+
Trigger
|
|
229
|
+
Object instance.
|
|
230
|
+
|
|
231
|
+
Examples
|
|
232
|
+
--------
|
|
233
|
+
>>> obj = load_trigger("my-trigger.yaml")
|
|
234
|
+
"""
|
|
235
|
+
return context_processor.load_context_entity(file)
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def update_trigger(entity: Trigger) -> Trigger:
|
|
239
|
+
"""
|
|
240
|
+
Update object. Note that object spec are immutable.
|
|
241
|
+
|
|
242
|
+
Parameters
|
|
243
|
+
----------
|
|
244
|
+
entity : Trigger
|
|
245
|
+
Object to update.
|
|
246
|
+
|
|
247
|
+
Returns
|
|
248
|
+
-------
|
|
249
|
+
Trigger
|
|
250
|
+
Entity updated.
|
|
251
|
+
|
|
252
|
+
Examples
|
|
253
|
+
--------
|
|
254
|
+
>>> obj = update_trigger(obj)
|
|
255
|
+
"""
|
|
256
|
+
return context_processor.update_context_entity(
|
|
257
|
+
project=entity.project,
|
|
258
|
+
entity_type=entity.ENTITY_TYPE,
|
|
259
|
+
entity_id=entity.id,
|
|
260
|
+
entity_dict=entity.to_dict(),
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def delete_trigger(
|
|
265
|
+
identifier: str,
|
|
266
|
+
project: str | None = None,
|
|
267
|
+
entity_id: str | None = None,
|
|
268
|
+
delete_all_versions: bool = False,
|
|
269
|
+
**kwargs,
|
|
270
|
+
) -> dict:
|
|
271
|
+
"""
|
|
272
|
+
Delete object from backend.
|
|
273
|
+
|
|
274
|
+
Parameters
|
|
275
|
+
----------
|
|
276
|
+
identifier : str
|
|
277
|
+
Entity key (store://...) or entity name.
|
|
278
|
+
project : str
|
|
279
|
+
Project name.
|
|
280
|
+
entity_id : str
|
|
281
|
+
Entity ID.
|
|
282
|
+
delete_all_versions : bool
|
|
283
|
+
Delete all versions of the named entity. If True, use entity name instead of entity key as identifier.
|
|
284
|
+
**kwargs : dict
|
|
285
|
+
Parameters to pass to the API call.
|
|
286
|
+
|
|
287
|
+
Returns
|
|
288
|
+
-------
|
|
289
|
+
dict
|
|
290
|
+
Response from backend.
|
|
291
|
+
|
|
292
|
+
Examples
|
|
293
|
+
--------
|
|
294
|
+
If delete_all_versions is False:
|
|
295
|
+
>>> obj = delete_trigger("store://my-trigger-key")
|
|
296
|
+
|
|
297
|
+
Otherwise:
|
|
298
|
+
>>> obj = delete_trigger("my-trigger-name"
|
|
299
|
+
>>> project="my-project",
|
|
300
|
+
>>> delete_all_versions=True)
|
|
301
|
+
"""
|
|
302
|
+
return context_processor.delete_context_entity(
|
|
303
|
+
identifier=identifier,
|
|
304
|
+
entity_type=ENTITY_TYPE,
|
|
305
|
+
project=project,
|
|
306
|
+
entity_id=entity_id,
|
|
307
|
+
delete_all_versions=delete_all_versions,
|
|
308
|
+
**kwargs,
|
|
309
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._commons.enums import EntityKinds
|
|
4
|
+
from digitalhub.entities.trigger._base.builder import TriggerBuilder
|
|
5
|
+
from digitalhub.entities.trigger.lifecycle.entity import TriggerLifecycle
|
|
6
|
+
from digitalhub.entities.trigger.lifecycle.spec import TriggerSpecLifecycle, TriggerValidatorLifecycle
|
|
7
|
+
from digitalhub.entities.trigger.lifecycle.status import TriggerStatusLifecycle
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TriggerLifecycleBuilder(TriggerBuilder):
|
|
11
|
+
"""
|
|
12
|
+
TriggerLifecycle builder.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
ENTITY_CLASS = TriggerLifecycle
|
|
16
|
+
ENTITY_SPEC_CLASS = TriggerSpecLifecycle
|
|
17
|
+
ENTITY_SPEC_VALIDATOR = TriggerValidatorLifecycle
|
|
18
|
+
ENTITY_STATUS_CLASS = TriggerStatusLifecycle
|
|
19
|
+
ENTITY_KIND = EntityKinds.TRIGGER_LIFECYCLE.value
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities.trigger._base.entity import Trigger
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
9
|
+
from digitalhub.entities.trigger.lifecycle.spec import TriggerSpecLifecycle
|
|
10
|
+
from digitalhub.entities.trigger.lifecycle.status import TriggerStatusLifecycle
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TriggerLifecycle(Trigger):
|
|
14
|
+
"""
|
|
15
|
+
TriggerLifecycle class.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
project: str,
|
|
21
|
+
name: str,
|
|
22
|
+
uuid: str,
|
|
23
|
+
kind: str,
|
|
24
|
+
metadata: Metadata,
|
|
25
|
+
spec: TriggerSpecLifecycle,
|
|
26
|
+
status: TriggerStatusLifecycle,
|
|
27
|
+
user: str | None = None,
|
|
28
|
+
) -> None:
|
|
29
|
+
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
30
|
+
|
|
31
|
+
self.spec: TriggerSpecLifecycle
|
|
32
|
+
self.status: TriggerStatusLifecycle
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities.trigger._base.spec import TriggerSpec, TriggerValidator
|
|
6
|
+
|
|
7
|
+
regexp = r"store://([^/]+)/(.+)"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TriggerSpecLifecycle(TriggerSpec):
|
|
11
|
+
"""
|
|
12
|
+
TriggerSpecLifecycle specifications.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
task: str,
|
|
18
|
+
template: dict,
|
|
19
|
+
function: str | None = None,
|
|
20
|
+
workflow: str | None = None,
|
|
21
|
+
key: str | None = None,
|
|
22
|
+
states: list[str] | None = None,
|
|
23
|
+
) -> None:
|
|
24
|
+
super().__init__(task, template, function, workflow)
|
|
25
|
+
self.key = key
|
|
26
|
+
self.states = states
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class TriggerValidatorLifecycle(TriggerValidator):
|
|
30
|
+
"""
|
|
31
|
+
TriggerValidatorLifecycle validator.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
key: str = Field(pattern=regexp)
|
|
35
|
+
"""Entity key."""
|
|
36
|
+
|
|
37
|
+
states: list[str] = None
|
|
38
|
+
"""List of entity states."""
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._commons.enums import EntityKinds
|
|
4
|
+
from digitalhub.entities.trigger._base.builder import TriggerBuilder
|
|
5
|
+
from digitalhub.entities.trigger.scheduler.entity import TriggerScheduler
|
|
6
|
+
from digitalhub.entities.trigger.scheduler.spec import TriggerSpecScheduler, TriggerValidatorScheduler
|
|
7
|
+
from digitalhub.entities.trigger.scheduler.status import TriggerStatusScheduler
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TriggerSchedulerBuilder(TriggerBuilder):
|
|
11
|
+
"""
|
|
12
|
+
TriggerScheduler builder.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
ENTITY_CLASS = TriggerScheduler
|
|
16
|
+
ENTITY_SPEC_CLASS = TriggerSpecScheduler
|
|
17
|
+
ENTITY_SPEC_VALIDATOR = TriggerValidatorScheduler
|
|
18
|
+
ENTITY_STATUS_CLASS = TriggerStatusScheduler
|
|
19
|
+
ENTITY_KIND = EntityKinds.TRIGGER_SCHEDULER.value
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities.trigger._base.entity import Trigger
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
9
|
+
from digitalhub.entities.trigger.scheduler.spec import TriggerSpecScheduler
|
|
10
|
+
from digitalhub.entities.trigger.scheduler.status import TriggerStatusScheduler
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TriggerScheduler(Trigger):
|
|
14
|
+
"""
|
|
15
|
+
TriggerScheduler class.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
project: str,
|
|
21
|
+
name: str,
|
|
22
|
+
uuid: str,
|
|
23
|
+
kind: str,
|
|
24
|
+
metadata: Metadata,
|
|
25
|
+
spec: TriggerSpecScheduler,
|
|
26
|
+
status: TriggerStatusScheduler,
|
|
27
|
+
user: str | None = None,
|
|
28
|
+
) -> None:
|
|
29
|
+
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
30
|
+
|
|
31
|
+
self.spec: TriggerSpecScheduler
|
|
32
|
+
self.status: TriggerStatusScheduler
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.trigger._base.spec import TriggerSpec, TriggerValidator
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TriggerSpecScheduler(TriggerSpec):
|
|
7
|
+
"""
|
|
8
|
+
TriggerSpecScheduler specifications.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
def __init__(
|
|
12
|
+
self,
|
|
13
|
+
task: str,
|
|
14
|
+
template: dict,
|
|
15
|
+
function: str | None = None,
|
|
16
|
+
workflow: str | None = None,
|
|
17
|
+
schedule: str | None = None,
|
|
18
|
+
) -> None:
|
|
19
|
+
super().__init__(task, template, function, workflow)
|
|
20
|
+
self.schedule = schedule
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TriggerValidatorScheduler(TriggerValidator):
|
|
24
|
+
"""
|
|
25
|
+
TriggerValidatorScheduler validator.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
schedule: str
|
|
29
|
+
"""Quartz cron expression."""
|
|
@@ -4,7 +4,7 @@ import typing
|
|
|
4
4
|
|
|
5
5
|
from digitalhub.entities._base.executable.entity import ExecutableEntity
|
|
6
6
|
from digitalhub.entities._commons.enums import EntityTypes, Relationship
|
|
7
|
-
from digitalhub.factory.
|
|
7
|
+
from digitalhub.factory.factory import factory
|
|
8
8
|
from digitalhub.utils.exceptions import BackendError
|
|
9
9
|
|
|
10
10
|
if typing.TYPE_CHECKING:
|
|
@@ -68,8 +68,8 @@ class Workflow(ExecutableEntity):
|
|
|
68
68
|
Run instance.
|
|
69
69
|
"""
|
|
70
70
|
# Get task and run kind
|
|
71
|
-
task_kind = get_task_kind_from_action(self.kind, action)
|
|
72
|
-
run_kind = get_run_kind(self.kind)
|
|
71
|
+
task_kind = factory.get_task_kind_from_action(self.kind, action)
|
|
72
|
+
run_kind = factory.get_run_kind(self.kind)
|
|
73
73
|
|
|
74
74
|
# Create or update new task
|
|
75
75
|
task = self._get_or_create_task(task_kind)
|