fractal-server 1.4.10__py3-none-any.whl → 2.0.0a1__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 +3 -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 +11 -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 +274 -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 +37 -37
- fractal_server/app/routes/api/v1/job.py +14 -14
- 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/dataset.py +309 -0
- fractal_server/app/routes/api/v2/images.py +207 -0
- fractal_server/app/routes/api/v2/job.py +200 -0
- fractal_server/app/routes/api/v2/project.py +202 -0
- fractal_server/app/routes/api/v2/submit.py +220 -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 +397 -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/components.py +5 -0
- fractal_server/app/runner/exceptions.py +129 -0
- 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/{_slurm → executors/slurm}/_check_jobs_status.py +1 -1
- fractal_server/app/runner/{_slurm → executors/slurm}/_executor_wait_thread.py +1 -1
- 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 +32 -19
- 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 +103 -0
- fractal_server/app/runner/{__init__.py → v1/__init__.py} +22 -20
- fractal_server/app/runner/{_common.py → v1/_common.py} +13 -120
- fractal_server/app/runner/{_local → v1/_local}/__init__.py +5 -5
- 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 +336 -0
- fractal_server/app/runner/v2/_local/__init__.py +167 -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/_local/executor.py +100 -0
- fractal_server/app/runner/{_slurm → v2/_slurm}/__init__.py +34 -45
- 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/deduplicate_list.py +22 -0
- fractal_server/app/runner/v2/handle_failed_job.py +156 -0
- fractal_server/app/runner/v2/merge_outputs.py +38 -0
- fractal_server/app/runner/v2/runner.py +267 -0
- fractal_server/app/runner/v2/runner_functions.py +341 -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 +89 -0
- fractal_server/app/schemas/v2/dumps.py +87 -0
- fractal_server/app/schemas/v2/job.py +114 -0
- fractal_server/app/schemas/v2/manifest.py +159 -0
- fractal_server/app/schemas/v2/project.py +37 -0
- fractal_server/app/schemas/v2/task.py +120 -0
- fractal_server/app/schemas/v2/task_collection.py +105 -0
- fractal_server/app/schemas/v2/workflow.py +79 -0
- fractal_server/app/schemas/v2/workflowtask.py +119 -0
- fractal_server/config.py +5 -4
- fractal_server/images/__init__.py +2 -0
- fractal_server/images/models.py +50 -0
- fractal_server/images/tools.py +85 -0
- fractal_server/main.py +11 -3
- fractal_server/migrations/env.py +0 -2
- fractal_server/migrations/versions/d71e732236cd_v2.py +239 -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 +381 -0
- fractal_server/tasks/v2/get_collection_data.py +14 -0
- {fractal_server-1.4.10.dist-info → fractal_server-2.0.0a1.dist-info}/METADATA +1 -1
- fractal_server-2.0.0a1.dist-info/RECORD +160 -0
- fractal_server/app/runner/_slurm/.gitignore +0 -2
- fractal_server/app/runner/common.py +0 -311
- fractal_server-1.4.10.dist-info/RECORD +0 -98
- /fractal_server/app/runner/{_slurm → executors/slurm}/remote.py +0 -0
- /fractal_server/app/runner/{_local → v1/_local}/executor.py +0 -0
- {fractal_server-1.4.10.dist-info → fractal_server-2.0.0a1.dist-info}/LICENSE +0 -0
- {fractal_server-1.4.10.dist-info → fractal_server-2.0.0a1.dist-info}/WHEEL +0 -0
- {fractal_server-1.4.10.dist-info → fractal_server-2.0.0a1.dist-info}/entry_points.txt +0 -0
@@ -27,12 +27,12 @@ from ....models import ApplyWorkflow
|
|
27
27
|
from ....models import Project
|
28
28
|
from ....models import Task
|
29
29
|
from ....models import Workflow
|
30
|
-
from ....schemas import
|
31
|
-
from ....schemas import
|
32
|
-
from ....schemas import
|
33
|
-
from ....schemas import
|
34
|
-
from ....schemas import
|
35
|
-
from ....schemas import
|
30
|
+
from ....schemas.v1 import WorkflowCreateV1
|
31
|
+
from ....schemas.v1 import WorkflowExportV1
|
32
|
+
from ....schemas.v1 import WorkflowImportV1
|
33
|
+
from ....schemas.v1 import WorkflowReadV1
|
34
|
+
from ....schemas.v1 import WorkflowTaskCreateV1
|
35
|
+
from ....schemas.v1 import WorkflowUpdateV1
|
36
36
|
from ....security import current_active_user
|
37
37
|
from ....security import User
|
38
38
|
from ._aux_functions import _check_workflow_exists
|
@@ -47,13 +47,13 @@ router = APIRouter()
|
|
47
47
|
|
48
48
|
@router.get(
|
49
49
|
"/project/{project_id}/workflow/",
|
50
|
-
response_model=list[
|
50
|
+
response_model=list[WorkflowReadV1],
|
51
51
|
)
|
52
52
|
async def get_workflow_list(
|
53
53
|
project_id: int,
|
54
54
|
user: User = Depends(current_active_user),
|
55
55
|
db: AsyncSession = Depends(get_async_db),
|
56
|
-
) -> Optional[list[
|
56
|
+
) -> Optional[list[WorkflowReadV1]]:
|
57
57
|
"""
|
58
58
|
Get workflow list for given project
|
59
59
|
"""
|
@@ -72,15 +72,15 @@ async def get_workflow_list(
|
|
72
72
|
|
73
73
|
@router.post(
|
74
74
|
"/project/{project_id}/workflow/",
|
75
|
-
response_model=
|
75
|
+
response_model=WorkflowReadV1,
|
76
76
|
status_code=status.HTTP_201_CREATED,
|
77
77
|
)
|
78
78
|
async def create_workflow(
|
79
79
|
project_id: int,
|
80
|
-
workflow:
|
80
|
+
workflow: WorkflowCreateV1,
|
81
81
|
user: User = Depends(current_active_user),
|
82
82
|
db: AsyncSession = Depends(get_async_db),
|
83
|
-
) -> Optional[
|
83
|
+
) -> Optional[WorkflowReadV1]:
|
84
84
|
"""
|
85
85
|
Create a workflow, associate to a project
|
86
86
|
"""
|
@@ -103,14 +103,14 @@ async def create_workflow(
|
|
103
103
|
|
104
104
|
@router.get(
|
105
105
|
"/project/{project_id}/workflow/{workflow_id}/",
|
106
|
-
response_model=
|
106
|
+
response_model=WorkflowReadV1,
|
107
107
|
)
|
108
108
|
async def read_workflow(
|
109
109
|
project_id: int,
|
110
110
|
workflow_id: int,
|
111
111
|
user: User = Depends(current_active_user),
|
112
112
|
db: AsyncSession = Depends(get_async_db),
|
113
|
-
) -> Optional[
|
113
|
+
) -> Optional[WorkflowReadV1]:
|
114
114
|
"""
|
115
115
|
Get info on an existing workflow
|
116
116
|
"""
|
@@ -124,15 +124,15 @@ async def read_workflow(
|
|
124
124
|
|
125
125
|
@router.patch(
|
126
126
|
"/project/{project_id}/workflow/{workflow_id}/",
|
127
|
-
response_model=
|
127
|
+
response_model=WorkflowReadV1,
|
128
128
|
)
|
129
129
|
async def update_workflow(
|
130
130
|
project_id: int,
|
131
131
|
workflow_id: int,
|
132
|
-
patch:
|
132
|
+
patch: WorkflowUpdateV1,
|
133
133
|
user: User = Depends(current_active_user),
|
134
134
|
db: AsyncSession = Depends(get_async_db),
|
135
|
-
) -> Optional[
|
135
|
+
) -> Optional[WorkflowReadV1]:
|
136
136
|
"""
|
137
137
|
Edit a workflow
|
138
138
|
"""
|
@@ -228,14 +228,14 @@ async def delete_workflow(
|
|
228
228
|
|
229
229
|
@router.get(
|
230
230
|
"/project/{project_id}/workflow/{workflow_id}/export/",
|
231
|
-
response_model=
|
231
|
+
response_model=WorkflowExportV1,
|
232
232
|
)
|
233
233
|
async def export_worfklow(
|
234
234
|
project_id: int,
|
235
235
|
workflow_id: int,
|
236
236
|
user: User = Depends(current_active_user),
|
237
237
|
db: AsyncSession = Depends(get_async_db),
|
238
|
-
) -> Optional[
|
238
|
+
) -> Optional[WorkflowExportV1]:
|
239
239
|
"""
|
240
240
|
Export an existing workflow, after stripping all IDs
|
241
241
|
"""
|
@@ -260,15 +260,15 @@ async def export_worfklow(
|
|
260
260
|
|
261
261
|
@router.post(
|
262
262
|
"/project/{project_id}/workflow/import/",
|
263
|
-
response_model=
|
263
|
+
response_model=WorkflowReadV1,
|
264
264
|
status_code=status.HTTP_201_CREATED,
|
265
265
|
)
|
266
266
|
async def import_workflow(
|
267
267
|
project_id: int,
|
268
|
-
workflow:
|
268
|
+
workflow: WorkflowImportV1,
|
269
269
|
user: User = Depends(current_active_user),
|
270
270
|
db: AsyncSession = Depends(get_async_db),
|
271
|
-
) -> Optional[
|
271
|
+
) -> Optional[WorkflowReadV1]:
|
272
272
|
"""
|
273
273
|
Import an existing workflow into a project
|
274
274
|
|
@@ -320,7 +320,7 @@ async def import_workflow(
|
|
320
320
|
source = wf_task.task.source
|
321
321
|
task_id = source_to_id[source]
|
322
322
|
# Prepare new_wf_task
|
323
|
-
new_wf_task =
|
323
|
+
new_wf_task = WorkflowTaskCreateV1(
|
324
324
|
**wf_task.dict(exclude_none=True),
|
325
325
|
)
|
326
326
|
# Insert task
|
@@ -335,11 +335,11 @@ async def import_workflow(
|
|
335
335
|
return db_workflow
|
336
336
|
|
337
337
|
|
338
|
-
@router.get("/workflow/", response_model=list[
|
338
|
+
@router.get("/workflow/", response_model=list[WorkflowReadV1])
|
339
339
|
async def get_user_workflows(
|
340
340
|
user: User = Depends(current_active_user),
|
341
341
|
db: AsyncSession = Depends(get_async_db),
|
342
|
-
) -> list[
|
342
|
+
) -> list[WorkflowReadV1]:
|
343
343
|
"""
|
344
344
|
Returns all the workflows of the current user
|
345
345
|
"""
|
@@ -23,9 +23,9 @@ from fastapi import status
|
|
23
23
|
from ....db import AsyncSession
|
24
24
|
from ....db import get_async_db
|
25
25
|
from ....models import Task
|
26
|
-
from ....schemas import
|
27
|
-
from ....schemas import
|
28
|
-
from ....schemas import
|
26
|
+
from ....schemas.v1 import WorkflowTaskCreateV1
|
27
|
+
from ....schemas.v1 import WorkflowTaskReadV1
|
28
|
+
from ....schemas.v1 import WorkflowTaskUpdateV1
|
29
29
|
from ....security import current_active_user
|
30
30
|
from ....security import User
|
31
31
|
from ._aux_functions import _get_workflow_check_owner
|
@@ -37,17 +37,17 @@ router = APIRouter()
|
|
37
37
|
|
38
38
|
@router.post(
|
39
39
|
"/project/{project_id}/workflow/{workflow_id}/wftask/",
|
40
|
-
response_model=
|
40
|
+
response_model=WorkflowTaskReadV1,
|
41
41
|
status_code=status.HTTP_201_CREATED,
|
42
42
|
)
|
43
43
|
async def create_workflowtask(
|
44
44
|
project_id: int,
|
45
45
|
workflow_id: int,
|
46
46
|
task_id: int,
|
47
|
-
new_task:
|
47
|
+
new_task: WorkflowTaskCreateV1,
|
48
48
|
user: User = Depends(current_active_user),
|
49
49
|
db: AsyncSession = Depends(get_async_db),
|
50
|
-
) -> Optional[
|
50
|
+
) -> Optional[WorkflowTaskReadV1]:
|
51
51
|
"""
|
52
52
|
Add a WorkflowTask to a Workflow
|
53
53
|
"""
|
@@ -78,7 +78,7 @@ async def create_workflowtask(
|
|
78
78
|
|
79
79
|
@router.get(
|
80
80
|
"/project/{project_id}/workflow/{workflow_id}/wftask/{workflow_task_id}/",
|
81
|
-
response_model=
|
81
|
+
response_model=WorkflowTaskReadV1,
|
82
82
|
)
|
83
83
|
async def read_workflowtask(
|
84
84
|
project_id: int,
|
@@ -99,16 +99,16 @@ async def read_workflowtask(
|
|
99
99
|
|
100
100
|
@router.patch(
|
101
101
|
"/project/{project_id}/workflow/{workflow_id}/wftask/{workflow_task_id}/",
|
102
|
-
response_model=
|
102
|
+
response_model=WorkflowTaskReadV1,
|
103
103
|
)
|
104
104
|
async def update_workflowtask(
|
105
105
|
project_id: int,
|
106
106
|
workflow_id: int,
|
107
107
|
workflow_task_id: int,
|
108
|
-
workflow_task_update:
|
108
|
+
workflow_task_update: WorkflowTaskUpdateV1,
|
109
109
|
user: User = Depends(current_active_user),
|
110
110
|
db: AsyncSession = Depends(get_async_db),
|
111
|
-
) -> Optional[
|
111
|
+
) -> Optional[WorkflowTaskReadV1]:
|
112
112
|
"""
|
113
113
|
Edit a WorkflowTask of a Workflow
|
114
114
|
"""
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"""
|
2
|
+
`api/v2` module
|
3
|
+
"""
|
4
|
+
from fastapi import APIRouter
|
5
|
+
|
6
|
+
from .dataset import router as dataset_router_v2
|
7
|
+
from .images import router as images_routes_v2
|
8
|
+
from .job import router as job_router_v2
|
9
|
+
from .project import router as project_router_v2
|
10
|
+
from .submit import router as submit_job_router_v2
|
11
|
+
from .task import router as task_router_v2
|
12
|
+
from .task_collection import router as task_collection_router_v2
|
13
|
+
from .workflow import router as workflow_router_v2
|
14
|
+
from .workflowtask import router as workflowtask_router_v2
|
15
|
+
|
16
|
+
router_api_v2 = APIRouter()
|
17
|
+
|
18
|
+
router_api_v2.include_router(dataset_router_v2, tags=["V2 Dataset"])
|
19
|
+
router_api_v2.include_router(job_router_v2, tags=["V2 Job"])
|
20
|
+
router_api_v2.include_router(images_routes_v2, tags=["V2 Images"])
|
21
|
+
router_api_v2.include_router(project_router_v2, tags=["V2 Project"])
|
22
|
+
router_api_v2.include_router(submit_job_router_v2, tags=["V2 Submit Job"])
|
23
|
+
router_api_v2.include_router(task_router_v2, prefix="/task", tags=["V2 Task"])
|
24
|
+
router_api_v2.include_router(
|
25
|
+
task_collection_router_v2, prefix="/task", tags=["V2 Task Collection"]
|
26
|
+
)
|
27
|
+
router_api_v2.include_router(workflow_router_v2, tags=["V2 Workflow"])
|
28
|
+
router_api_v2.include_router(workflowtask_router_v2, tags=["V2 WorkflowTask"])
|