digitalhub 0.11.0b6__py3-none-any.whl → 0.11.0b7__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.

@@ -12,7 +12,7 @@ from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
12
12
 
13
13
  if typing.TYPE_CHECKING:
14
14
  from digitalhub.entities._base.entity.metadata import Metadata
15
- from digitalhub.entities._base.entity.spec import Spec
15
+ from digitalhub.entities._base.entity.spec import Spec, SpecValidator
16
16
  from digitalhub.entities._base.entity.status import Status
17
17
  from digitalhub.entities.run._base.entity import Run
18
18
  from digitalhub.entities.task._base.entity import Task
@@ -409,22 +409,43 @@ class ExecutableEntity(VersionedEntity):
409
409
  # Trigger
410
410
  ##############################
411
411
 
412
- def new_trigger(self, trigger_kind: str, **kwargs) -> Trigger:
412
+ def trigger(self, action: str, trigger_kind: str, trigger_name: str, **kwargs) -> Trigger:
413
413
  """
414
- Create new trigger.
414
+ Trigger function.
415
415
 
416
416
  Parameters
417
417
  ----------
418
+ action : str
419
+ Action to execute.
418
420
  trigger_kind : str
419
- Kind the object.
421
+ Trigger kind.
420
422
  **kwargs : dict
421
- Keyword arguments.
423
+ Keyword arguments passed to Run builder.
422
424
 
423
425
  Returns
424
426
  -------
425
- Trigger
426
- New trigger.
427
+ Run
428
+ Run instance.
427
429
  """
430
+ # Get task
431
+ task_kind = factory.get_task_kind_from_action(self.kind, action)
432
+ task = self._get_or_create_task(task_kind)
433
+ task_string = task._get_task_string()
434
+
435
+ # Get run validator for building trigger template
436
+ run_kind = factory.get_run_kind(self.kind)
437
+ run_validator: SpecValidator = factory.get_spec_validator(run_kind)
438
+ if kwargs is None:
439
+ kwargs = {}
440
+
441
+ # Override kwargs
442
+ kwargs["project"] = self.project
443
+ kwargs["kind"] = trigger_kind
444
+ kwargs["name"] = trigger_name
445
+ kwargs[self.ENTITY_TYPE] = self._get_executable_string()
446
+ kwargs["task"] = task_string
447
+ kwargs["template"] = run_validator(**kwargs).to_dict()
448
+
428
449
  # Create object instance
429
450
  trigger: Trigger = factory.build_entity_from_params(**kwargs)
430
451
  trigger.save()
@@ -106,3 +106,4 @@ class EntityKinds(Enum):
106
106
  MODEL_SKLEARN = "sklearn"
107
107
  SECRET_SECRET = "secret"
108
108
  TRIGGER_SCHEDULER = "scheduler"
109
+ TRIGGER_LIFECYCLE = "lifecycle"
@@ -10,11 +10,9 @@ from digitalhub.utils.exceptions import BackendError
10
10
 
11
11
  if typing.TYPE_CHECKING:
12
12
  from digitalhub.entities._base.entity.metadata import Metadata
13
- from digitalhub.entities._base.entity.spec import SpecValidator
14
13
  from digitalhub.entities.function._base.spec import FunctionSpec
15
14
  from digitalhub.entities.function._base.status import FunctionStatus
16
15
  from digitalhub.entities.run._base.entity import Run
17
- from digitalhub.entities.trigger._base.entity import Trigger
18
16
 
19
17
 
20
18
  class Function(ExecutableEntity):
@@ -102,47 +100,3 @@ class Function(ExecutableEntity):
102
100
  result = executor.submit(run.run)
103
101
  r = result.result()
104
102
  return r
