fractal-server 1.4.9__py3-none-any.whl → 2.0.0a0__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.
- fractal_server/__init__.py +1 -1
- fractal_server/app/models/__init__.py +4 -7
- fractal_server/app/models/linkuserproject.py +9 -0
- fractal_server/app/models/security.py +6 -0
- fractal_server/app/models/state.py +1 -1
- fractal_server/app/models/v1/__init__.py +10 -0
- fractal_server/app/models/{dataset.py → v1/dataset.py} +5 -5
- fractal_server/app/models/{job.py → v1/job.py} +5 -5
- fractal_server/app/models/{project.py → v1/project.py} +5 -5
- fractal_server/app/models/{task.py → v1/task.py} +7 -2
- fractal_server/app/models/{workflow.py → v1/workflow.py} +5 -5
- fractal_server/app/models/v2/__init__.py +20 -0
- fractal_server/app/models/v2/dataset.py +55 -0
- fractal_server/app/models/v2/job.py +51 -0
- fractal_server/app/models/v2/project.py +31 -0
- fractal_server/app/models/v2/task.py +93 -0
- fractal_server/app/models/v2/workflow.py +43 -0
- fractal_server/app/models/v2/workflowtask.py +90 -0
- fractal_server/app/routes/{admin.py → admin/v1.py} +42 -42
- fractal_server/app/routes/admin/v2.py +275 -0
- fractal_server/app/routes/api/v1/__init__.py +7 -7
- fractal_server/app/routes/api/v1/_aux_functions.py +2 -2
- fractal_server/app/routes/api/v1/dataset.py +44 -37
- fractal_server/app/routes/api/v1/job.py +12 -12
- fractal_server/app/routes/api/v1/project.py +23 -21
- fractal_server/app/routes/api/v1/task.py +24 -14
- fractal_server/app/routes/api/v1/task_collection.py +16 -14
- fractal_server/app/routes/api/v1/workflow.py +24 -24
- fractal_server/app/routes/api/v1/workflowtask.py +10 -10
- fractal_server/app/routes/api/v2/__init__.py +28 -0
- fractal_server/app/routes/api/v2/_aux_functions.py +497 -0
- fractal_server/app/routes/api/v2/apply.py +220 -0
- fractal_server/app/routes/api/v2/dataset.py +310 -0
- fractal_server/app/routes/api/v2/images.py +212 -0
- fractal_server/app/routes/api/v2/job.py +200 -0
- fractal_server/app/routes/api/v2/project.py +205 -0
- fractal_server/app/routes/api/v2/task.py +222 -0
- fractal_server/app/routes/api/v2/task_collection.py +229 -0
- fractal_server/app/routes/api/v2/workflow.py +398 -0
- fractal_server/app/routes/api/v2/workflowtask.py +269 -0
- fractal_server/app/routes/aux/_job.py +1 -1
- fractal_server/app/runner/async_wrap.py +27 -0
- fractal_server/app/runner/exceptions.py +129 -0
- fractal_server/app/runner/executors/local/__init__.py +3 -0
- fractal_server/app/runner/{_local → executors/local}/executor.py +2 -2
- fractal_server/app/runner/executors/slurm/__init__.py +3 -0
- fractal_server/app/runner/{_slurm → executors/slurm}/_batching.py +1 -1
- fractal_server/app/runner/executors/slurm/_check_jobs_status.py +72 -0
- fractal_server/app/runner/{_slurm → executors/slurm}/_executor_wait_thread.py +3 -4
- fractal_server/app/runner/{_slurm → executors/slurm}/_slurm_config.py +3 -152
- fractal_server/app/runner/{_slurm → executors/slurm}/_subprocess_run_as_user.py +1 -1
- fractal_server/app/runner/{_slurm → executors/slurm}/executor.py +9 -9
- fractal_server/app/runner/filenames.py +6 -0
- fractal_server/app/runner/set_start_and_last_task_index.py +39 -0
- fractal_server/app/runner/task_files.py +105 -0
- fractal_server/app/runner/{__init__.py → v1/__init__.py} +36 -49
- fractal_server/app/runner/{_common.py → v1/_common.py} +13 -120
- fractal_server/app/runner/{_local → v1/_local}/__init__.py +6 -6
- fractal_server/app/runner/{_local → v1/_local}/_local_config.py +6 -7
- fractal_server/app/runner/{_local → v1/_local}/_submit_setup.py +1 -5
- fractal_server/app/runner/v1/_slurm/__init__.py +310 -0
- fractal_server/app/runner/{_slurm → v1/_slurm}/_submit_setup.py +3 -9
- fractal_server/app/runner/v1/_slurm/get_slurm_config.py +163 -0
- fractal_server/app/runner/v1/common.py +117 -0
- fractal_server/app/runner/{handle_failed_job.py → v1/handle_failed_job.py} +8 -8
- fractal_server/app/runner/v2/__init__.py +337 -0
- fractal_server/app/runner/v2/_local/__init__.py +169 -0
- fractal_server/app/runner/v2/_local/_local_config.py +118 -0
- fractal_server/app/runner/v2/_local/_submit_setup.py +52 -0
- fractal_server/app/runner/v2/_slurm/__init__.py +157 -0
- fractal_server/app/runner/v2/_slurm/_submit_setup.py +83 -0
- fractal_server/app/runner/v2/_slurm/get_slurm_config.py +179 -0
- fractal_server/app/runner/v2/components.py +5 -0
- fractal_server/app/runner/v2/deduplicate_list.py +24 -0
- fractal_server/app/runner/v2/handle_failed_job.py +156 -0
- fractal_server/app/runner/v2/merge_outputs.py +41 -0
- fractal_server/app/runner/v2/runner.py +264 -0
- fractal_server/app/runner/v2/runner_functions.py +339 -0
- fractal_server/app/runner/v2/runner_functions_low_level.py +134 -0
- fractal_server/app/runner/v2/task_interface.py +43 -0
- fractal_server/app/runner/v2/v1_compat.py +21 -0
- fractal_server/app/schemas/__init__.py +4 -42
- fractal_server/app/schemas/v1/__init__.py +42 -0
- fractal_server/app/schemas/{applyworkflow.py → v1/applyworkflow.py} +18 -18
- fractal_server/app/schemas/{dataset.py → v1/dataset.py} +30 -30
- fractal_server/app/schemas/{dumps.py → v1/dumps.py} +8 -8
- fractal_server/app/schemas/{manifest.py → v1/manifest.py} +5 -5
- fractal_server/app/schemas/{project.py → v1/project.py} +9 -9
- fractal_server/app/schemas/{task.py → v1/task.py} +12 -12
- fractal_server/app/schemas/{task_collection.py → v1/task_collection.py} +7 -7
- fractal_server/app/schemas/{workflow.py → v1/workflow.py} +38 -38
- fractal_server/app/schemas/v2/__init__.py +34 -0
- fractal_server/app/schemas/v2/dataset.py +88 -0
- fractal_server/app/schemas/v2/dumps.py +87 -0
- fractal_server/app/schemas/v2/job.py +113 -0
- fractal_server/app/schemas/v2/manifest.py +109 -0
- fractal_server/app/schemas/v2/project.py +36 -0
- fractal_server/app/schemas/v2/task.py +121 -0
- fractal_server/app/schemas/v2/task_collection.py +105 -0
- fractal_server/app/schemas/v2/workflow.py +78 -0
- fractal_server/app/schemas/v2/workflowtask.py +118 -0
- fractal_server/config.py +5 -10
- fractal_server/images/__init__.py +50 -0
- fractal_server/images/tools.py +86 -0
- fractal_server/main.py +11 -3
- fractal_server/migrations/versions/4b35c5cefbe3_tmp_is_v2_compatible.py +39 -0
- fractal_server/migrations/versions/56af171b0159_v2.py +217 -0
- fractal_server/migrations/versions/876f28db9d4e_tmp_split_task_and_wftask_meta.py +68 -0
- fractal_server/migrations/versions/974c802f0dd0_tmp_workflowtaskv2_type_in_db.py +37 -0
- fractal_server/migrations/versions/9cd305cd6023_tmp_workflowtaskv2.py +40 -0
- fractal_server/migrations/versions/a6231ed6273c_tmp_args_schemas_in_taskv2.py +42 -0
- fractal_server/migrations/versions/b9e9eed9d442_tmp_taskv2_type.py +37 -0
- fractal_server/migrations/versions/e3e639454d4b_tmp_make_task_meta_non_optional.py +50 -0
- fractal_server/tasks/__init__.py +0 -5
- fractal_server/tasks/endpoint_operations.py +13 -19
- fractal_server/tasks/utils.py +35 -0
- fractal_server/tasks/{_TaskCollectPip.py → v1/_TaskCollectPip.py} +3 -3
- fractal_server/tasks/{background_operations.py → v1/background_operations.py} +18 -50
- fractal_server/tasks/v1/get_collection_data.py +14 -0
- fractal_server/tasks/v2/_TaskCollectPip.py +103 -0
- fractal_server/tasks/v2/background_operations.py +382 -0
- fractal_server/tasks/v2/get_collection_data.py +14 -0
- {fractal_server-1.4.9.dist-info → fractal_server-2.0.0a0.dist-info}/METADATA +3 -4
- fractal_server-2.0.0a0.dist-info/RECORD +166 -0
- fractal_server/app/runner/_slurm/.gitignore +0 -2
- fractal_server/app/runner/_slurm/__init__.py +0 -150
- fractal_server/app/runner/common.py +0 -311
- fractal_server-1.4.9.dist-info/RECORD +0 -97
- /fractal_server/app/runner/{_slurm → executors/slurm}/remote.py +0 -0
- {fractal_server-1.4.9.dist-info → fractal_server-2.0.0a0.dist-info}/LICENSE +0 -0
- {fractal_server-1.4.9.dist-info → fractal_server-2.0.0a0.dist-info}/WHEEL +0 -0
- {fractal_server-1.4.9.dist-info → fractal_server-2.0.0a0.dist-info}/entry_points.txt +0 -0
@@ -6,21 +6,21 @@ from pydantic import BaseModel
|
|
6
6
|
from pydantic import validator
|
7
7
|
from pydantic.types import StrictStr
|
8
8
|
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from .dumps import
|
12
|
-
from .dumps import
|
13
|
-
from .dumps import
|
9
|
+
from .._validators import valstr
|
10
|
+
from .._validators import valutc
|
11
|
+
from .dumps import DatasetDumpV1
|
12
|
+
from .dumps import ProjectDumpV1
|
13
|
+
from .dumps import WorkflowDumpV1
|
14
14
|
|
15
15
|
|
16
16
|
__all__ = (
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"
|
17
|
+
"_ApplyWorkflowBaseV1",
|
18
|
+
"ApplyWorkflowCreateV1",
|
19
|
+
"ApplyWorkflowReadV1",
|
20
20
|
)
|
21
21
|
|
22
22
|
|
23
|
-
class
|
23
|
+
class JobStatusTypeV1(str, Enum):
|
24
24
|
"""
|
25
25
|
Define the available job statuses
|
26
26
|
|
@@ -41,7 +41,7 @@ class JobStatusType(str, Enum):
|
|
41
41
|
FAILED = "failed"
|
42
42
|
|
43
43
|
|
44
|
-
class
|
44
|
+
class _ApplyWorkflowBaseV1(BaseModel):
|
45
45
|
"""
|
46
46
|
Base class for `ApplyWorkflow`.
|
47
47
|
|
@@ -52,7 +52,7 @@ class _ApplyWorkflowBase(BaseModel):
|
|
52
52
|
worker_init: Optional[str]
|
53
53
|
|
54
54
|
|
55
|
-
class
|
55
|
+
class ApplyWorkflowCreateV1(_ApplyWorkflowBaseV1):
|
56
56
|
"""
|
57
57
|
Class for `ApplyWorkflow` creation.
|
58
58
|
|
@@ -104,7 +104,7 @@ class ApplyWorkflowCreate(_ApplyWorkflowBase):
|
|
104
104
|
return v
|
105
105
|
|
106
106
|
|
107
|
-
class
|
107
|
+
class ApplyWorkflowReadV1(_ApplyWorkflowBaseV1):
|
108
108
|
"""
|
109
109
|
Class for `ApplyWorkflow` read from database.
|
110
110
|
|
@@ -132,15 +132,15 @@ class ApplyWorkflowRead(_ApplyWorkflowBase):
|
|
132
132
|
|
133
133
|
id: int
|
134
134
|
project_id: Optional[int]
|
135
|
-
project_dump:
|
135
|
+
project_dump: ProjectDumpV1
|
136
136
|
user_email: str
|
137
137
|
slurm_account: Optional[str]
|
138
138
|
workflow_id: Optional[int]
|
139
|
-
workflow_dump:
|
139
|
+
workflow_dump: WorkflowDumpV1
|
140
140
|
input_dataset_id: Optional[int]
|
141
|
-
input_dataset_dump:
|
141
|
+
input_dataset_dump: DatasetDumpV1
|
142
142
|
output_dataset_id: Optional[int]
|
143
|
-
output_dataset_dump:
|
143
|
+
output_dataset_dump: DatasetDumpV1
|
144
144
|
start_timestamp: datetime
|
145
145
|
end_timestamp: Optional[datetime]
|
146
146
|
status: str
|
@@ -158,7 +158,7 @@ class ApplyWorkflowRead(_ApplyWorkflowBase):
|
|
158
158
|
)
|
159
159
|
|
160
160
|
|
161
|
-
class
|
161
|
+
class ApplyWorkflowUpdateV1(BaseModel):
|
162
162
|
"""
|
163
163
|
Class for updating a job status.
|
164
164
|
|
@@ -166,4 +166,4 @@ class ApplyWorkflowUpdate(BaseModel):
|
|
166
166
|
status: New job status.
|
167
167
|
"""
|
168
168
|
|
169
|
-
status:
|
169
|
+
status: JobStatusTypeV1
|
@@ -6,25 +6,25 @@ from pydantic import BaseModel
|
|
6
6
|
from pydantic import Field
|
7
7
|
from pydantic import validator
|
8
8
|
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from
|
12
|
-
from .dumps import
|
13
|
-
from .project import
|
14
|
-
from .workflow import
|
9
|
+
from .._validators import val_absolute_path
|
10
|
+
from .._validators import valstr
|
11
|
+
from .._validators import valutc
|
12
|
+
from .dumps import WorkflowTaskDumpV1
|
13
|
+
from .project import ProjectReadV1
|
14
|
+
from .workflow import WorkflowTaskStatusTypeV1
|
15
15
|
|
16
16
|
__all__ = (
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
23
|
-
"
|
17
|
+
"DatasetUpdateV1",
|
18
|
+
"DatasetCreateV1",
|
19
|
+
"DatasetReadV1",
|
20
|
+
"ResourceCreateV1",
|
21
|
+
"ResourceReadV1",
|
22
|
+
"ResourceUpdateV1",
|
23
|
+
"DatasetStatusReadV1",
|
24
24
|
)
|
25
25
|
|
26
26
|
|
27
|
-
class
|
27
|
+
class _ResourceBaseV1(BaseModel):
|
28
28
|
"""
|
29
29
|
Base class for `Resource`.
|
30
30
|
|
@@ -35,7 +35,7 @@ class _ResourceBase(BaseModel):
|
|
35
35
|
path: str
|
36
36
|
|
37
37
|
|
38
|
-
class
|
38
|
+
class ResourceCreateV1(_ResourceBaseV1):
|
39
39
|
"""
|
40
40
|
Class for `Resource` creation.
|
41
41
|
"""
|
@@ -44,7 +44,7 @@ class ResourceCreate(_ResourceBase):
|
|
44
44
|
_path = validator("path", allow_reuse=True)(val_absolute_path("path"))
|
45
45
|
|
46
46
|
|
47
|
-
class
|
47
|
+
class ResourceUpdateV1(_ResourceBaseV1):
|
48
48
|
"""
|
49
49
|
Class for `Resource` update.
|
50
50
|
"""
|
@@ -53,7 +53,7 @@ class ResourceUpdate(_ResourceBase):
|
|
53
53
|
_path = validator("path", allow_reuse=True)(val_absolute_path("path"))
|
54
54
|
|
55
55
|
|
56
|
-
class
|
56
|
+
class ResourceReadV1(_ResourceBaseV1):
|
57
57
|
"""
|
58
58
|
Class for `Resource` read from database.
|
59
59
|
|
@@ -66,7 +66,7 @@ class ResourceRead(_ResourceBase):
|
|
66
66
|
dataset_id: int
|
67
67
|
|
68
68
|
|
69
|
-
class
|
69
|
+
class _DatasetHistoryItemV1(BaseModel):
|
70
70
|
"""
|
71
71
|
Class for an item of `Dataset.history`.
|
72
72
|
|
@@ -77,12 +77,12 @@ class _DatasetHistoryItem(BaseModel):
|
|
77
77
|
and `component_list`.
|
78
78
|
"""
|
79
79
|
|
80
|
-
workflowtask:
|
81
|
-
status:
|
80
|
+
workflowtask: WorkflowTaskDumpV1
|
81
|
+
status: WorkflowTaskStatusTypeV1
|
82
82
|
parallelization: Optional[dict]
|
83
83
|
|
84
84
|
|
85
|
-
class
|
85
|
+
class _DatasetBaseV1(BaseModel):
|
86
86
|
"""
|
87
87
|
Base class for `Dataset`.
|
88
88
|
|
@@ -97,11 +97,11 @@ class _DatasetBase(BaseModel):
|
|
97
97
|
name: str
|
98
98
|
type: Optional[str]
|
99
99
|
meta: dict[str, Any] = Field(default={})
|
100
|
-
history: list[
|
100
|
+
history: list[_DatasetHistoryItemV1] = Field(default=[])
|
101
101
|
read_only: bool = False
|
102
102
|
|
103
103
|
|
104
|
-
class
|
104
|
+
class DatasetUpdateV1(_DatasetBaseV1):
|
105
105
|
"""
|
106
106
|
Class for `Dataset` update.
|
107
107
|
|
@@ -114,7 +114,7 @@ class DatasetUpdate(_DatasetBase):
|
|
114
114
|
|
115
115
|
name: Optional[str]
|
116
116
|
meta: Optional[dict[str, Any]] = None
|
117
|
-
history: Optional[list[
|
117
|
+
history: Optional[list[_DatasetHistoryItemV1]] = None
|
118
118
|
read_only: Optional[bool]
|
119
119
|
|
120
120
|
# Validators
|
@@ -122,7 +122,7 @@ class DatasetUpdate(_DatasetBase):
|
|
122
122
|
_type = validator("type", allow_reuse=True)(valstr("type"))
|
123
123
|
|
124
124
|
|
125
|
-
class
|
125
|
+
class DatasetCreateV1(_DatasetBaseV1):
|
126
126
|
"""
|
127
127
|
Class for `Dataset` creation.
|
128
128
|
"""
|
@@ -132,7 +132,7 @@ class DatasetCreate(_DatasetBase):
|
|
132
132
|
_type = validator("type", allow_reuse=True)(valstr("type"))
|
133
133
|
|
134
134
|
|
135
|
-
class
|
135
|
+
class DatasetReadV1(_DatasetBaseV1):
|
136
136
|
"""
|
137
137
|
Class for `Dataset` read from database.
|
138
138
|
|
@@ -145,10 +145,10 @@ class DatasetRead(_DatasetBase):
|
|
145
145
|
"""
|
146
146
|
|
147
147
|
id: int
|
148
|
-
resource_list: list[
|
148
|
+
resource_list: list[ResourceReadV1]
|
149
149
|
project_id: int
|
150
150
|
read_only: bool
|
151
|
-
project:
|
151
|
+
project: ProjectReadV1
|
152
152
|
timestamp_created: datetime
|
153
153
|
|
154
154
|
_timestamp_created = validator("timestamp_created", allow_reuse=True)(
|
@@ -156,7 +156,7 @@ class DatasetRead(_DatasetBase):
|
|
156
156
|
)
|
157
157
|
|
158
158
|
|
159
|
-
class
|
159
|
+
class DatasetStatusReadV1(BaseModel):
|
160
160
|
"""
|
161
161
|
Response type for the
|
162
162
|
`/project/{project_id}/dataset/{dataset_id}/status/` endpoint
|
@@ -165,6 +165,6 @@ class DatasetStatusRead(BaseModel):
|
|
165
165
|
status: Optional[
|
166
166
|
dict[
|
167
167
|
int,
|
168
|
-
|
168
|
+
WorkflowTaskStatusTypeV1,
|
169
169
|
]
|
170
170
|
] = None
|
@@ -14,7 +14,7 @@ from pydantic import BaseModel
|
|
14
14
|
from pydantic import Extra
|
15
15
|
|
16
16
|
|
17
|
-
class
|
17
|
+
class ProjectDumpV1(BaseModel, extra=Extra.forbid):
|
18
18
|
|
19
19
|
id: int
|
20
20
|
name: str
|
@@ -22,7 +22,7 @@ class ProjectDump(BaseModel, extra=Extra.forbid):
|
|
22
22
|
timestamp_created: str
|
23
23
|
|
24
24
|
|
25
|
-
class
|
25
|
+
class TaskDumpV1(BaseModel):
|
26
26
|
id: int
|
27
27
|
source: str
|
28
28
|
name: str
|
@@ -33,32 +33,32 @@ class TaskDump(BaseModel):
|
|
33
33
|
version: Optional[str]
|
34
34
|
|
35
35
|
|
36
|
-
class
|
36
|
+
class WorkflowTaskDumpV1(BaseModel):
|
37
37
|
id: int
|
38
38
|
order: Optional[int]
|
39
39
|
workflow_id: int
|
40
40
|
task_id: int
|
41
|
-
task:
|
41
|
+
task: TaskDumpV1
|
42
42
|
|
43
43
|
|
44
|
-
class
|
44
|
+
class WorkflowDumpV1(BaseModel):
|
45
45
|
id: int
|
46
46
|
name: str
|
47
47
|
project_id: int
|
48
48
|
timestamp_created: str
|
49
49
|
|
50
50
|
|
51
|
-
class
|
51
|
+
class ResourceDumpV1(BaseModel):
|
52
52
|
id: int
|
53
53
|
path: str
|
54
54
|
dataset_id: int
|
55
55
|
|
56
56
|
|
57
|
-
class
|
57
|
+
class DatasetDumpV1(BaseModel):
|
58
58
|
id: int
|
59
59
|
name: str
|
60
60
|
type: Optional[str]
|
61
61
|
read_only: bool
|
62
|
-
resource_list: list[
|
62
|
+
resource_list: list[ResourceDumpV1]
|
63
63
|
project_id: int
|
64
64
|
timestamp_created: str
|
@@ -12,7 +12,7 @@ from pydantic import validator
|
|
12
12
|
__all__ = ("TaskManifestV1", "ManifestV1")
|
13
13
|
|
14
14
|
|
15
|
-
class
|
15
|
+
class _TaskManifestBaseV1(BaseModel):
|
16
16
|
"""
|
17
17
|
Base class for `TaskManifestV1`.
|
18
18
|
|
@@ -54,10 +54,10 @@ class _TaskManifestBase(BaseModel):
|
|
54
54
|
docs_link: Optional[HttpUrl]
|
55
55
|
|
56
56
|
|
57
|
-
TaskManifestType = TypeVar("TaskManifestType", bound=
|
57
|
+
TaskManifestType = TypeVar("TaskManifestType", bound=_TaskManifestBaseV1)
|
58
58
|
|
59
59
|
|
60
|
-
class
|
60
|
+
class _ManifestBaseV1(BaseModel):
|
61
61
|
"""
|
62
62
|
Base class for `ManifestV1`.
|
63
63
|
|
@@ -102,7 +102,7 @@ class _ManifestBase(BaseModel):
|
|
102
102
|
return values
|
103
103
|
|
104
104
|
|
105
|
-
class TaskManifestV1(
|
105
|
+
class TaskManifestV1(_TaskManifestBaseV1):
|
106
106
|
"""
|
107
107
|
Task manifest schema version 1.
|
108
108
|
"""
|
@@ -110,7 +110,7 @@ class TaskManifestV1(_TaskManifestBase):
|
|
110
110
|
pass
|
111
111
|
|
112
112
|
|
113
|
-
class ManifestV1(
|
113
|
+
class ManifestV1(_ManifestBaseV1):
|
114
114
|
"""
|
115
115
|
Manifest schema version 1.
|
116
116
|
|
@@ -4,18 +4,18 @@ from typing import Optional
|
|
4
4
|
from pydantic import BaseModel
|
5
5
|
from pydantic import validator
|
6
6
|
|
7
|
-
from
|
8
|
-
from
|
7
|
+
from .._validators import valstr
|
8
|
+
from .._validators import valutc
|
9
9
|
|
10
10
|
|
11
11
|
__all__ = (
|
12
|
-
"
|
13
|
-
"
|
14
|
-
"
|
12
|
+
"ProjectCreateV1",
|
13
|
+
"ProjectReadV1",
|
14
|
+
"ProjectUpdateV1",
|
15
15
|
)
|
16
16
|
|
17
17
|
|
18
|
-
class
|
18
|
+
class _ProjectBaseV1(BaseModel):
|
19
19
|
"""
|
20
20
|
Base class for `Project`.
|
21
21
|
|
@@ -28,7 +28,7 @@ class _ProjectBase(BaseModel):
|
|
28
28
|
read_only: bool = False
|
29
29
|
|
30
30
|
|
31
|
-
class
|
31
|
+
class ProjectCreateV1(_ProjectBaseV1):
|
32
32
|
"""
|
33
33
|
Class for `Project` creation.
|
34
34
|
"""
|
@@ -37,7 +37,7 @@ class ProjectCreate(_ProjectBase):
|
|
37
37
|
_name = validator("name", allow_reuse=True)(valstr("name"))
|
38
38
|
|
39
39
|
|
40
|
-
class
|
40
|
+
class ProjectReadV1(_ProjectBaseV1):
|
41
41
|
"""
|
42
42
|
Class for `Project` read from database.
|
43
43
|
|
@@ -55,7 +55,7 @@ class ProjectRead(_ProjectBase):
|
|
55
55
|
)
|
56
56
|
|
57
57
|
|
58
|
-
class
|
58
|
+
class ProjectUpdateV1(_ProjectBaseV1):
|
59
59
|
"""
|
60
60
|
Class for `Project` update.
|
61
61
|
|
@@ -6,18 +6,18 @@ from pydantic import Field
|
|
6
6
|
from pydantic import HttpUrl
|
7
7
|
from pydantic import validator
|
8
8
|
|
9
|
-
from
|
9
|
+
from .._validators import valstr
|
10
10
|
|
11
11
|
__all__ = (
|
12
|
-
"
|
13
|
-
"
|
14
|
-
"
|
15
|
-
"
|
16
|
-
"
|
12
|
+
"TaskCreateV1",
|
13
|
+
"TaskUpdateV1",
|
14
|
+
"TaskReadV1",
|
15
|
+
"TaskImportV1",
|
16
|
+
"TaskExportV1",
|
17
17
|
)
|
18
18
|
|
19
19
|
|
20
|
-
class
|
20
|
+
class _TaskBaseV1(BaseModel):
|
21
21
|
"""
|
22
22
|
|
23
23
|
Base class for `Task`.
|
@@ -32,7 +32,7 @@ class _TaskBase(BaseModel):
|
|
32
32
|
_source = validator("source", allow_reuse=True)(valstr("source"))
|
33
33
|
|
34
34
|
|
35
|
-
class
|
35
|
+
class TaskUpdateV1(_TaskBaseV1):
|
36
36
|
"""
|
37
37
|
Class for `Task` update.
|
38
38
|
|
@@ -76,7 +76,7 @@ class TaskUpdate(_TaskBase):
|
|
76
76
|
)
|
77
77
|
|
78
78
|
|
79
|
-
class
|
79
|
+
class TaskImportV1(_TaskBaseV1):
|
80
80
|
"""
|
81
81
|
Class for `Task` import.
|
82
82
|
"""
|
@@ -84,7 +84,7 @@ class TaskImport(_TaskBase):
|
|
84
84
|
pass
|
85
85
|
|
86
86
|
|
87
|
-
class
|
87
|
+
class TaskExportV1(_TaskBaseV1):
|
88
88
|
"""
|
89
89
|
Class for `Task` export.
|
90
90
|
"""
|
@@ -92,7 +92,7 @@ class TaskExport(_TaskBase):
|
|
92
92
|
pass
|
93
93
|
|
94
94
|
|
95
|
-
class
|
95
|
+
class TaskReadV1(_TaskBaseV1):
|
96
96
|
"""
|
97
97
|
Class for `Task` read from database.
|
98
98
|
|
@@ -124,7 +124,7 @@ class TaskRead(_TaskBase):
|
|
124
124
|
docs_link: Optional[HttpUrl]
|
125
125
|
|
126
126
|
|
127
|
-
class
|
127
|
+
class TaskCreateV1(_TaskBaseV1):
|
128
128
|
"""
|
129
129
|
Class for `Task` creation.
|
130
130
|
|
@@ -6,16 +6,16 @@ from pydantic import BaseModel
|
|
6
6
|
from pydantic import Field
|
7
7
|
from pydantic import validator
|
8
8
|
|
9
|
-
from
|
10
|
-
from .task import
|
9
|
+
from .._validators import valstr
|
10
|
+
from .task import TaskReadV1
|
11
11
|
|
12
12
|
__all__ = (
|
13
|
-
"
|
14
|
-
"
|
13
|
+
"TaskCollectPipV1",
|
14
|
+
"TaskCollectStatusV1",
|
15
15
|
)
|
16
16
|
|
17
17
|
|
18
|
-
class
|
18
|
+
class TaskCollectPipV1(BaseModel):
|
19
19
|
"""
|
20
20
|
TaskCollectPip class
|
21
21
|
|
@@ -81,7 +81,7 @@ class TaskCollectPip(BaseModel):
|
|
81
81
|
return v
|
82
82
|
|
83
83
|
|
84
|
-
class
|
84
|
+
class TaskCollectStatusV1(BaseModel):
|
85
85
|
"""
|
86
86
|
TaskCollectStatus class
|
87
87
|
|
@@ -97,7 +97,7 @@ class TaskCollectStatus(BaseModel):
|
|
97
97
|
status: Literal["pending", "installing", "collecting", "fail", "OK"]
|
98
98
|
package: str
|
99
99
|
venv_path: Path
|
100
|
-
task_list: Optional[list[
|
100
|
+
task_list: Optional[list[TaskReadV1]] = Field(default=[])
|
101
101
|
log: Optional[str]
|
102
102
|
info: Optional[str]
|
103
103
|
|
@@ -6,30 +6,30 @@ from typing import Optional
|
|
6
6
|
from pydantic import BaseModel
|
7
7
|
from pydantic import validator
|
8
8
|
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from
|
12
|
-
from .project import
|
13
|
-
from .task import
|
14
|
-
from .task import
|
15
|
-
from .task import
|
9
|
+
from .._validators import valint
|
10
|
+
from .._validators import valstr
|
11
|
+
from .._validators import valutc
|
12
|
+
from .project import ProjectReadV1
|
13
|
+
from .task import TaskExportV1
|
14
|
+
from .task import TaskImportV1
|
15
|
+
from .task import TaskReadV1
|
16
16
|
|
17
17
|
__all__ = (
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
23
|
-
"
|
24
|
-
"
|
25
|
-
"
|
26
|
-
"
|
27
|
-
"
|
28
|
-
"
|
18
|
+
"WorkflowCreateV1",
|
19
|
+
"WorkflowReadV1",
|
20
|
+
"WorkflowUpdateV1",
|
21
|
+
"WorkflowImportV1",
|
22
|
+
"WorkflowExportV1",
|
23
|
+
"WorkflowTaskCreateV1",
|
24
|
+
"WorkflowTaskImportV1",
|
25
|
+
"WorkflowTaskExportV1",
|
26
|
+
"WorkflowTaskReadV1",
|
27
|
+
"WorkflowTaskUpdateV1",
|
28
|
+
"WorkflowTaskStatusTypeV1",
|
29
29
|
)
|
30
30
|
|
31
31
|
|
32
|
-
class
|
32
|
+
class _WorkflowTaskBaseV1(BaseModel):
|
33
33
|
"""
|
34
34
|
Base class for `WorkflowTask`.
|
35
35
|
"""
|
@@ -38,7 +38,7 @@ class _WorkflowTaskBase(BaseModel):
|
|
38
38
|
args: Optional[dict[str, Any]] = None
|
39
39
|
|
40
40
|
|
41
|
-
class
|
41
|
+
class WorkflowTaskCreateV1(_WorkflowTaskBaseV1):
|
42
42
|
"""
|
43
43
|
Class for `WorkflowTask` creation.
|
44
44
|
|
@@ -51,7 +51,7 @@ class WorkflowTaskCreate(_WorkflowTaskBase):
|
|
51
51
|
_order = validator("order", allow_reuse=True)(valint("order", min_val=0))
|
52
52
|
|
53
53
|
|
54
|
-
class
|
54
|
+
class WorkflowTaskReadV1(_WorkflowTaskBaseV1):
|
55
55
|
"""
|
56
56
|
Class for `WorkflowTask` read from database.
|
57
57
|
|
@@ -67,10 +67,10 @@ class WorkflowTaskRead(_WorkflowTaskBase):
|
|
67
67
|
order: Optional[int]
|
68
68
|
workflow_id: int
|
69
69
|
task_id: int
|
70
|
-
task:
|
70
|
+
task: TaskReadV1
|
71
71
|
|
72
72
|
|
73
|
-
class
|
73
|
+
class WorkflowTaskImportV1(_WorkflowTaskBaseV1):
|
74
74
|
"""
|
75
75
|
Class for `WorkflowTask` import.
|
76
76
|
|
@@ -78,10 +78,10 @@ class WorkflowTaskImport(_WorkflowTaskBase):
|
|
78
78
|
task:
|
79
79
|
"""
|
80
80
|
|
81
|
-
task:
|
81
|
+
task: TaskImportV1
|
82
82
|
|
83
83
|
|
84
|
-
class
|
84
|
+
class WorkflowTaskExportV1(_WorkflowTaskBaseV1):
|
85
85
|
"""
|
86
86
|
Class for `WorkflowTask` export.
|
87
87
|
|
@@ -89,10 +89,10 @@ class WorkflowTaskExport(_WorkflowTaskBase):
|
|
89
89
|
task:
|
90
90
|
"""
|
91
91
|
|
92
|
-
task:
|
92
|
+
task: TaskExportV1
|
93
93
|
|
94
94
|
|
95
|
-
class
|
95
|
+
class WorkflowTaskUpdateV1(_WorkflowTaskBaseV1):
|
96
96
|
"""
|
97
97
|
Class for `WorkflowTask` update.
|
98
98
|
"""
|
@@ -107,7 +107,7 @@ class WorkflowTaskUpdate(_WorkflowTaskBase):
|
|
107
107
|
return m
|
108
108
|
|
109
109
|
|
110
|
-
class
|
110
|
+
class _WorkflowBaseV1(BaseModel):
|
111
111
|
"""
|
112
112
|
Base class for `Workflow`.
|
113
113
|
|
@@ -118,7 +118,7 @@ class _WorkflowBase(BaseModel):
|
|
118
118
|
name: str
|
119
119
|
|
120
120
|
|
121
|
-
class
|
121
|
+
class WorkflowReadV1(_WorkflowBaseV1):
|
122
122
|
"""
|
123
123
|
Task for `Workflow` read from database.
|
124
124
|
|
@@ -131,8 +131,8 @@ class WorkflowRead(_WorkflowBase):
|
|
131
131
|
|
132
132
|
id: int
|
133
133
|
project_id: int
|
134
|
-
task_list: list[
|
135
|
-
project:
|
134
|
+
task_list: list[WorkflowTaskReadV1]
|
135
|
+
project: ProjectReadV1
|
136
136
|
timestamp_created: datetime
|
137
137
|
|
138
138
|
_timestamp_created = validator("timestamp_created", allow_reuse=True)(
|
@@ -140,7 +140,7 @@ class WorkflowRead(_WorkflowBase):
|
|
140
140
|
)
|
141
141
|
|
142
142
|
|
143
|
-
class
|
143
|
+
class WorkflowCreateV1(_WorkflowBaseV1):
|
144
144
|
"""
|
145
145
|
Task for `Workflow` creation.
|
146
146
|
"""
|
@@ -149,7 +149,7 @@ class WorkflowCreate(_WorkflowBase):
|
|
149
149
|
_name = validator("name", allow_reuse=True)(valstr("name"))
|
150
150
|
|
151
151
|
|
152
|
-
class
|
152
|
+
class WorkflowUpdateV1(_WorkflowBaseV1):
|
153
153
|
"""
|
154
154
|
Task for `Workflow` update.
|
155
155
|
|
@@ -173,7 +173,7 @@ class WorkflowUpdate(_WorkflowBase):
|
|
173
173
|
return value
|
174
174
|
|
175
175
|
|
176
|
-
class
|
176
|
+
class WorkflowImportV1(_WorkflowBaseV1):
|
177
177
|
"""
|
178
178
|
Class for `Workflow` import.
|
179
179
|
|
@@ -181,13 +181,13 @@ class WorkflowImport(_WorkflowBase):
|
|
181
181
|
task_list:
|
182
182
|
"""
|
183
183
|
|
184
|
-
task_list: list[
|
184
|
+
task_list: list[WorkflowTaskImportV1]
|
185
185
|
|
186
186
|
# Validators
|
187
187
|
_name = validator("name", allow_reuse=True)(valstr("name"))
|
188
188
|
|
189
189
|
|
190
|
-
class
|
190
|
+
class WorkflowExportV1(_WorkflowBaseV1):
|
191
191
|
"""
|
192
192
|
Class for `Workflow` export.
|
193
193
|
|
@@ -195,10 +195,10 @@ class WorkflowExport(_WorkflowBase):
|
|
195
195
|
task_list:
|
196
196
|
"""
|
197
197
|
|
198
|
-
task_list: list[
|
198
|
+
task_list: list[WorkflowTaskExportV1]
|
199
199
|
|
200
200
|
|
201
|
-
class
|
201
|
+
class WorkflowTaskStatusTypeV1(str, Enum):
|
202
202
|
"""
|
203
203
|
Define the available values for the status of a `WorkflowTask`.
|
204
204
|
|