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.

Files changed (232) hide show
  1. digitalhub/__init__.py +63 -93
  2. digitalhub/client/__init__.py +0 -0
  3. digitalhub/client/_base/__init__.py +0 -0
  4. digitalhub/client/_base/client.py +56 -0
  5. digitalhub/client/api.py +63 -0
  6. digitalhub/client/builder.py +50 -0
  7. digitalhub/client/dhcore/__init__.py +0 -0
  8. digitalhub/client/dhcore/client.py +669 -0
  9. digitalhub/client/dhcore/env.py +21 -0
  10. digitalhub/client/dhcore/models.py +46 -0
  11. digitalhub/client/dhcore/utils.py +111 -0
  12. digitalhub/client/local/__init__.py +0 -0
  13. digitalhub/client/local/client.py +533 -0
  14. digitalhub/context/__init__.py +0 -0
  15. digitalhub/context/api.py +93 -0
  16. digitalhub/context/builder.py +94 -0
  17. digitalhub/context/context.py +136 -0
  18. digitalhub/datastores/__init__.py +0 -0
  19. digitalhub/datastores/_base/__init__.py +0 -0
  20. digitalhub/datastores/_base/datastore.py +85 -0
  21. digitalhub/datastores/api.py +37 -0
  22. digitalhub/datastores/builder.py +110 -0
  23. digitalhub/datastores/local/__init__.py +0 -0
  24. digitalhub/datastores/local/datastore.py +50 -0
  25. digitalhub/datastores/remote/__init__.py +0 -0
  26. digitalhub/datastores/remote/datastore.py +31 -0
  27. digitalhub/datastores/s3/__init__.py +0 -0
  28. digitalhub/datastores/s3/datastore.py +46 -0
  29. digitalhub/datastores/sql/__init__.py +0 -0
  30. digitalhub/datastores/sql/datastore.py +68 -0
  31. digitalhub/entities/__init__.py +0 -0
  32. digitalhub/entities/_base/__init__.py +0 -0
  33. digitalhub/entities/_base/_base/__init__.py +0 -0
  34. digitalhub/entities/_base/_base/entity.py +82 -0
  35. digitalhub/entities/_base/api_utils.py +620 -0
  36. digitalhub/entities/_base/context/__init__.py +0 -0
  37. digitalhub/entities/_base/context/entity.py +118 -0
  38. digitalhub/entities/_base/crud.py +468 -0
  39. digitalhub/entities/_base/entity/__init__.py +0 -0
  40. digitalhub/entities/_base/entity/_constructors/__init__.py +0 -0
  41. digitalhub/entities/_base/entity/_constructors/metadata.py +44 -0
  42. digitalhub/entities/_base/entity/_constructors/name.py +31 -0
  43. digitalhub/entities/_base/entity/_constructors/spec.py +33 -0
  44. digitalhub/entities/_base/entity/_constructors/status.py +52 -0
  45. digitalhub/entities/_base/entity/_constructors/uuid.py +26 -0
  46. digitalhub/entities/_base/entity/builder.py +175 -0
  47. digitalhub/entities/_base/entity/entity.py +106 -0
  48. digitalhub/entities/_base/entity/metadata.py +59 -0
  49. digitalhub/entities/_base/entity/spec.py +58 -0
  50. digitalhub/entities/_base/entity/status.py +43 -0
  51. digitalhub/entities/_base/executable/__init__.py +0 -0
  52. digitalhub/entities/_base/executable/entity.py +405 -0
  53. digitalhub/entities/_base/material/__init__.py +0 -0
  54. digitalhub/entities/_base/material/entity.py +214 -0
  55. digitalhub/entities/_base/material/spec.py +22 -0
  56. digitalhub/entities/_base/material/status.py +49 -0
  57. digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
  58. digitalhub/entities/_base/runtime_entity/builder.py +106 -0
  59. digitalhub/entities/_base/unversioned/__init__.py +0 -0
  60. digitalhub/entities/_base/unversioned/builder.py +66 -0
  61. digitalhub/entities/_base/unversioned/entity.py +49 -0
  62. digitalhub/entities/_base/versioned/__init__.py +0 -0
  63. digitalhub/entities/_base/versioned/builder.py +68 -0
  64. digitalhub/entities/_base/versioned/entity.py +53 -0
  65. digitalhub/entities/artifact/__init__.py +0 -0
  66. digitalhub/entities/artifact/_base/__init__.py +0 -0
  67. digitalhub/entities/artifact/_base/builder.py +86 -0
  68. digitalhub/entities/artifact/_base/entity.py +39 -0
  69. digitalhub/entities/artifact/_base/spec.py +15 -0
  70. digitalhub/entities/artifact/_base/status.py +9 -0
  71. digitalhub/entities/artifact/artifact/__init__.py +0 -0
  72. digitalhub/entities/artifact/artifact/builder.py +18 -0
  73. digitalhub/entities/artifact/artifact/entity.py +32 -0
  74. digitalhub/entities/artifact/artifact/spec.py +27 -0
  75. digitalhub/entities/artifact/artifact/status.py +15 -0
  76. digitalhub/entities/artifact/crud.py +332 -0
  77. digitalhub/entities/builders.py +63 -0
  78. digitalhub/entities/dataitem/__init__.py +0 -0
  79. digitalhub/entities/dataitem/_base/__init__.py +0 -0
  80. digitalhub/entities/dataitem/_base/builder.py +86 -0
  81. digitalhub/entities/dataitem/_base/entity.py +75 -0
  82. digitalhub/entities/dataitem/_base/spec.py +15 -0
  83. digitalhub/entities/dataitem/_base/status.py +20 -0
  84. digitalhub/entities/dataitem/crud.py +372 -0
  85. digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  86. digitalhub/entities/dataitem/dataitem/builder.py +18 -0
  87. digitalhub/entities/dataitem/dataitem/entity.py +32 -0
  88. digitalhub/entities/dataitem/dataitem/spec.py +15 -0
  89. digitalhub/entities/dataitem/dataitem/status.py +9 -0
  90. digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  91. digitalhub/entities/dataitem/iceberg/builder.py +18 -0
  92. digitalhub/entities/dataitem/iceberg/entity.py +32 -0
  93. digitalhub/entities/dataitem/iceberg/spec.py +15 -0
  94. digitalhub/entities/dataitem/iceberg/status.py +9 -0
  95. digitalhub/entities/dataitem/table/__init__.py +0 -0
  96. digitalhub/entities/dataitem/table/builder.py +18 -0
  97. digitalhub/entities/dataitem/table/entity.py +146 -0
  98. digitalhub/entities/dataitem/table/models.py +62 -0
  99. digitalhub/entities/dataitem/table/spec.py +25 -0
  100. digitalhub/entities/dataitem/table/status.py +9 -0
  101. digitalhub/entities/function/__init__.py +0 -0
  102. digitalhub/entities/function/_base/__init__.py +0 -0
  103. digitalhub/entities/function/_base/builder.py +79 -0
  104. digitalhub/entities/function/_base/entity.py +98 -0
  105. digitalhub/entities/function/_base/models.py +118 -0
  106. digitalhub/entities/function/_base/spec.py +15 -0
  107. digitalhub/entities/function/_base/status.py +9 -0
  108. digitalhub/entities/function/crud.py +279 -0
  109. digitalhub/entities/model/__init__.py +0 -0
  110. digitalhub/entities/model/_base/__init__.py +0 -0
  111. digitalhub/entities/model/_base/builder.py +86 -0
  112. digitalhub/entities/model/_base/entity.py +34 -0
  113. digitalhub/entities/model/_base/spec.py +49 -0
  114. digitalhub/entities/model/_base/status.py +9 -0
  115. digitalhub/entities/model/crud.py +331 -0
  116. digitalhub/entities/model/huggingface/__init__.py +0 -0
  117. digitalhub/entities/model/huggingface/builder.py +18 -0
  118. digitalhub/entities/model/huggingface/entity.py +32 -0
  119. digitalhub/entities/model/huggingface/spec.py +36 -0
  120. digitalhub/entities/model/huggingface/status.py +9 -0
  121. digitalhub/entities/model/mlflow/__init__.py +0 -0
  122. digitalhub/entities/model/mlflow/builder.py +18 -0
  123. digitalhub/entities/model/mlflow/entity.py +32 -0
  124. digitalhub/entities/model/mlflow/models.py +26 -0
  125. digitalhub/entities/model/mlflow/spec.py +44 -0
  126. digitalhub/entities/model/mlflow/status.py +9 -0
  127. digitalhub/entities/model/mlflow/utils.py +81 -0
  128. digitalhub/entities/model/model/__init__.py +0 -0
  129. digitalhub/entities/model/model/builder.py +18 -0
  130. digitalhub/entities/model/model/entity.py +32 -0
  131. digitalhub/entities/model/model/spec.py +15 -0
  132. digitalhub/entities/model/model/status.py +9 -0
  133. digitalhub/entities/model/sklearn/__init__.py +0 -0
  134. digitalhub/entities/model/sklearn/builder.py +18 -0
  135. digitalhub/entities/model/sklearn/entity.py +32 -0
  136. digitalhub/entities/model/sklearn/spec.py +15 -0
  137. digitalhub/entities/model/sklearn/status.py +9 -0
  138. digitalhub/entities/project/__init__.py +0 -0
  139. digitalhub/entities/project/_base/__init__.py +0 -0
  140. digitalhub/entities/project/_base/builder.py +128 -0
  141. digitalhub/entities/project/_base/entity.py +2078 -0
  142. digitalhub/entities/project/_base/spec.py +50 -0
  143. digitalhub/entities/project/_base/status.py +9 -0
  144. digitalhub/entities/project/crud.py +357 -0
  145. digitalhub/entities/run/__init__.py +0 -0
  146. digitalhub/entities/run/_base/__init__.py +0 -0
  147. digitalhub/entities/run/_base/builder.py +94 -0
  148. digitalhub/entities/run/_base/entity.py +307 -0
  149. digitalhub/entities/run/_base/spec.py +50 -0
  150. digitalhub/entities/run/_base/status.py +9 -0
  151. digitalhub/entities/run/crud.py +219 -0
  152. digitalhub/entities/secret/__init__.py +0 -0
  153. digitalhub/entities/secret/_base/__init__.py +0 -0
  154. digitalhub/entities/secret/_base/builder.py +81 -0
  155. digitalhub/entities/secret/_base/entity.py +74 -0
  156. digitalhub/entities/secret/_base/spec.py +35 -0
  157. digitalhub/entities/secret/_base/status.py +9 -0
  158. digitalhub/entities/secret/crud.py +290 -0
  159. digitalhub/entities/task/__init__.py +0 -0
  160. digitalhub/entities/task/_base/__init__.py +0 -0
  161. digitalhub/entities/task/_base/builder.py +91 -0
  162. digitalhub/entities/task/_base/entity.py +136 -0
  163. digitalhub/entities/task/_base/models.py +208 -0
  164. digitalhub/entities/task/_base/spec.py +53 -0
  165. digitalhub/entities/task/_base/status.py +9 -0
  166. digitalhub/entities/task/crud.py +228 -0
  167. digitalhub/entities/utils/__init__.py +0 -0
  168. digitalhub/entities/utils/api.py +346 -0
  169. digitalhub/entities/utils/entity_types.py +19 -0
  170. digitalhub/entities/utils/state.py +31 -0
  171. digitalhub/entities/utils/utils.py +202 -0
  172. digitalhub/entities/workflow/__init__.py +0 -0
  173. digitalhub/entities/workflow/_base/__init__.py +0 -0
  174. digitalhub/entities/workflow/_base/builder.py +79 -0
  175. digitalhub/entities/workflow/_base/entity.py +74 -0
  176. digitalhub/entities/workflow/_base/spec.py +15 -0
  177. digitalhub/entities/workflow/_base/status.py +9 -0
  178. digitalhub/entities/workflow/crud.py +278 -0
  179. digitalhub/factory/__init__.py +0 -0
  180. digitalhub/factory/api.py +277 -0
  181. digitalhub/factory/factory.py +268 -0
  182. digitalhub/factory/utils.py +90 -0
  183. digitalhub/readers/__init__.py +0 -0
  184. digitalhub/readers/_base/__init__.py +0 -0
  185. digitalhub/readers/_base/builder.py +26 -0
  186. digitalhub/readers/_base/reader.py +70 -0
  187. digitalhub/readers/api.py +80 -0
  188. digitalhub/readers/factory.py +133 -0
  189. digitalhub/readers/pandas/__init__.py +0 -0
  190. digitalhub/readers/pandas/builder.py +29 -0
  191. digitalhub/readers/pandas/reader.py +207 -0
  192. digitalhub/runtimes/__init__.py +0 -0
  193. digitalhub/runtimes/_base.py +102 -0
  194. digitalhub/runtimes/builder.py +32 -0
  195. digitalhub/stores/__init__.py +0 -0
  196. digitalhub/stores/_base/__init__.py +0 -0
  197. digitalhub/stores/_base/store.py +189 -0
  198. digitalhub/stores/api.py +54 -0
  199. digitalhub/stores/builder.py +211 -0
  200. digitalhub/stores/local/__init__.py +0 -0
  201. digitalhub/stores/local/store.py +230 -0
  202. digitalhub/stores/remote/__init__.py +0 -0
  203. digitalhub/stores/remote/store.py +143 -0
  204. digitalhub/stores/s3/__init__.py +0 -0
  205. digitalhub/stores/s3/store.py +563 -0
  206. digitalhub/stores/sql/__init__.py +0 -0
  207. digitalhub/stores/sql/store.py +328 -0
  208. digitalhub/utils/__init__.py +0 -0
  209. digitalhub/utils/data_utils.py +127 -0
  210. digitalhub/utils/exceptions.py +67 -0
  211. digitalhub/utils/file_utils.py +204 -0
  212. digitalhub/utils/generic_utils.py +183 -0
  213. digitalhub/utils/git_utils.py +148 -0
  214. digitalhub/utils/io_utils.py +116 -0
  215. digitalhub/utils/logger.py +17 -0
  216. digitalhub/utils/s3_utils.py +58 -0
  217. digitalhub/utils/uri_utils.py +56 -0
  218. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/METADATA +30 -13
  219. digitalhub-0.8.0.dist-info/RECORD +231 -0
  220. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/WHEEL +1 -1
  221. test/local/CRUD/test_artifacts.py +96 -0
  222. test/local/CRUD/test_dataitems.py +96 -0
  223. test/local/CRUD/test_models.py +95 -0
  224. test/test_crud_functions.py +1 -1
  225. test/test_crud_runs.py +1 -1
  226. test/test_crud_tasks.py +1 -1
  227. digitalhub-0.7.0b2.dist-info/RECORD +0 -14
  228. test/test_crud_artifacts.py +0 -96
  229. test/test_crud_dataitems.py +0 -96
  230. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/LICENSE.txt +0 -0
  231. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/top_level.txt +0 -0
  232. /test/{test_imports.py → local/imports/test_imports.py} +0 -0