105
-
106
- def trigger(self, action: str, trigger_kind: str, trigger_name: str, **kwargs) -> Trigger:
107
- """
108
- Trigger function.
109
-
110
- Parameters
111
- ----------
112
- action : str
113
- Action to execute.
114
- trigger_kind : str
115
- Trigger kind.
116
- **kwargs : dict
117
- Keyword arguments passed to Run builder.
118
-
119
- Returns
120
- -------
121
- Run
122
- Run instance.
123
- """
124
- # Get task
125
- task_kind = factory.get_task_kind_from_action(self.kind, action)
126
- task = self._get_or_create_task(task_kind)
127
- task_string = task._get_task_string()
128
-
129
- # Get run validator for building trigger template
130
- run_kind = factory.get_run_kind(self.kind)
131
- run_validator: SpecValidator = factory.get_spec_validator(run_kind)
132
- if kwargs is None:
133
- kwargs = {}
134
- kwargs[self.ENTITY_TYPE] = self._get_executable_string()
135
- kwargs["task"] = task_string
136
-
137
- template = run_validator(**kwargs).to_dict()
138
-
139
- # Override kwargs
140
- kwargs["project"] = self.project
141
- kwargs["kind"] = trigger_kind
142
- kwargs["name"] = trigger_name
143
- kwargs["template"] = template
144
-
145
- # Create object instance
146
- trigger: Trigger = factory.build_entity_from_params(**kwargs)
147
- trigger.save()
148
- return trigger
@@ -8,11 +8,18 @@ class TriggerSpec(Spec):
8
8
  TriggerSpec specifications.
9
9
  """
10
10
 
11
- def __init__(self, task: str, function: str, template: dict) -> None:
11
+ def __init__(
12
+ self,
13
+ task: str,
14
+ template: dict,
15
+ function: str | None = None,
16
+ workflow: str | None = None,
17
+ ) -> None:
12
18
  super().__init__()
13
19
  self.task = task
14
- self.function = function
15
20
  self.template = template
21
+ self.function = function
22
+ self.workflow = workflow
16
23
 
17
24
 
18
25
  class TriggerValidator(SpecValidator):
@@ -23,8 +30,11 @@ class TriggerValidator(SpecValidator):
23
30
  task: str
24
31
  """Task string."""
25
32
 
26
- function: str
33
+ template: dict
34
+ """Template map."""
35
+
36
+ function: str = None
27
37
  """Function string."""
28
38
 
29
- template: dict
30
- """Template string."""
39
+ workflow: str = None
40
+ """Workflow string."""
@@ -18,6 +18,7 @@ def new_trigger(
18
18
  kind: str,
19
19
  task: str,
20
20
  function: str | None = None,
21
+ workflow: str | None = None,
21
22
  uuid: str | None = None,
22
23
  description: str | None = None,
23
24
  labels: list[str] | None = None,
@@ -58,12 +59,17 @@ def new_trigger(
58
59
  >>> kind="trigger",
59
60
  >>> name="my-trigger",)
60
61
  """
62
+ if workflow is None and function is None:
63
+ raise ValueError("Workflow or function must be provided")
61
64
  if kwargs is None:
62
65
  kwargs = {}
63
66
  if template is None:
64
67
  template = {}
65
68
  template["task"] = task
66
- template["function"] = function
69
+ if workflow is not None:
70
+ template["workflow"] = workflow
71
+ if function is not None:
72
+ template["function"] = function
67
73
  kwargs["template"] = template
68
74
  return context_processor.create_context_entity(
69
75
  project=project,
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."""
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities.trigger._base.status import TriggerStatus
4
+
5
+
6
+ class TriggerStatusLifecycle(TriggerStatus):
7
+ """
8
+ TriggerStatusLifecycle status.
9
+ """
@@ -8,8 +8,15 @@ class TriggerSpecScheduler(TriggerSpec):
8
8
  TriggerSpecScheduler specifications.
9
9
  """
10
10
 
11
- def __init__(self, task: str, function: str, template: dict, schedule: str) -> None:
12
- super().__init__(task, function, template)
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)
13
20
  self.schedule = schedule
14
21
 
15
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalhub
3
- Version: 0.11.0b6
3
+ Version: 0.11.0b7
4
4
  Summary: Python SDK for Digitalhub
5
5
  Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk
6
6
  Author-email: Fondazione Bruno Kessler <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
@@ -22,7 +22,7 @@ digitalhub/entities/_base/entity/_constructors/spec.py,sha256=zEC7MDDKTf8nIIgR5s
22
22
  digitalhub/entities/_base/entity/_constructors/status.py,sha256=wetvpnQTtkjZ-pMO2jFnGyLbM_Ve-k9lXGl0f-eI20M,1190
23
23
  digitalhub/entities/_base/entity/_constructors/uuid.py,sha256=QzG0nsVpGU2UDD5CjpkOM2RfVaCHPdLp2HoQt8TM_tk,555
24
24
  digitalhub/entities/_base/executable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- digitalhub/entities/_base/executable/entity.py,sha256=I6LbVEuMbiXcxkTPeaID3lL-_Ms2dntO0wTDtDj8XqE,10742
