digitalhub 0.7.0b2__py3-none-any.whl → 0.8.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 +63 -93
- digitalhub/client/__init__.py +0 -0
- digitalhub/client/_base/__init__.py +0 -0
- digitalhub/client/_base/client.py +56 -0
- digitalhub/client/api.py +63 -0
- digitalhub/client/builder.py +50 -0
- digitalhub/client/dhcore/__init__.py +0 -0
- digitalhub/client/dhcore/client.py +669 -0
- digitalhub/client/dhcore/env.py +21 -0
- digitalhub/client/dhcore/models.py +46 -0
- digitalhub/client/dhcore/utils.py +111 -0
- digitalhub/client/local/__init__.py +0 -0
- digitalhub/client/local/client.py +533 -0
- digitalhub/context/__init__.py +0 -0
- digitalhub/context/api.py +93 -0
- digitalhub/context/builder.py +94 -0
- digitalhub/context/context.py +136 -0
- digitalhub/datastores/__init__.py +0 -0
- digitalhub/datastores/_base/__init__.py +0 -0
- digitalhub/datastores/_base/datastore.py +85 -0
- digitalhub/datastores/api.py +37 -0
- digitalhub/datastores/builder.py +110 -0
- digitalhub/datastores/local/__init__.py +0 -0
- digitalhub/datastores/local/datastore.py +50 -0
- digitalhub/datastores/remote/__init__.py +0 -0
- digitalhub/datastores/remote/datastore.py +31 -0
- digitalhub/datastores/s3/__init__.py +0 -0
- digitalhub/datastores/s3/datastore.py +46 -0
- digitalhub/datastores/sql/__init__.py +0 -0
- digitalhub/datastores/sql/datastore.py +68 -0
- digitalhub/entities/__init__.py +0 -0
- digitalhub/entities/_base/__init__.py +0 -0
- digitalhub/entities/_base/_base/__init__.py +0 -0
- digitalhub/entities/_base/_base/entity.py +82 -0
- digitalhub/entities/_base/api_utils.py +620 -0
- digitalhub/entities/_base/context/__init__.py +0 -0
- digitalhub/entities/_base/context/entity.py +118 -0
- digitalhub/entities/_base/crud.py +468 -0
- digitalhub/entities/_base/entity/__init__.py +0 -0
- digitalhub/entities/_base/entity/_constructors/__init__.py +0 -0
- digitalhub/entities/_base/entity/_constructors/metadata.py +44 -0
- digitalhub/entities/_base/entity/_constructors/name.py +31 -0
- digitalhub/entities/_base/entity/_constructors/spec.py +33 -0
- digitalhub/entities/_base/entity/_constructors/status.py +52 -0
- digitalhub/entities/_base/entity/_constructors/uuid.py +26 -0
- digitalhub/entities/_base/entity/builder.py +175 -0
- digitalhub/entities/_base/entity/entity.py +106 -0
- digitalhub/entities/_base/entity/metadata.py +59 -0
- digitalhub/entities/_base/entity/spec.py +58 -0
- digitalhub/entities/_base/entity/status.py +43 -0
- digitalhub/entities/_base/executable/__init__.py +0 -0
- digitalhub/entities/_base/executable/entity.py +405 -0
- digitalhub/entities/_base/material/__init__.py +0 -0
- digitalhub/entities/_base/material/entity.py +214 -0
- digitalhub/entities/_base/material/spec.py +22 -0
- digitalhub/entities/_base/material/status.py +49 -0
- digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
- digitalhub/entities/_base/runtime_entity/builder.py +106 -0
- digitalhub/entities/_base/unversioned/__init__.py +0 -0
- digitalhub/entities/_base/unversioned/builder.py +66 -0
- digitalhub/entities/_base/unversioned/entity.py +49 -0
- digitalhub/entities/_base/versioned/__init__.py +0 -0
- digitalhub/entities/_base/versioned/builder.py +68 -0
- digitalhub/entities/_base/versioned/entity.py +53 -0
- digitalhub/entities/artifact/__init__.py +0 -0
- digitalhub/entities/artifact/_base/__init__.py +0 -0
- digitalhub/entities/artifact/_base/builder.py +86 -0
- digitalhub/entities/artifact/_base/entity.py +39 -0
- digitalhub/entities/artifact/_base/spec.py +15 -0
- digitalhub/entities/artifact/_base/status.py +9 -0
- digitalhub/entities/artifact/artifact/__init__.py +0 -0
- digitalhub/entities/artifact/artifact/builder.py +18 -0
- digitalhub/entities/artifact/artifact/entity.py +32 -0
- digitalhub/entities/artifact/artifact/spec.py +27 -0
- digitalhub/entities/artifact/artifact/status.py +15 -0
- digitalhub/entities/artifact/crud.py +332 -0
- digitalhub/entities/builders.py +63 -0
- digitalhub/entities/dataitem/__init__.py +0 -0
- digitalhub/entities/dataitem/_base/__init__.py +0 -0
- digitalhub/entities/dataitem/_base/builder.py +86 -0
- digitalhub/entities/dataitem/_base/entity.py +75 -0
- digitalhub/entities/dataitem/_base/spec.py +15 -0
- digitalhub/entities/dataitem/_base/status.py +20 -0
- digitalhub/entities/dataitem/crud.py +372 -0
- digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
- digitalhub/entities/dataitem/dataitem/builder.py +18 -0
- digitalhub/entities/dataitem/dataitem/entity.py +32 -0
- digitalhub/entities/dataitem/dataitem/spec.py +15 -0
- digitalhub/entities/dataitem/dataitem/status.py +9 -0
- digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
- digitalhub/entities/dataitem/iceberg/builder.py +18 -0
- digitalhub/entities/dataitem/iceberg/entity.py +32 -0
- digitalhub/entities/dataitem/iceberg/spec.py +15 -0
- digitalhub/entities/dataitem/iceberg/status.py +9 -0
- digitalhub/entities/dataitem/table/__init__.py +0 -0
- digitalhub/entities/dataitem/table/builder.py +18 -0
- digitalhub/entities/dataitem/table/entity.py +146 -0
- digitalhub/entities/dataitem/table/models.py +62 -0
- digitalhub/entities/dataitem/table/spec.py +25 -0
- digitalhub/entities/dataitem/table/status.py +9 -0
- digitalhub/entities/function/__init__.py +0 -0
- digitalhub/entities/function/_base/__init__.py +0 -0
- digitalhub/entities/function/_base/builder.py +79 -0
- digitalhub/entities/function/_base/entity.py +98 -0
- digitalhub/entities/function/_base/models.py +118 -0
- digitalhub/entities/function/_base/spec.py +15 -0
- digitalhub/entities/function/_base/status.py +9 -0
- digitalhub/entities/function/crud.py +279 -0
- digitalhub/entities/model/__init__.py +0 -0
- digitalhub/entities/model/_base/__init__.py +0 -0
- digitalhub/entities/model/_base/builder.py +86 -0
- digitalhub/entities/model/_base/entity.py +34 -0
- digitalhub/entities/model/_base/spec.py +49 -0
- digitalhub/entities/model/_base/status.py +9 -0
- digitalhub/entities/model/crud.py +331 -0
- digitalhub/entities/model/huggingface/__init__.py +0 -0
- digitalhub/entities/model/huggingface/builder.py +18 -0
- digitalhub/entities/model/huggingface/entity.py +32 -0
- digitalhub/entities/model/huggingface/spec.py +36 -0
- digitalhub/entities/model/huggingface/status.py +9 -0
- digitalhub/entities/model/mlflow/__init__.py +0 -0
- digitalhub/entities/model/mlflow/builder.py +18 -0
- digitalhub/entities/model/mlflow/entity.py +32 -0
- digitalhub/entities/model/mlflow/models.py +26 -0
- digitalhub/entities/model/mlflow/spec.py +44 -0
- digitalhub/entities/model/mlflow/status.py +9 -0
- digitalhub/entities/model/mlflow/utils.py +81 -0
- digitalhub/entities/model/model/__init__.py +0 -0
- digitalhub/entities/model/model/builder.py +18 -0
- digitalhub/entities/model/model/entity.py +32 -0
- digitalhub/entities/model/model/spec.py +15 -0
- digitalhub/entities/model/model/status.py +9 -0
- digitalhub/entities/model/sklearn/__init__.py +0 -0
- digitalhub/entities/model/sklearn/builder.py +18 -0
- digitalhub/entities/model/sklearn/entity.py +32 -0
- digitalhub/entities/model/sklearn/spec.py +15 -0
- digitalhub/entities/model/sklearn/status.py +9 -0
- digitalhub/entities/project/__init__.py +0 -0
- digitalhub/entities/project/_base/__init__.py +0 -0
- digitalhub/entities/project/_base/builder.py +128 -0
- digitalhub/entities/project/_base/entity.py +2078 -0
- digitalhub/entities/project/_base/spec.py +50 -0
- digitalhub/entities/project/_base/status.py +9 -0
- digitalhub/entities/project/crud.py +357 -0
- digitalhub/entities/run/__init__.py +0 -0
- digitalhub/entities/run/_base/__init__.py +0 -0
- digitalhub/entities/run/_base/builder.py +94 -0
- digitalhub/entities/run/_base/entity.py +307 -0
- digitalhub/entities/run/_base/spec.py +50 -0
- digitalhub/entities/run/_base/status.py +9 -0
- digitalhub/entities/run/crud.py +219 -0
- digitalhub/entities/secret/__init__.py +0 -0
- digitalhub/entities/secret/_base/__init__.py +0 -0
- digitalhub/entities/secret/_base/builder.py +81 -0
- digitalhub/entities/secret/_base/entity.py +74 -0
- digitalhub/entities/secret/_base/spec.py +35 -0
- digitalhub/entities/secret/_base/status.py +9 -0
- digitalhub/entities/secret/crud.py +290 -0
- digitalhub/entities/task/__init__.py +0 -0
- digitalhub/entities/task/_base/__init__.py +0 -0
- digitalhub/entities/task/_base/builder.py +91 -0
- digitalhub/entities/task/_base/entity.py +136 -0
- digitalhub/entities/task/_base/models.py +208 -0
- digitalhub/entities/task/_base/spec.py +53 -0
- digitalhub/entities/task/_base/status.py +9 -0
- digitalhub/entities/task/crud.py +228 -0
- digitalhub/entities/utils/__init__.py +0 -0
- digitalhub/entities/utils/api.py +346 -0
- digitalhub/entities/utils/entity_types.py +19 -0
- digitalhub/entities/utils/state.py +31 -0
- digitalhub/entities/utils/utils.py +202 -0
- digitalhub/entities/workflow/__init__.py +0 -0
- digitalhub/entities/workflow/_base/__init__.py +0 -0
- digitalhub/entities/workflow/_base/builder.py +79 -0
- digitalhub/entities/workflow/_base/entity.py +74 -0
- digitalhub/entities/workflow/_base/spec.py +15 -0
- digitalhub/entities/workflow/_base/status.py +9 -0
- digitalhub/entities/workflow/crud.py +278 -0
- digitalhub/factory/__init__.py +0 -0
- digitalhub/factory/api.py +277 -0
- digitalhub/factory/factory.py +268 -0
- digitalhub/factory/utils.py +90 -0
- digitalhub/readers/__init__.py +0 -0
- digitalhub/readers/_base/__init__.py +0 -0
- digitalhub/readers/_base/builder.py +26 -0
- digitalhub/readers/_base/reader.py +70 -0
- digitalhub/readers/api.py +80 -0
- digitalhub/readers/factory.py +133 -0
- digitalhub/readers/pandas/__init__.py +0 -0
- digitalhub/readers/pandas/builder.py +29 -0
- digitalhub/readers/pandas/reader.py +207 -0
- digitalhub/runtimes/__init__.py +0 -0
- digitalhub/runtimes/_base.py +102 -0
- digitalhub/runtimes/builder.py +32 -0
- digitalhub/stores/__init__.py +0 -0
- digitalhub/stores/_base/__init__.py +0 -0
- digitalhub/stores/_base/store.py +189 -0
- digitalhub/stores/api.py +54 -0
- digitalhub/stores/builder.py +211 -0
- digitalhub/stores/local/__init__.py +0 -0
- digitalhub/stores/local/store.py +230 -0
- digitalhub/stores/remote/__init__.py +0 -0
- digitalhub/stores/remote/store.py +143 -0
- digitalhub/stores/s3/__init__.py +0 -0
- digitalhub/stores/s3/store.py +563 -0
- digitalhub/stores/sql/__init__.py +0 -0
- digitalhub/stores/sql/store.py +328 -0
- digitalhub/utils/__init__.py +0 -0
- digitalhub/utils/data_utils.py +127 -0
- digitalhub/utils/exceptions.py +67 -0
- digitalhub/utils/file_utils.py +204 -0
- digitalhub/utils/generic_utils.py +183 -0
- digitalhub/utils/git_utils.py +148 -0
- digitalhub/utils/io_utils.py +116 -0
- digitalhub/utils/logger.py +17 -0
- digitalhub/utils/s3_utils.py +58 -0
- digitalhub/utils/uri_utils.py +56 -0
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/METADATA +30 -13
- digitalhub-0.8.0.dist-info/RECORD +231 -0
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/WHEEL +1 -1
- test/local/CRUD/test_artifacts.py +96 -0
- test/local/CRUD/test_dataitems.py +96 -0
- test/local/CRUD/test_models.py +95 -0
- test/test_crud_functions.py +1 -1
- test/test_crud_runs.py +1 -1
- test/test_crud_tasks.py +1 -1
- digitalhub-0.7.0b2.dist-info/RECORD +0 -14
- test/test_crud_artifacts.py +0 -96
- test/test_crud_dataitems.py +0 -96
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/LICENSE.txt +0 -0
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/top_level.txt +0 -0
- /test/{test_imports.py → local/imports/test_imports.py} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities._base.executable.entity import ExecutableEntity
|
|
6
|
+
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
7
|
+
from digitalhub.factory.api import get_run_kind, get_task_kind_from_action
|
|
8
|
+
from digitalhub.utils.exceptions import BackendError
|
|
9
|
+
|
|
10
|
+
if typing.TYPE_CHECKING:
|
|
11
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
12
|
+
from digitalhub.entities.run._base.entity import Run
|
|
13
|
+
from digitalhub.entities.workflow._base.spec import WorkflowSpec
|
|
14
|
+
from digitalhub.entities.workflow._base.status import WorkflowStatus
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Workflow(ExecutableEntity):
|
|
18
|
+
"""
|
|
19
|
+
A class representing a workflow.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
ENTITY_TYPE = EntityTypes.WORKFLOW.value
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
project: str,
|
|
27
|
+
name: str,
|
|
28
|
+
uuid: str,
|
|
29
|
+
kind: str,
|
|
30
|
+
metadata: Metadata,
|
|
31
|
+
spec: WorkflowSpec,
|
|
32
|
+
status: WorkflowStatus,
|
|
33
|
+
user: str | None = None,
|
|
34
|
+
) -> None:
|
|
35
|
+
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
36
|
+
|
|
37
|
+
self.spec: WorkflowSpec
|
|
38
|
+
self.status: WorkflowStatus
|
|
39
|
+
|
|
40
|
+
##############################
|
|
41
|
+
# Workflow Methods
|
|
42
|
+
##############################
|
|
43
|
+
|
|
44
|
+
def run(self, action: str | None = None, **kwargs) -> Run:
|
|
45
|
+
"""
|
|
46
|
+
Run workflow.
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
action : str
|
|
51
|
+
Action to execute.
|
|
52
|
+
**kwargs : dict
|
|
53
|
+
Keyword arguments passed to Run builder.
|
|
54
|
+
|
|
55
|
+
Returns
|
|
56
|
+
-------
|
|
57
|
+
Run
|
|
58
|
+
Run instance.
|
|
59
|
+
"""
|
|
60
|
+
if action is None:
|
|
61
|
+
action = "pipeline"
|
|
62
|
+
|
|
63
|
+
# Get task and run kind
|
|
64
|
+
task_kind = get_task_kind_from_action(self.kind, action)
|
|
65
|
+
run_kind = get_run_kind(self.kind)
|
|
66
|
+
|
|
67
|
+
# Create or update new task
|
|
68
|
+
task = self._get_or_create_task(task_kind)
|
|
69
|
+
|
|
70
|
+
# Raise error if execution is not done by DHCore backend
|
|
71
|
+
if self._context().local:
|
|
72
|
+
raise BackendError("Cannot run workflow with local backend.")
|
|
73
|
+
|
|
74
|
+
return task.run(run_kind, local_execution=False, **kwargs)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._base.entity.spec import Spec, SpecValidator
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class WorkflowSpec(Spec):
|
|
7
|
+
"""
|
|
8
|
+
WorkflowSpec specifications.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class WorkflowValidator(SpecValidator):
|
|
13
|
+
"""
|
|
14
|
+
WorkflowValidator validator.
|
|
15
|
+
"""
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities._base.crud import (
|
|
6
|
+
delete_entity,
|
|
7
|
+
get_context_entity_versions,
|
|
8
|
+
get_versioned_entity,
|
|
9
|
+
import_executable_entity,
|
|
10
|
+
list_context_entities,
|
|
11
|
+
new_context_entity,
|
|
12
|
+
)
|
|
13
|
+
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
14
|
+
|
|
15
|
+
if typing.TYPE_CHECKING:
|
|
16
|
+
from digitalhub.entities.workflow._base.entity import Workflow
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
ENTITY_TYPE = EntityTypes.WORKFLOW.value
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def new_workflow(
|
|
23
|
+
project: str,
|
|
24
|
+
name: str,
|
|
25
|
+
kind: str,
|
|
26
|
+
uuid: str | None = None,
|
|
27
|
+
description: str | None = None,
|
|
28
|
+
labels: list[str] | None = None,
|
|
29
|
+
embedded: bool = False,
|
|
30
|
+
**kwargs,
|
|
31
|
+
) -> Workflow:
|
|
32
|
+
"""
|
|
33
|
+
Create a new object.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
project : str
|
|
38
|
+
Project name.
|
|
39
|
+
name : str
|
|
40
|
+
Object name.
|
|
41
|
+
uuid : str
|
|
42
|
+
ID of the object.
|
|
43
|
+
description : str
|
|
44
|
+
Description of the object (human readable).
|
|
45
|
+
labels : list[str]
|
|
46
|
+
List of labels.
|
|
47
|
+
embedded : bool
|
|
48
|
+
Flag to determine if object spec must be embedded in project spec.
|
|
49
|
+
**kwargs : dict
|
|
50
|
+
Spec keyword arguments.
|
|
51
|
+
|
|
52
|
+
Returns
|
|
53
|
+
-------
|
|
54
|
+
Workflow
|
|
55
|
+
Object instance.
|
|
56
|
+
|
|
57
|
+
Examples
|
|
58
|
+
--------
|
|
59
|
+
>>> obj = new_function(project="my-project",
|
|
60
|
+
>>> name="my-workflow",
|
|
61
|
+
>>> kind="kfp",
|
|
62
|
+
>>> code_src="pipeline.py",
|
|
63
|
+
>>> handler="pipeline-handler")
|
|
64
|
+
"""
|
|
65
|
+
return new_context_entity(
|
|
66
|
+
project=project,
|
|
67
|
+
name=name,
|
|
68
|
+
kind=kind,
|
|
69
|
+
uuid=uuid,
|
|
70
|
+
description=description,
|
|
71
|
+
labels=labels,
|
|
72
|
+
embedded=embedded,
|
|
73
|
+
**kwargs,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def get_workflow(
|
|
78
|
+
identifier: str,
|
|
79
|
+
project: str | None = None,
|
|
80
|
+
entity_id: str | None = None,
|
|
81
|
+
**kwargs,
|
|
82
|
+
) -> Workflow:
|
|
83
|
+
"""
|
|
84
|
+
Get object from backend.
|
|
85
|
+
|
|
86
|
+
Parameters
|
|
87
|
+
----------
|
|
88
|
+
identifier : str
|
|
89
|
+
Entity key (store://...) or entity name.
|
|
90
|
+
project : str
|
|
91
|
+
Project name.
|
|
92
|
+
entity_id : str
|
|
93
|
+
Entity ID.
|
|
94
|
+
**kwargs : dict
|
|
95
|
+
Parameters to pass to the API call.
|
|
96
|
+
|
|
97
|
+
Returns
|
|
98
|
+
-------
|
|
99
|
+
Workflow
|
|
100
|
+
Object instance.
|
|
101
|
+
|
|
102
|
+
Examples
|
|
103
|
+
--------
|
|
104
|
+
Using entity key:
|
|
105
|
+
>>> obj = get_workflow("store://my-workflow-key")
|
|
106
|
+
|
|
107
|
+
Using entity name:
|
|
108
|
+
>>> obj = get_workflow("my-workflow-name"
|
|
109
|
+
>>> project="my-project",
|
|
110
|
+
>>> entity_id="my-workflow-id")
|
|
111
|
+
"""
|
|
112
|
+
return get_versioned_entity(
|
|
113
|
+
identifier,
|
|
114
|
+
entity_type=ENTITY_TYPE,
|
|
115
|
+
project=project,
|
|
116
|
+
entity_id=entity_id,
|
|
117
|
+
**kwargs,
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def get_workflow_versions(
|
|
122
|
+
identifier: str,
|
|
123
|
+
project: str | None = None,
|
|
124
|
+
**kwargs,
|
|
125
|
+
) -> list[Workflow]:
|
|
126
|
+
"""
|
|
127
|
+
Get object versions from backend.
|
|
128
|
+
|
|
129
|
+
Parameters
|
|
130
|
+
----------
|
|
131
|
+
identifier : str
|
|
132
|
+
Entity key (store://...) or entity name.
|
|
133
|
+
project : str
|
|
134
|
+
Project name.
|
|
135
|
+
**kwargs : dict
|
|
136
|
+
Parameters to pass to the API call.
|
|
137
|
+
|
|
138
|
+
Returns
|
|
139
|
+
-------
|
|
140
|
+
list[Workflow]
|
|
141
|
+
List of object instances.
|
|
142
|
+
|
|
143
|
+
Examples
|
|
144
|
+
--------
|
|
145
|
+
Using entity key:
|
|
146
|
+
>>> obj = get_workflow_versions("store://my-workflow-key")
|
|
147
|
+
|
|
148
|
+
Using entity name:
|
|
149
|
+
>>> obj = get_workflow_versions("my-workflow-name"
|
|
150
|
+
>>> project="my-project")
|
|
151
|
+
"""
|
|
152
|
+
return get_context_entity_versions(
|
|
153
|
+
identifier,
|
|
154
|
+
entity_type=ENTITY_TYPE,
|
|
155
|
+
project=project,
|
|
156
|
+
**kwargs,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def list_workflows(project: str, **kwargs) -> list[Workflow]:
|
|
161
|
+
"""
|
|
162
|
+
List all latest version objects from backend.
|
|
163
|
+
|
|
164
|
+
Parameters
|
|
165
|
+
----------
|
|
166
|
+
project : str
|
|
167
|
+
Project name.
|
|
168
|
+
**kwargs : dict
|
|
169
|
+
Parameters to pass to the API call.
|
|
170
|
+
|
|
171
|
+
Returns
|
|
172
|
+
-------
|
|
173
|
+
list[Workflow]
|
|
174
|
+
List of object instances.
|
|
175
|
+
|
|
176
|
+
Examples
|
|
177
|
+
--------
|
|
178
|
+
>>> objs = list_workflows(project="my-project")
|
|
179
|
+
"""
|
|
180
|
+
return list_context_entities(
|
|
181
|
+
project=project,
|
|
182
|
+
entity_type=ENTITY_TYPE,
|
|
183
|
+
**kwargs,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def import_workflow(file: str) -> Workflow:
|
|
188
|
+
"""
|
|
189
|
+
Import object from a YAML file.
|
|
190
|
+
|
|
191
|
+
Parameters
|
|
192
|
+
----------
|
|
193
|
+
file : str
|
|
194
|
+
Path to YAML file.
|
|
195
|
+
|
|
196
|
+
Returns
|
|
197
|
+
-------
|
|
198
|
+
Workflow
|
|
199
|
+
Object instance.
|
|
200
|
+
|
|
201
|
+
Examples
|
|
202
|
+
--------
|
|
203
|
+
>>> obj = import_workflow("my-workflow.yaml")
|
|
204
|
+
"""
|
|
205
|
+
return import_executable_entity(file)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def update_workflow(entity: Workflow) -> Workflow:
|
|
209
|
+
"""
|
|
210
|
+
Update object. Note that object spec are immutable.
|
|
211
|
+
|
|
212
|
+
Parameters
|
|
213
|
+
----------
|
|
214
|
+
entity : Workflow
|
|
215
|
+
Object to update.
|
|
216
|
+
|
|
217
|
+
Returns
|
|
218
|
+
-------
|
|
219
|
+
Workflow
|
|
220
|
+
Entity updated.
|
|
221
|
+
|
|
222
|
+
Examples
|
|
223
|
+
--------
|
|
224
|
+
>>> obj = update_workflow(obj)
|
|
225
|
+
"""
|
|
226
|
+
return entity.save(update=True)
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def delete_workflow(
|
|
230
|
+
identifier: str,
|
|
231
|
+
project: str | None = None,
|
|
232
|
+
entity_id: str | None = None,
|
|
233
|
+
delete_all_versions: bool = False,
|
|
234
|
+
cascade: bool = True,
|
|
235
|
+
**kwargs,
|
|
236
|
+
) -> dict:
|
|
237
|
+
"""
|
|
238
|
+
Delete object from backend.
|
|
239
|
+
|
|
240
|
+
Parameters
|
|
241
|
+
----------
|
|
242
|
+
identifier : str
|
|
243
|
+
Entity key (store://...) or entity name.
|
|
244
|
+
project : str
|
|
245
|
+
Project name.
|
|
246
|
+
entity_id : str
|
|
247
|
+
Entity ID.
|
|
248
|
+
delete_all_versions : bool
|
|
249
|
+
Delete all versions of the named entity. If True, use entity name instead of entity key as identifier.
|
|
250
|
+
cascade : bool
|
|
251
|
+
Cascade delete.
|
|
252
|
+
**kwargs : dict
|
|
253
|
+
Parameters to pass to the API call.
|
|
254
|
+
|
|
255
|
+
Returns
|
|
256
|
+
-------
|
|
257
|
+
dict
|
|
258
|
+
Response from backend.
|
|
259
|
+
|
|
260
|
+
Examples
|
|
261
|
+
--------
|
|
262
|
+
If delete_all_versions is False:
|
|
263
|
+
>>> obj = delete_workflow("store://my-workflow-key")
|
|
264
|
+
|
|
265
|
+
Otherwise:
|
|
266
|
+
>>> obj = delete_workflow("workflow-name",
|
|
267
|
+
>>> project="my-project",
|
|
268
|
+
>>> delete_all_versions=True)
|
|
269
|
+
"""
|
|
270
|
+
return delete_entity(
|
|
271
|
+
identifier=identifier,
|
|
272
|
+
entity_type=ENTITY_TYPE,
|
|
273
|
+
project=project,
|
|
274
|
+
entity_id=entity_id,
|
|
275
|
+
delete_all_versions=delete_all_versions,
|
|
276
|
+
cascade=cascade,
|
|
277
|
+
**kwargs,
|
|
278
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.factory.factory import factory
|
|
6
|
+
from digitalhub.utils.exceptions import BuilderError
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from digitalhub.entities._base.entity.entity import Entity
|
|
10
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
11
|
+
from digitalhub.entities._base.entity.spec import Spec
|
|
12
|
+
from digitalhub.entities._base.entity.status import Status
|
|
13
|
+
from digitalhub.runtimes._base import Runtime
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def build_entity_from_params(**kwargs) -> Entity:
|
|
17
|
+
"""
|
|
18
|
+
Build an entity.
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
**kwargs
|
|
23
|
+
Entity parameters.
|
|
24
|
+
|
|
25
|
+
Returns
|
|
26
|
+
-------
|
|
27
|
+
Entity
|
|
28
|
+
Entity object.
|
|
29
|
+
"""
|
|
30
|
+
try:
|
|
31
|
+
kind = kwargs["kind"]
|
|
32
|
+
except KeyError:
|
|
33
|
+
raise BuilderError("Missing 'kind' parameter.")
|
|
34
|
+
_raise_if_entity_builder_not_found(kind)
|
|
35
|
+
return factory.build_entity_from_params(kind, **kwargs)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def build_entity_from_dict(obj: dict) -> Entity:
|
|
39
|
+
"""
|
|
40
|
+
Build an entity from a dictionary.
|
|
41
|
+
|
|
42
|
+
Parameters
|
|
43
|
+
----------
|
|
44
|
+
obj : dict
|
|
45
|
+
Dictionary with entity data.
|
|
46
|
+
|
|
47
|
+
Returns
|
|
48
|
+
-------
|
|
49
|
+
Entity
|
|
50
|
+
Entity object.
|
|
51
|
+
"""
|
|
52
|
+
try:
|
|
53
|
+
kind = obj["kind"]
|
|
54
|
+
except KeyError:
|
|
55
|
+
raise BuilderError("Missing 'kind' parameter.")
|
|
56
|
+
_raise_if_entity_builder_not_found(kind)
|
|
57
|
+
return factory.build_entity_from_dict(kind, obj)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def build_spec(kind_to_build_from: str, **kwargs) -> Spec:
|
|
61
|
+
"""
|
|
62
|
+
Build an entity spec.
|
|
63
|
+
|
|
64
|
+
Parameters
|
|
65
|
+
----------
|
|
66
|
+
kind_to_build_from : str
|
|
67
|
+
Entity type.
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
Spec
|
|
72
|
+
Spec object.
|
|
73
|
+
"""
|
|
74
|
+
_raise_if_entity_builder_not_found(kind_to_build_from)
|
|
75
|
+
return factory.build_spec(kind_to_build_from, **kwargs)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def build_metadata(kind_to_build_from: str, **kwargs) -> Metadata:
|
|
79
|
+
"""
|
|
80
|
+
Build an entity metadata.
|
|
81
|
+
|
|
82
|
+
Parameters
|
|
83
|
+
----------
|
|
84
|
+
kind_to_build_from : str
|
|
85
|
+
Entity type.
|
|
86
|
+
|
|
87
|
+
Returns
|
|
88
|
+
-------
|
|
89
|
+
Metadata
|
|
90
|
+
Metadata object.
|
|
91
|
+
"""
|
|
92
|
+
_raise_if_entity_builder_not_found(kind_to_build_from)
|
|
93
|
+
return factory.build_metadata(kind_to_build_from, **kwargs)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def build_status(kind_to_build_from: str, **kwargs) -> Status:
|
|
97
|
+
"""
|
|
98
|
+
Build an entity status.
|
|
99
|
+
|
|
100
|
+
Parameters
|
|
101
|
+
----------
|
|
102
|
+
kind_to_build_from : str
|
|
103
|
+
Entity type.
|
|
104
|
+
|
|
105
|
+
Returns
|
|
106
|
+
-------
|
|
107
|
+
Status
|
|
108
|
+
Status object.
|
|
109
|
+
"""
|
|
110
|
+
_raise_if_entity_builder_not_found(kind_to_build_from)
|
|
111
|
+
return factory.build_status(kind_to_build_from, **kwargs)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def build_runtime(kind_to_build_from: str, project: str) -> Runtime:
|
|
115
|
+
"""
|
|
116
|
+
Build a runtime.
|
|
117
|
+
|
|
118
|
+
Parameters
|
|
119
|
+
----------
|
|
120
|
+
kind_to_build_from : str
|
|
121
|
+
Runtime type.
|
|
122
|
+
project : str
|
|
123
|
+
Project name.
|
|
124
|
+
|
|
125
|
+
Returns
|
|
126
|
+
-------
|
|
127
|
+
Runtime
|
|
128
|
+
Runtime object.
|
|
129
|
+
"""
|
|
130
|
+
_raise_if_runtime_builder_not_found(kind_to_build_from)
|
|
131
|
+
return factory.build_runtime(kind_to_build_from, project)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def get_entity_type_from_kind(kind: str) -> str:
|
|
135
|
+
"""
|
|
136
|
+
Get entity type from builder.
|
|
137
|
+
|
|
138
|
+
Parameters
|
|
139
|
+
----------
|
|
140
|
+
kind : str
|
|
141
|
+
Entity type.
|
|
142
|
+
|
|
143
|
+
Returns
|
|
144
|
+
-------
|
|
145
|
+
str
|
|
146
|
+
Entity type.
|
|
147
|
+
"""
|
|
148
|
+
_raise_if_entity_builder_not_found(kind)
|
|
149
|
+
return factory.get_entity_type_from_kind(kind)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def get_all_kinds(kind: str) -> list[str]:
|
|
153
|
+
"""
|
|
154
|
+
Get all kinds.
|
|
155
|
+
|
|
156
|
+
Parameters
|
|
157
|
+
----------
|
|
158
|
+
kind : str
|
|
159
|
+
Kind.
|
|
160
|
+
|
|
161
|
+
Returns
|
|
162
|
+
-------
|
|
163
|
+
list[str]
|
|
164
|
+
All entities runtime kinds.
|
|
165
|
+
"""
|
|
166
|
+
_raise_if_entity_builder_not_found(kind)
|
|
167
|
+
return factory.get_all_kinds(kind)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def get_executable_kind(kind: str) -> str:
|
|
171
|
+
"""
|
|
172
|
+
Get executable kind.
|
|
173
|
+
|
|
174
|
+
Parameters
|
|
175
|
+
----------
|
|
176
|
+
kind : str
|
|
177
|
+
Kind.
|
|
178
|
+
|
|
179
|
+
Returns
|
|
180
|
+
-------
|
|
181
|
+
str
|
|
182
|
+
Executable kind.
|
|
183
|
+
"""
|
|
184
|
+
_raise_if_entity_builder_not_found(kind)
|
|
185
|
+
return factory.get_executable_kind(kind)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def get_task_kind_from_action(kind: str, action: str) -> str:
|
|
189
|
+
"""
|
|
190
|
+
Get task kinds from action.
|
|
191
|
+
|
|
192
|
+
Parameters
|
|
193
|
+
----------
|
|
194
|
+
kind : str
|
|
195
|
+
Kind.
|
|
196
|
+
action : str
|
|
197
|
+
Action.
|
|
198
|
+
|
|
199
|
+
Returns
|
|
200
|
+
-------
|
|
201
|
+
str
|
|
202
|
+
Task kind.
|
|
203
|
+
"""
|
|
204
|
+
_raise_if_entity_builder_not_found(kind)
|
|
205
|
+
return factory.get_task_kind_from_action(kind, action)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def get_action_from_task_kind(kind: str, task_kind: str) -> str:
|
|
209
|
+
"""
|
|
210
|
+
Get action from task.
|
|
211
|
+
|
|
212
|
+
Parameters
|
|
213
|
+
----------
|
|
214
|
+
kind : str
|
|
215
|
+
Kind.
|
|
216
|
+
task_kind : str
|
|
217
|
+
Task kind.
|
|
218
|
+
|
|
219
|
+
Returns
|
|
220
|
+
-------
|
|
221
|
+
str
|
|
222
|
+
Action.
|
|
223
|
+
"""
|
|
224
|
+
_raise_if_entity_builder_not_found(kind)
|
|
225
|
+
return factory.get_action_from_task_kind(kind, task_kind)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def get_run_kind(kind: str) -> str:
|
|
229
|
+
"""
|
|
230
|
+
Get run kind.
|
|
231
|
+
|
|
232
|
+
Parameters
|
|
233
|
+
----------
|
|
234
|
+
kind : str
|
|
235
|
+
Kind.
|
|
236
|
+
|
|
237
|
+
Returns
|
|
238
|
+
-------
|
|
239
|
+
str
|
|
240
|
+
Run kind.
|
|
241
|
+
"""
|
|
242
|
+
_raise_if_entity_builder_not_found(kind)
|
|
243
|
+
return factory.get_run_kind(kind)
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def _raise_if_entity_builder_not_found(kind: str) -> None:
|
|
247
|
+
"""
|
|
248
|
+
Raise error if entity builder not found.
|
|
249
|
+
|
|
250
|
+
Parameters
|
|
251
|
+
----------
|
|
252
|
+
kind : str
|
|
253
|
+
Entity type.
|
|
254
|
+
|
|
255
|
+
Returns
|
|
256
|
+
-------
|
|
257
|
+
None
|
|
258
|
+
"""
|
|
259
|
+
if kind not in factory._entity_builders:
|
|
260
|
+
raise BuilderError(f"Builder for kind '{kind}' not found.")
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
def _raise_if_runtime_builder_not_found(kind: str) -> None:
|
|
264
|
+
"""
|
|
265
|
+
Raise error if runtime builder not found.
|
|
266
|
+
|
|
267
|
+
Parameters
|
|
268
|
+
----------
|
|
269
|
+
kind : str
|
|
270
|
+
Runtime type.
|
|
271
|
+
|
|
272
|
+
Returns
|
|
273
|
+
-------
|
|
274
|
+
None
|
|
275
|
+
"""
|
|
276
|
+
if kind not in factory._runtime_builders:
|
|
277
|
+
raise BuilderError(f"Builder for kind '{kind}' not found.")
|