@@ -0,0 +1,208 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel, Field
4
+ from typing_extensions import Literal
5
+
6
+
7
+ class Volume(BaseModel):
8
+ """
9
+ Volume model.
10
+ """
11
+
12
+ volume_type: Literal["persistent_volume_claim", "empty_dir"]
13
+ """Volume type."""
14
+
15
+ name: str
16
+ """Volume name."""
17
+
18
+ mount_path: str
19
+ """Volume mount path inside the container."""
20
+
21
+ spec: dict[str, str]
22
+ """Volume spec."""
23
+
24
+
25
+ class NodeSelector(BaseModel):
26
+ """
27
+ NodeSelector model.
28
+ """
29
+
30
+ key: str
31
+ """Node selector key."""
32
+
33
+ value: str
34
+ """Node selector value."""
35
+
36
+
37
+ class ResourceItem(BaseModel):
38
+ """
39
+ Resource item model.
40
+ """
41
+
42
+ requests: str = Field(default=None, regex=r"[\d]+|^([0-9])+([a-zA-Z])+$")
43
+ """Resource requests."""
44
+
45
+ limits: str = Field(default=None, regex=r"[\d]+|^([0-9])+([a-zA-Z])+$")
46
+ """Resource limits."""
47
+
48
+
49
+ class Resource(BaseModel):
50
+ """
51
+ Resource model.
52
+ """
53
+
54
+ cpu: ResourceItem = None
55
+ """CPU resource model."""
56
+
57
+ mem: ResourceItem = None
58
+ """Memory resource model."""
59
+
60
+ gpu: ResourceItem = None
61
+ """GPU resource model."""
62
+
63
+
64
+ class Env(BaseModel):
65
+ """
66
+ Env variable model.
67
+ """
68
+
69
+ name: str
70
+ """Env variable name."""
71
+
72
+ value: str
73
+ """Env variable value."""
74
+
75
+
76
+ class Toleration(BaseModel):
77
+ """
78
+ Toleration model.
79
+ """
80
+
81
+ key: str = None
82
+ """Toleration key."""
83
+
84
+ operator: str = None
85
+ """Toleration operator."""
86
+
87
+ value: str = None
88
+ """Toleration value."""
89
+
90
+ effect: str = None
91
+ """Toleration effect."""
92
+
93
+ toleration_seconds: int = None
94
+ """Toleration seconds."""
95
+
96
+
97
+ class V1NodeSelectorRequirement(BaseModel):
98
+ key: str
99
+ operator: str
100
+ values: list[str] = None
101
+
102
+
103
+ class V1NodeSelectorTerm(BaseModel):
104
+ match_expressions: list[V1NodeSelectorRequirement] = None
105
+ match_fields: list[V1NodeSelectorRequirement] = None
106
+
107
+
108
+ class V1NodeSelector(BaseModel):
109
+ node_selector_terms: list[V1NodeSelectorTerm]
110
+
111
+
112
+ class V1PreferredSchedulingTerm(BaseModel):
113
+ preference: V1NodeSelector
114
+ weight: int
115
+
116
+
117
+ class V1LabelSelectorRequirement(BaseModel):
118
+ key: str
119
+ operator: str
120
+ values: list[str] = None
121
+
122
+
123
+ class V1LabelSelector(BaseModel):
124
+ match_expressions: list[V1LabelSelectorRequirement] = None
125
+ match_labels: dict[str, str] = None
126
+
127
+
128
+ class V1PodAffinityTerm(BaseModel):
129
+ label_selector: V1LabelSelector = None
130
+ match_label_keys: list[str] = None
131
+ mismatch_label_keys: list[str] = None
132
+ namespace_selector: V1LabelSelector = None
133
+ namespaces: list[str] = None
134
+ topology_key: str
135
+
136
+
137
+ class V1WeightedPodAffinityTerm(BaseModel):
138
+ pod_affinity_term: V1PodAffinityTerm
139
+ weight: int
140
+
141
+
142
+ class V1NodeAffinity(BaseModel):
143
+ preferred_during_scheduling_ignored_during_execution: list[V1PreferredSchedulingTerm] = None
144
+ required_during_scheduling_ignored_during_execution: V1NodeSelector = None
145
+
146
+
147
+ class V1PodAffinity(BaseModel):
148
+ preferred_during_scheduling_ignored_during_execution: list[V1WeightedPodAffinityTerm] = None
149
+ required_during_scheduling_ignored_during_execution: list[V1PodAffinityTerm] = None
150
+
151
+
152
+ class V1PodAntiAffinity(BaseModel):
153
+ preferred_during_scheduling_ignored_during_execution: list[V1WeightedPodAffinityTerm] = None
154
+ required_during_scheduling_ignored_during_execution: list[V1PodAffinityTerm] = None
155
+
156
+
157
+ class Affinity(BaseModel):
158
+ """
159
+ Affinity model.
160
+ """
161
+
162
+ node_affinity: V1NodeAffinity = None
163
+ """Node affinity."""
164
+
165
+ pod_affinity: V1PodAffinity = None
166
+ """Pod affinity."""
167
+
168
+ pod_anti_affinity: V1PodAntiAffinity = None
169
+ """Pod anti affinity."""
170
+
171
+
172
+ class K8s(BaseModel):
173
+ """
174
+ Kubernetes resource model.
175
+ """
176
+
177
+ node_selector: list[NodeSelector] = None
178
+ """Node selector."""
179
+
180
+ volumes: list[Volume] = None
181
+ """List of volumes."""
182
+
183
+ resources: Resource = None
184
+ """Resources restrictions."""
185
+
186
+ affinity: Affinity = None
187
+ """Affinity."""
188
+
189
+ tolerations: list[Toleration] = None
190
+ """Tolerations."""
191
+
192
+ envs: list[Env] = None
193
+ """Env variables."""
194
+
195
+ secrets: list[str] = None
196
+ """List of secret names."""
197
+
198
+ profile: str = None
199
+ """Profile template."""
200
+
201
+
202
+ class CorePort(BaseModel):
203
+ """
204
+ Port mapper model.
205
+ """
206
+
207
+ port: int
208
+ target_port: int
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.entity.spec import Spec, SpecValidator
4
+ from digitalhub.entities.task._base.models import K8s
5
+
6
+
7
+ class TaskSpec(Spec):
8
+ """TaskSpec specifications."""
9
+
10
+ def __init__(self, function: str) -> None:
11
+ self.function = function
12
+
13
+
14
+ class TaskSpecK8s(TaskSpec):
15
+ """TaskSpecK8s specifications."""
16
+
17
+ def __init__(
18
+ self,
19
+ function: str,
20
+ node_selector: dict | None = None,
21
+ volumes: list | None = None,
22
+ resources: dict | None = None,
23
+ affinity: dict | None = None,
24
+ tolerations: list | None = None,
25
+ envs: list | None = None,
26
+ secrets: list | None = None,
27
+ profile: str | None = None,
28
+ **kwargs,
29
+ ) -> None:
30
+ super().__init__(function)
31
+ self.node_selector = node_selector
32
+ self.volumes = volumes
33
+ self.resources = resources
34
+ self.affinity = affinity
35
+ self.tolerations = tolerations
36
+ self.envs = envs
37
+ self.secrets = secrets
38
+ self.profile = profile
39
+
40
+
41
+ class TaskValidator(SpecValidator):
42
+ """
43
+ TaskValidator validator.
44
+ """
45
+
46
+ function: str
47
+ """Function string."""
48
+
49
+
50
+ class TaskValidatorK8s(TaskValidator, K8s):
51
+ """
52
+ TaskValidatorK8s validator.
53
+ """
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.entity.status import Status
4
+
5
+
6
+ class TaskStatus(Status):
7
+ """
8
+ TaskStatus status.
9
+ """
@@ -0,0 +1,228 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities._base.crud import (
6
+ delete_entity,
7
+ get_unversioned_entity,
8
+ import_context_entity,
9
+ list_context_entities,
10
+ new_context_entity,
11
+ )
12
+ from digitalhub.entities.utils.entity_types import EntityTypes
13
+ from digitalhub.utils.exceptions import EntityError
14
+
15
+ if typing.TYPE_CHECKING:
16
+ from digitalhub.entities.task._base.entity import Task
17
+
18
+
19
+ ENTITY_TYPE = EntityTypes.TASK.value
20
+
21
+
22
+ def new_task(
23
+ project: str,
24
+ kind: str,
25
+ uuid: str | None = None,
26
+ labels: list[str] | None = None,
27
+ function: str | None = None,
28
+ **kwargs,
29
+ ) -> Task:
30
+ """
31
+ Create a new object.
32
+
33
+ Parameters
34
+ ----------
35
+ project : str
36
+ Project name.
37
+ kind : str
38
+ Kind the object.
39
+ uuid : str
40
+ ID of the object.
41
+ labels : list[str]
42
+ List of labels.
43
+ function : str
44
+ Name of the executable associated with the task.
45
+ **kwargs : dict
46
+ Spec keyword arguments.
47
+
48
+ Returns
49
+ -------
50
+ Task
51
+ Object instance.
52
+
53
+ Examples
54
+ --------
55
+ >>> obj = new_task(project="my-project",
56
+ >>> kind="python+job",
57
+ >>> function="function-string")
58
+ """
59
+ return new_context_entity(
60
+ project=project,
61
+ kind=kind,
62
+ uuid=uuid,
63
+ labels=labels,
64
+ function=function,
65
+ **kwargs,
66
+ )
67
+
68
+
69
+ def get_task(
70
+ identifier: str,
71
+ project: str | None = None,
72
+ **kwargs,
73
+ ) -> Task:
74
+ """
75
+ Get object from backend.
76
+
77
+ Parameters
78
+ ----------
79
+ identifier : str
80
+ Entity key (store://...) or entity ID.
81
+ project : str
82
+ Project name.
83
+ **kwargs : dict
84
+ Parameters to pass to the API call.
85
+
86
+ Returns
87
+ -------
88
+ Task
89
+ Object instance.
90
+
91
+ Examples
92
+ --------
93
+ Using entity key:
94
+ >>> obj = get_task("store://my-task-key")
95
+
96
+ Using entity ID:
97
+ >>> obj = get_task("my-task-id"
98
+ >>> project="my-project")
99
+ """
100
+ return get_unversioned_entity(
101
+ identifier,
102
+ entity_type=ENTITY_TYPE,
103
+ project=project,
104
+ **kwargs,
105
+ )
106
+
107
+
108
+ def list_tasks(project: str, **kwargs) -> list[Task]:
109
+ """
110
+ List all latest version objects from backend.
111
+
112
+ Parameters
113
+ ----------
114
+ project : str
115
+ Project name.
116
+ **kwargs : dict
117
+ Parameters to pass to the API call.
118
+
119
+ Returns
120
+ -------
121
+ list[Task]
122
+ List of object instances.
123
+
124
+ Examples
125
+ --------
126
+ >>> objs = list_tasks(project="my-project")
127
+ """
128
+ return list_context_entities(
129
+ project=project,
130
+ entity_type=ENTITY_TYPE,
131
+ **kwargs,
132
+ )
133
+
134
+
135
+ def import_task(file: str) -> Task:
136
+ """
137
+ Get object from file.
138
+
139
+ Parameters
140
+ ----------
141
+ file : str
142
+ Path to YAML file.
143
+
144
+ Returns
145
+ -------
146
+ Task
147
+ Object instance.
148
+
149
+ Example
150
+ -------
151
+ >>> obj = import_task("my-task.yaml")
152
+ """
153
+ return import_context_entity(file)
154
+
155
+
156
+ def update_task(entity: Task) -> Task:
157
+ """
158
+ Update object. Note that object spec are immutable.
159
+
160
+ Parameters
161
+ ----------
162
+ entity : Task
163
+ Object to update.
164
+
165
+ Returns
166
+ -------
167
+ Task
168
+ Entity updated.
169
+
170
+ Examples
171
+ --------
172
+ >>> obj = update_task(obj)
173
+ """
174
+ return entity.save(update=True)
175
+
176
+
177
+ def delete_task(
178
+ identifier: str,
179
+ project: str | None = None,
180
+ entity_id: str | None = None,
181
+ delete_all_versions: bool = False,
182
+ cascade: bool = True,
183
+ **kwargs,
184
+ ) -> dict:
185
+ """
186
+ Delete object from backend.
187
+
188
+ Parameters
189
+ ----------
190
+ identifier : str
191
+ Entity key (store://...) or entity name.
192
+ project : str
193
+ Project name.
194
+ entity_id : str
195
+ Entity ID.
196
+ delete_all_versions : bool
197
+ Delete all versions of the named entity. If True, use entity name instead of entity key as identifier.
198
+ cascade : bool
199
+ Cascade delete.
200
+ **kwargs : dict
201
+ Parameters to pass to the API call.
202
+
203
+ Returns
204
+ -------
205
+ dict
206
+ Response from backend.
207
+
208
+ Examples
209
+ --------
210
+ If delete_all_versions is False:
211
+ >>> obj = delete_task("store://my-task-key")
212
+
213
+ Otherwise:
214
+ >>> obj = delete_task("task-name",
215
+ >>> project="my-project",
216
+ >>> delete_all_versions=True)
217
+ """
218
+ if not identifier.startswith("store://"):
219
+ raise EntityError("Task has no name. Use key instead.")
220
+ return delete_entity(
221
+ identifier=identifier,
222
+ entity_type=ENTITY_TYPE,
223
+ project=project,
224
+ entity_id=entity_id,
225
+ delete_all_versions=delete_all_versions,
226
+ cascade=cascade,
227
+ **kwargs,
228
+ )
File without changes