25
+ digitalhub/entities/_base/executable/entity.py,sha256=797e2RlkyRP0T5aT1mLXCz_E1BB0knWeV7UnURTST2E,11587
26
26
  digitalhub/entities/_base/material/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  digitalhub/entities/_base/material/entity.py,sha256=cEpVmtzSjYXENlT6YJua9IV8Ac5EtSkigYREht4U60A,7015
28
28
  digitalhub/entities/_base/material/spec.py,sha256=jL1OohnYhUSrdTaFF3Rkw817jIjNY0ewm1wB3tgQ_9c,436
@@ -37,7 +37,7 @@ digitalhub/entities/_base/versioned/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
37
37
  digitalhub/entities/_base/versioned/builder.py,sha256=0niRbqpCnHqBK0hTQxdrtUl43BbJuGXMLVbruhpUUuU,1896
38
38
  digitalhub/entities/_base/versioned/entity.py,sha256=h4YX6smpPjIVW8DOVdRYW-abOcoJ_F0OkozLhLxpjWI,899
39
39
  digitalhub/entities/_commons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- digitalhub/entities/_commons/enums.py,sha256=KUzaKLUz31qW2QTT8lZ3tP6nbjJZvkw_vTzSrH9iS30,2017
40
+ digitalhub/entities/_commons/enums.py,sha256=COg-eVsmCBWAKuwf7_fPvEBmB2pU7Yw6-kM8xGn-RNE,2053
41
41
  digitalhub/entities/_commons/metrics.py,sha256=SYb980t9smzJVUWGqE4Ug0t-0wPXYJZ_nJRi_9bhcpw,3405
42
42
  digitalhub/entities/_commons/types.py,sha256=bwK-2iQHL2gdtOPfRcXWBRWqqS1Tic6ywRQsJSocn9c,118
43
43
  digitalhub/entities/_commons/utils.py,sha256=354ZL5wKvijJ2A25pM0xK5JMhgTyZF6urjHZNjosINI,1846
@@ -87,7 +87,7 @@ digitalhub/entities/function/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
87
87
  digitalhub/entities/function/crud.py,sha256=NZ7nbCdpMW2shGD1AWx2CKpE_eX_v7bVtDC0EZwJmJc,6662
88
88
  digitalhub/entities/function/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
89
  digitalhub/entities/function/_base/builder.py,sha256=xTVOpH3GYU-BqtzMEuI3uMtLLvF9IYfrVYMVPkkJc2g,2035
90
- digitalhub/entities/function/_base/entity.py,sha256=2_64VJTIPuQAwempvuHYX-YT5HA94pXaWE3c9hkp8Ok,4566
90
+ digitalhub/entities/function/_base/entity.py,sha256=Ydhj1Zg97FrUtg1ujqEfNhDYwc6JVfoaApGNAlxrA88,3081
91
91
  digitalhub/entities/function/_base/spec.py,sha256=SjCtp3JBUTPTLMY_TE8wM1HPKVl7jH_wFEqQXBj1rfo,274
92
92
  digitalhub/entities/function/_base/status.py,sha256=N-Z1hw13qV7kWFJLQPaH3rRZ2z7AvZeuWYER95lG344,170
93
93
  digitalhub/entities/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -153,16 +153,21 @@ digitalhub/entities/task/_base/spec.py,sha256=4JsbQxx05UYjAerSNBCrLSjwMLYeMSqgPI
153
153
  digitalhub/entities/task/_base/status.py,sha256=FCSSQscQ0dHEpXdc5vSrIkTXon9FNNOr0M1KVh2ZVAA,162
154
154
  digitalhub/entities/task/_base/utils.py,sha256=faeAN7r_5q0KWDj1vrbVvFMcCpeMw7fK7vGScSpFZCI,448
155
155
  digitalhub/entities/trigger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
- digitalhub/entities/trigger/crud.py,sha256=6z7lzS4FanOzCvoHpkMYNEoPBDKsAy4D0QjZx2VpgS0,6642
156
+ digitalhub/entities/trigger/crud.py,sha256=nIHmFUkQxud6TiEh2UYMD40Sq5gc0AbyN1Fuw7YjDJ8,6889
157
157
  digitalhub/entities/trigger/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  digitalhub/entities/trigger/_base/builder.py,sha256=U__HQi1TLRRIZxl2ih4mU81S0V14iYsouYgrL4nYsmo,1727
159
159
  digitalhub/entities/trigger/_base/entity.py,sha256=f2Al2TPEDFR1asnjMZgoKOEmi01AZk9Q13gHiKzW_CA,937
160
- digitalhub/entities/trigger/_base/spec.py,sha256=8O3nr2QbsmgJ2TCB27ZWXU7_-mP2auYp5StlquF4mVY,594
160
+ digitalhub/entities/trigger/_base/spec.py,sha256=gYR0pwE-MuiEM-IQHxhLfNNHCHtLwr0g47S2qadO070,774
161
161
  digitalhub/entities/trigger/_base/status.py,sha256=74C6yFnsK55XDecEQ94kWQO_sva8bYNfKdoyEXM9FrM,168
162
+ digitalhub/entities/trigger/lifecycle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
+ digitalhub/entities/trigger/lifecycle/builder.py,sha256=FYzHLQ4e8gdErwErNgME6Nigf7HOtCdOcorRUEJRJ2c,755
164
+ digitalhub/entities/trigger/lifecycle/entity.py,sha256=AeUv5wS6yUgEAI5_K54iB0WBgpQUiMihwKqAJuSeqos,879
165
+ digitalhub/entities/trigger/lifecycle/spec.py,sha256=Rs2CW3N38k95AV4h5DTslvP20Zd2Ms5BnYlQbvI7gKA,863
166
+ digitalhub/entities/trigger/lifecycle/status.py,sha256=RzGLkVGdXDeUG33mD2ZtIBztrwenFCUU9uT1mnnCAzQ,201
162
167
  digitalhub/entities/trigger/scheduler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
168
  digitalhub/entities/trigger/scheduler/builder.py,sha256=I8FTl-xVnLq6yeErixBolmJQbwR6FwmNLk-YiZVjxLA,755
164
169
  digitalhub/entities/trigger/scheduler/entity.py,sha256=Lsb7e7mR3ddZryD3vvKzfW-vg87H-8qOtZxV1TvAt6I,879
165
- digitalhub/entities/trigger/scheduler/spec.py,sha256=63M6tIcUk5CgQE9Z7SvLIMjCuZD8rKbSc8KOApRmb3I,554
170
+ digitalhub/entities/trigger/scheduler/spec.py,sha256=wOYI2N0FL0ltUiHzaXwmBNLUkR8aprHZvoo3Akk4Nsg,676
166
171
  digitalhub/entities/trigger/scheduler/status.py,sha256=AhY2jzzX0FnwfIpz824MbZkGNj-ZqPq_heZ5Q689KZo,201
167
172
  digitalhub/entities/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
173
  digitalhub/entities/workflow/crud.py,sha256=pOl2JjKTqTl6-iermH53nO6hUElSCsLYmx3TYLenhmI,6587
@@ -250,7 +255,7 @@ digitalhub/utils/io_utils.py,sha256=8jD4Rp_b7LZEpY5JSMxVUowZsnifKnbGpHT5Hijx9-g,
250
255
  digitalhub/utils/logger.py,sha256=ml3ne6D8wuRdNZ4F6ywmvWotSxjmZWnmKgNiuHb4R5M,437
251
256
  digitalhub/utils/types.py,sha256=x8zXsbivD8vdaNeNRZLKOPvGbz6d-59nncuvO0FsueY,109
252
257
  digitalhub/utils/uri_utils.py,sha256=wVkA2OcfHG5EcQOr9YxLJzo--VV6sjFjgXDNx-gP94I,4021
253
- digitalhub-0.11.0b6.dist-info/METADATA,sha256=smZg332rpxDxzwAon79H6fxpKN-U82T-wLN8xQTO0sk,15037
254
- digitalhub-0.11.0b6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
255
- digitalhub-0.11.0b6.dist-info/licenses/LICENSE.txt,sha256=qmrTTXPlgU0kSRlRVbjhlyGs1IXs2QPxo_Y-Mn06J0k,11589
256
- digitalhub-0.11.0b6.dist-info/RECORD,,
258
+ digitalhub-0.11.0b7.dist-info/METADATA,sha256=vU-2Mer7B-Ox8GtViU5i1o-JQBgc-unDmH3GrmVotdQ,15037
259
+ digitalhub-0.11.0b7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
260
+ digitalhub-0.11.0b7.dist-info/licenses/LICENSE.txt,sha256=qmrTTXPlgU0kSRlRVbjhlyGs1IXs2QPxo_Y-Mn06J0k,11589
261
+ digitalhub-0.11.0b7.dist-info/RECORD,,