fractal-server 2.17.0a3__py3-none-any.whl → 2.17.0a5__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/__main__.py +137 -120
- fractal_server/app/models/security.py +19 -21
- fractal_server/app/models/user_settings.py +1 -0
- fractal_server/app/models/v2/task_group.py +1 -0
- fractal_server/app/routes/admin/v2/accounting.py +3 -3
- fractal_server/app/routes/admin/v2/impersonate.py +2 -2
- fractal_server/app/routes/admin/v2/job.py +6 -6
- fractal_server/app/routes/admin/v2/profile.py +4 -4
- fractal_server/app/routes/admin/v2/project.py +2 -2
- fractal_server/app/routes/admin/v2/resource.py +42 -8
- fractal_server/app/routes/admin/v2/task.py +2 -2
- fractal_server/app/routes/admin/v2/task_group.py +5 -5
- fractal_server/app/routes/admin/v2/task_group_lifecycle.py +4 -4
- fractal_server/app/routes/api/__init__.py +5 -5
- fractal_server/app/routes/api/v2/dataset.py +10 -19
- fractal_server/app/routes/api/v2/history.py +8 -8
- fractal_server/app/routes/api/v2/images.py +5 -5
- fractal_server/app/routes/api/v2/job.py +8 -8
- fractal_server/app/routes/api/v2/pre_submission_checks.py +3 -3
- fractal_server/app/routes/api/v2/project.py +6 -6
- fractal_server/app/routes/api/v2/status_legacy.py +2 -2
- fractal_server/app/routes/api/v2/submit.py +24 -26
- fractal_server/app/routes/api/v2/task.py +6 -7
- fractal_server/app/routes/api/v2/task_collection.py +4 -3
- fractal_server/app/routes/api/v2/task_collection_custom.py +4 -3
- fractal_server/app/routes/api/v2/task_collection_pixi.py +2 -2
- fractal_server/app/routes/api/v2/task_group.py +6 -6
- fractal_server/app/routes/api/v2/task_group_lifecycle.py +4 -4
- fractal_server/app/routes/api/v2/task_version_update.py +3 -3
- fractal_server/app/routes/api/v2/workflow.py +9 -9
- fractal_server/app/routes/api/v2/workflow_import.py +2 -2
- fractal_server/app/routes/api/v2/workflowtask.py +5 -5
- fractal_server/app/routes/auth/__init__.py +34 -5
- fractal_server/app/routes/auth/current_user.py +22 -67
- fractal_server/app/routes/auth/group.py +8 -35
- fractal_server/app/routes/auth/register.py +2 -2
- fractal_server/app/routes/auth/users.py +5 -46
- fractal_server/app/schemas/__init__.py +0 -1
- fractal_server/app/schemas/user.py +23 -0
- fractal_server/app/schemas/v2/task_group.py +1 -0
- fractal_server/app/security/__init__.py +134 -46
- fractal_server/app/security/signup_email.py +52 -34
- fractal_server/config/__init__.py +1 -7
- fractal_server/config/_email.py +10 -47
- fractal_server/config/_main.py +14 -3
- fractal_server/migrations/versions/f65ee53991e3_user_settings_related.py +67 -0
- fractal_server/runner/config/_slurm.py +3 -2
- fractal_server/runner/executors/slurm_common/base_slurm_runner.py +2 -2
- fractal_server/runner/executors/slurm_common/get_slurm_config.py +1 -1
- fractal_server/runner/executors/slurm_common/slurm_config.py +7 -13
- fractal_server/runner/executors/slurm_ssh/runner.py +1 -1
- fractal_server/runner/executors/slurm_sudo/runner.py +1 -1
- fractal_server/runner/v2/_slurm_ssh.py +2 -1
- fractal_server/runner/v2/_slurm_sudo.py +1 -1
- fractal_server/runner/v2/submit_workflow.py +12 -12
- {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/METADATA +1 -2
- {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/RECORD +61 -64
- fractal_server/app/routes/aux/validate_user_settings.py +0 -76
- fractal_server/app/schemas/user_settings.py +0 -63
- fractal_server/app/user_settings.py +0 -32
- fractal_server/config/_init_data.py +0 -27
- {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/WHEEL +0 -0
- {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/entry_points.txt +0 -0
- {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/licenses/LICENSE +0 -0
|
@@ -13,8 +13,10 @@ from fractal_server.app.db import AsyncSession
|
|
|
13
13
|
from fractal_server.app.db import get_async_db
|
|
14
14
|
from fractal_server.app.models import UserOAuth
|
|
15
15
|
from fractal_server.app.models.v2 import Profile
|
|
16
|
+
from fractal_server.app.models.v2 import ProjectV2
|
|
16
17
|
from fractal_server.app.models.v2 import Resource
|
|
17
|
-
from fractal_server.app.
|
|
18
|
+
from fractal_server.app.models.v2 import TaskGroupV2
|
|
19
|
+
from fractal_server.app.routes.auth import current_superuser_act
|
|
18
20
|
from fractal_server.app.schemas.v2 import ProfileCreate
|
|
19
21
|
from fractal_server.app.schemas.v2 import ProfileRead
|
|
20
22
|
from fractal_server.app.schemas.v2 import ResourceCreate
|
|
@@ -55,7 +57,7 @@ def _check_type_match_or_422(new_resource: ResourceCreate) -> None:
|
|
|
55
57
|
|
|
56
58
|
@router.get("/", response_model=list[ResourceRead], status_code=200)
|
|
57
59
|
async def get_resource_list(
|
|
58
|
-
superuser: UserOAuth = Depends(
|
|
60
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
59
61
|
db: AsyncSession = Depends(get_async_db),
|
|
60
62
|
) -> list[ResourceRead]:
|
|
61
63
|
"""
|
|
@@ -72,7 +74,7 @@ async def get_resource_list(
|
|
|
72
74
|
@router.get("/{resource_id}/", response_model=ResourceRead, status_code=200)
|
|
73
75
|
async def get_resource(
|
|
74
76
|
resource_id: int,
|
|
75
|
-
superuser: UserOAuth = Depends(
|
|
77
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
76
78
|
db: AsyncSession = Depends(get_async_db),
|
|
77
79
|
) -> ResourceRead:
|
|
78
80
|
"""
|
|
@@ -86,7 +88,7 @@ async def get_resource(
|
|
|
86
88
|
@router.post("/", response_model=ResourceRead, status_code=201)
|
|
87
89
|
async def post_resource(
|
|
88
90
|
resource_create: ResourceCreate,
|
|
89
|
-
superuser: UserOAuth = Depends(
|
|
91
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
90
92
|
db: AsyncSession = Depends(get_async_db),
|
|
91
93
|
) -> ResourceRead:
|
|
92
94
|
"""
|
|
@@ -114,7 +116,7 @@ async def post_resource(
|
|
|
114
116
|
async def put_resource(
|
|
115
117
|
resource_id: int,
|
|
116
118
|
resource_update: ResourceCreate,
|
|
117
|
-
superuser: UserOAuth = Depends(
|
|
119
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
118
120
|
db: AsyncSession = Depends(get_async_db),
|
|
119
121
|
) -> ResourceRead:
|
|
120
122
|
"""
|
|
@@ -142,7 +144,7 @@ async def put_resource(
|
|
|
142
144
|
@router.delete("/{resource_id}/", status_code=204)
|
|
143
145
|
async def delete_resource(
|
|
144
146
|
resource_id: int,
|
|
145
|
-
superuser: UserOAuth = Depends(
|
|
147
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
146
148
|
db: AsyncSession = Depends(get_async_db),
|
|
147
149
|
):
|
|
148
150
|
"""
|
|
@@ -166,6 +168,38 @@ async def delete_resource(
|
|
|
166
168
|
),
|
|
167
169
|
)
|
|
168
170
|
|
|
171
|
+
# Fail if at least one Project is associated with the Resource.
|
|
172
|
+
res = await db.execute(
|
|
173
|
+
select(func.count(ProjectV2.id)).where(
|
|
174
|
+
ProjectV2.resource_id == resource_id
|
|
175
|
+
)
|
|
176
|
+
)
|
|
177
|
+
associated_project_count = res.scalar()
|
|
178
|
+
if associated_project_count > 0:
|
|
179
|
+
raise HTTPException(
|
|
180
|
+
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
181
|
+
detail=(
|
|
182
|
+
f"Cannot delete Resource {resource_id} because it's associated"
|
|
183
|
+
f" with {associated_project_count} Projects."
|
|
184
|
+
),
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
# Fail if at least one TaskGroupV2 is associated with the Resource.
|
|
188
|
+
res = await db.execute(
|
|
189
|
+
select(func.count(TaskGroupV2.id)).where(
|
|
190
|
+
TaskGroupV2.resource_id == resource_id
|
|
191
|
+
)
|
|
192
|
+
)
|
|
193
|
+
associated_taskgroup_count = res.scalar()
|
|
194
|
+
if associated_taskgroup_count > 0:
|
|
195
|
+
raise HTTPException(
|
|
196
|
+
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
197
|
+
detail=(
|
|
198
|
+
f"Cannot delete Resource {resource_id} because it's associated"
|
|
199
|
+
f" with {associated_taskgroup_count} TaskGroupV2."
|
|
200
|
+
),
|
|
201
|
+
)
|
|
202
|
+
|
|
169
203
|
# Delete
|
|
170
204
|
await db.delete(resource)
|
|
171
205
|
await db.commit()
|
|
@@ -180,7 +214,7 @@ async def delete_resource(
|
|
|
180
214
|
)
|
|
181
215
|
async def get_resource_profiles(
|
|
182
216
|
resource_id: int,
|
|
183
|
-
superuser: UserOAuth = Depends(
|
|
217
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
184
218
|
db: AsyncSession = Depends(get_async_db),
|
|
185
219
|
) -> list[ProfileRead]:
|
|
186
220
|
"""
|
|
@@ -204,7 +238,7 @@ async def get_resource_profiles(
|
|
|
204
238
|
async def post_profile(
|
|
205
239
|
resource_id: int,
|
|
206
240
|
profile_create: ProfileCreate,
|
|
207
|
-
superuser: UserOAuth = Depends(
|
|
241
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
208
242
|
db: AsyncSession = Depends(get_async_db),
|
|
209
243
|
) -> ProfileRead:
|
|
210
244
|
"""
|
|
@@ -14,7 +14,7 @@ from fractal_server.app.models import UserOAuth
|
|
|
14
14
|
from fractal_server.app.models.v2 import TaskV2
|
|
15
15
|
from fractal_server.app.models.v2 import WorkflowTaskV2
|
|
16
16
|
from fractal_server.app.models.v2 import WorkflowV2
|
|
17
|
-
from fractal_server.app.routes.auth import
|
|
17
|
+
from fractal_server.app.routes.auth import current_superuser_act
|
|
18
18
|
|
|
19
19
|
router = APIRouter()
|
|
20
20
|
|
|
@@ -58,7 +58,7 @@ async def query_tasks(
|
|
|
58
58
|
category: str | None = None,
|
|
59
59
|
modality: str | None = None,
|
|
60
60
|
author: str | None = None,
|
|
61
|
-
user: UserOAuth = Depends(
|
|
61
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
62
62
|
db: AsyncSession = Depends(get_async_db),
|
|
63
63
|
) -> list[TaskV2Info]:
|
|
64
64
|
"""
|
|
@@ -12,7 +12,7 @@ from fractal_server.app.db import get_async_db
|
|
|
12
12
|
from fractal_server.app.models import UserOAuth
|
|
13
13
|
from fractal_server.app.models.v2 import TaskGroupActivityV2
|
|
14
14
|
from fractal_server.app.models.v2 import TaskGroupV2
|
|
15
|
-
from fractal_server.app.routes.auth import
|
|
15
|
+
from fractal_server.app.routes.auth import current_superuser_act
|
|
16
16
|
from fractal_server.app.routes.auth._aux_auth import (
|
|
17
17
|
_verify_user_belongs_to_group,
|
|
18
18
|
)
|
|
@@ -38,7 +38,7 @@ async def get_task_group_activity_list(
|
|
|
38
38
|
status: TaskGroupActivityStatusV2 | None = None,
|
|
39
39
|
action: TaskGroupActivityActionV2 | None = None,
|
|
40
40
|
timestamp_started_min: AwareDatetime | None = None,
|
|
41
|
-
superuser: UserOAuth = Depends(
|
|
41
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
42
42
|
db: AsyncSession = Depends(get_async_db),
|
|
43
43
|
) -> list[TaskGroupActivityV2Read]:
|
|
44
44
|
stm = select(TaskGroupActivityV2)
|
|
@@ -67,7 +67,7 @@ async def get_task_group_activity_list(
|
|
|
67
67
|
@router.get("/{task_group_id}/", response_model=TaskGroupReadV2)
|
|
68
68
|
async def query_task_group(
|
|
69
69
|
task_group_id: int,
|
|
70
|
-
user: UserOAuth = Depends(
|
|
70
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
71
71
|
db: AsyncSession = Depends(get_async_db),
|
|
72
72
|
) -> TaskGroupReadV2:
|
|
73
73
|
task_group = await db.get(TaskGroupV2, task_group_id)
|
|
@@ -89,7 +89,7 @@ async def query_task_group_list(
|
|
|
89
89
|
origin: TaskGroupV2OriginEnum | None = None,
|
|
90
90
|
timestamp_last_used_min: AwareDatetime | None = None,
|
|
91
91
|
timestamp_last_used_max: AwareDatetime | None = None,
|
|
92
|
-
user: UserOAuth = Depends(
|
|
92
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
93
93
|
db: AsyncSession = Depends(get_async_db),
|
|
94
94
|
) -> list[TaskGroupReadV2]:
|
|
95
95
|
stm = select(TaskGroupV2)
|
|
@@ -138,7 +138,7 @@ async def query_task_group_list(
|
|
|
138
138
|
async def patch_task_group(
|
|
139
139
|
task_group_id: int,
|
|
140
140
|
task_group_update: TaskGroupUpdateV2,
|
|
141
|
-
user: UserOAuth = Depends(
|
|
141
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
142
142
|
db: AsyncSession = Depends(get_async_db),
|
|
143
143
|
) -> list[TaskGroupReadV2]:
|
|
144
144
|
task_group = await db.get(TaskGroupV2, task_group_id)
|
|
@@ -21,7 +21,7 @@ from fractal_server.app.routes.api.v2._aux_functions_task_lifecycle import (
|
|
|
21
21
|
from fractal_server.app.routes.api.v2._aux_functions_tasks import (
|
|
22
22
|
_get_task_group_or_404,
|
|
23
23
|
)
|
|
24
|
-
from fractal_server.app.routes.auth import
|
|
24
|
+
from fractal_server.app.routes.auth import current_superuser_act
|
|
25
25
|
from fractal_server.app.routes.aux.validate_user_profile import (
|
|
26
26
|
validate_user_profile,
|
|
27
27
|
)
|
|
@@ -52,7 +52,7 @@ async def deactivate_task_group(
|
|
|
52
52
|
task_group_id: int,
|
|
53
53
|
background_tasks: BackgroundTasks,
|
|
54
54
|
response: Response,
|
|
55
|
-
superuser: UserOAuth = Depends(
|
|
55
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
56
56
|
db: AsyncSession = Depends(get_async_db),
|
|
57
57
|
) -> TaskGroupActivityV2Read:
|
|
58
58
|
"""
|
|
@@ -146,7 +146,7 @@ async def reactivate_task_group(
|
|
|
146
146
|
task_group_id: int,
|
|
147
147
|
background_tasks: BackgroundTasks,
|
|
148
148
|
response: Response,
|
|
149
|
-
superuser: UserOAuth = Depends(
|
|
149
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
150
150
|
db: AsyncSession = Depends(get_async_db),
|
|
151
151
|
) -> TaskGroupActivityV2Read:
|
|
152
152
|
"""
|
|
@@ -247,7 +247,7 @@ async def delete_task_group(
|
|
|
247
247
|
task_group_id: int,
|
|
248
248
|
background_tasks: BackgroundTasks,
|
|
249
249
|
response: Response,
|
|
250
|
-
superuser: UserOAuth = Depends(
|
|
250
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
251
251
|
db: AsyncSession = Depends(get_async_db),
|
|
252
252
|
):
|
|
253
253
|
task_group = await _get_task_group_or_404(
|
|
@@ -6,7 +6,7 @@ from fastapi import Depends
|
|
|
6
6
|
|
|
7
7
|
import fractal_server
|
|
8
8
|
from fractal_server.app.models import UserOAuth
|
|
9
|
-
from fractal_server.app.routes.auth import
|
|
9
|
+
from fractal_server.app.routes.auth import current_superuser_act
|
|
10
10
|
from fractal_server.config import get_db_settings
|
|
11
11
|
from fractal_server.config import get_email_settings
|
|
12
12
|
from fractal_server.config import get_oauth_settings
|
|
@@ -26,7 +26,7 @@ async def alive():
|
|
|
26
26
|
|
|
27
27
|
@router_api.get("/settings/app/")
|
|
28
28
|
async def view_settings(
|
|
29
|
-
user: UserOAuth = Depends(
|
|
29
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
30
30
|
):
|
|
31
31
|
settings = Inject(get_settings)
|
|
32
32
|
return settings.model_dump()
|
|
@@ -34,7 +34,7 @@ async def view_settings(
|
|
|
34
34
|
|
|
35
35
|
@router_api.get("/settings/database/")
|
|
36
36
|
async def view_db_settings(
|
|
37
|
-
user: UserOAuth = Depends(
|
|
37
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
38
38
|
):
|
|
39
39
|
settings = Inject(get_db_settings)
|
|
40
40
|
return settings.model_dump()
|
|
@@ -42,7 +42,7 @@ async def view_db_settings(
|
|
|
42
42
|
|
|
43
43
|
@router_api.get("/settings/email/")
|
|
44
44
|
async def view_email_settings(
|
|
45
|
-
user: UserOAuth = Depends(
|
|
45
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
46
46
|
):
|
|
47
47
|
settings = Inject(get_email_settings)
|
|
48
48
|
return settings.model_dump()
|
|
@@ -50,7 +50,7 @@ async def view_email_settings(
|
|
|
50
50
|
|
|
51
51
|
@router_api.get("/settings/oauth/")
|
|
52
52
|
async def view_oauth_settings(
|
|
53
|
-
user: UserOAuth = Depends(
|
|
53
|
+
user: UserOAuth = Depends(current_superuser_act),
|
|
54
54
|
):
|
|
55
55
|
settings = Inject(get_oauth_settings)
|
|
56
56
|
return settings.model_dump()
|
|
@@ -19,7 +19,7 @@ from ._aux_functions import _get_dataset_check_owner
|
|
|
19
19
|
from ._aux_functions import _get_project_check_owner
|
|
20
20
|
from ._aux_functions import _get_submitted_jobs_statement
|
|
21
21
|
from fractal_server.app.models import UserOAuth
|
|
22
|
-
from fractal_server.app.routes.auth import
|
|
22
|
+
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
23
23
|
from fractal_server.string_tools import sanitize_string
|
|
24
24
|
from fractal_server.urls import normalize_url
|
|
25
25
|
|
|
@@ -34,7 +34,7 @@ router = APIRouter()
|
|
|
34
34
|
async def create_dataset(
|
|
35
35
|
project_id: int,
|
|
36
36
|
dataset: DatasetCreateV2,
|
|
37
|
-
user: UserOAuth = Depends(
|
|
37
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
38
38
|
db: AsyncSession = Depends(get_async_db),
|
|
39
39
|
) -> DatasetReadV2 | None:
|
|
40
40
|
"""
|
|
@@ -45,15 +45,6 @@ async def create_dataset(
|
|
|
45
45
|
)
|
|
46
46
|
|
|
47
47
|
if dataset.zarr_dir is None:
|
|
48
|
-
if user.settings.project_dir is None:
|
|
49
|
-
raise HTTPException(
|
|
50
|
-
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
51
|
-
detail=(
|
|
52
|
-
"Both 'dataset.zarr_dir' and 'user.settings.project_dir' "
|
|
53
|
-
"are null"
|
|
54
|
-
),
|
|
55
|
-
)
|
|
56
|
-
|
|
57
48
|
db_dataset = DatasetV2(
|
|
58
49
|
project_id=project_id,
|
|
59
50
|
zarr_dir="__PLACEHOLDER__",
|
|
@@ -63,7 +54,7 @@ async def create_dataset(
|
|
|
63
54
|
await db.commit()
|
|
64
55
|
await db.refresh(db_dataset)
|
|
65
56
|
path = (
|
|
66
|
-
f"{user.
|
|
57
|
+
f"{user.project_dir}/fractal/"
|
|
67
58
|
f"{project_id}_{sanitize_string(project.name)}/"
|
|
68
59
|
f"{db_dataset.id}_{sanitize_string(db_dataset.name)}"
|
|
69
60
|
)
|
|
@@ -88,7 +79,7 @@ async def create_dataset(
|
|
|
88
79
|
)
|
|
89
80
|
async def read_dataset_list(
|
|
90
81
|
project_id: int,
|
|
91
|
-
user: UserOAuth = Depends(
|
|
82
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
92
83
|
db: AsyncSession = Depends(get_async_db),
|
|
93
84
|
) -> list[DatasetReadV2] | None:
|
|
94
85
|
"""
|
|
@@ -116,7 +107,7 @@ async def read_dataset_list(
|
|
|
116
107
|
async def read_dataset(
|
|
117
108
|
project_id: int,
|
|
118
109
|
dataset_id: int,
|
|
119
|
-
user: UserOAuth = Depends(
|
|
110
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
120
111
|
db: AsyncSession = Depends(get_async_db),
|
|
121
112
|
) -> DatasetReadV2 | None:
|
|
122
113
|
"""
|
|
@@ -141,7 +132,7 @@ async def update_dataset(
|
|
|
141
132
|
project_id: int,
|
|
142
133
|
dataset_id: int,
|
|
143
134
|
dataset_update: DatasetUpdateV2,
|
|
144
|
-
user: UserOAuth = Depends(
|
|
135
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
145
136
|
db: AsyncSession = Depends(get_async_db),
|
|
146
137
|
) -> DatasetReadV2 | None:
|
|
147
138
|
"""
|
|
@@ -181,7 +172,7 @@ async def update_dataset(
|
|
|
181
172
|
async def delete_dataset(
|
|
182
173
|
project_id: int,
|
|
183
174
|
dataset_id: int,
|
|
184
|
-
user: UserOAuth = Depends(
|
|
175
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
185
176
|
db: AsyncSession = Depends(get_async_db),
|
|
186
177
|
) -> Response:
|
|
187
178
|
"""
|
|
@@ -219,7 +210,7 @@ async def delete_dataset(
|
|
|
219
210
|
|
|
220
211
|
@router.get("/dataset/", response_model=list[DatasetReadV2])
|
|
221
212
|
async def get_user_datasets(
|
|
222
|
-
user: UserOAuth = Depends(
|
|
213
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
223
214
|
db: AsyncSession = Depends(get_async_db),
|
|
224
215
|
) -> list[DatasetReadV2]:
|
|
225
216
|
"""
|
|
@@ -243,7 +234,7 @@ async def get_user_datasets(
|
|
|
243
234
|
async def export_dataset(
|
|
244
235
|
project_id: int,
|
|
245
236
|
dataset_id: int,
|
|
246
|
-
user: UserOAuth = Depends(
|
|
237
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
247
238
|
db: AsyncSession = Depends(get_async_db),
|
|
248
239
|
) -> DatasetExportV2 | None:
|
|
249
240
|
"""
|
|
@@ -270,7 +261,7 @@ async def export_dataset(
|
|
|
270
261
|
async def import_dataset(
|
|
271
262
|
project_id: int,
|
|
272
263
|
dataset: DatasetImportV2,
|
|
273
|
-
user: UserOAuth = Depends(
|
|
264
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
274
265
|
db: AsyncSession = Depends(get_async_db),
|
|
275
266
|
) -> DatasetReadV2 | None:
|
|
276
267
|
"""
|
|
@@ -23,7 +23,7 @@ from fractal_server.app.models.v2 import HistoryImageCache
|
|
|
23
23
|
from fractal_server.app.models.v2 import HistoryRun
|
|
24
24
|
from fractal_server.app.models.v2 import HistoryUnit
|
|
25
25
|
from fractal_server.app.models.v2 import TaskV2
|
|
26
|
-
from fractal_server.app.routes.auth import
|
|
26
|
+
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
27
27
|
from fractal_server.app.routes.pagination import get_pagination_params
|
|
28
28
|
from fractal_server.app.routes.pagination import PaginationRequest
|
|
29
29
|
from fractal_server.app.routes.pagination import PaginationResponse
|
|
@@ -68,7 +68,7 @@ async def get_workflow_tasks_statuses(
|
|
|
68
68
|
project_id: int,
|
|
69
69
|
dataset_id: int,
|
|
70
70
|
workflow_id: int,
|
|
71
|
-
user: UserOAuth = Depends(
|
|
71
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
72
72
|
db: AsyncSession = Depends(get_async_db),
|
|
73
73
|
) -> JSONResponse:
|
|
74
74
|
# Access control
|
|
@@ -179,7 +179,7 @@ async def get_history_run_list(
|
|
|
179
179
|
project_id: int,
|
|
180
180
|
dataset_id: int,
|
|
181
181
|
workflowtask_id: int,
|
|
182
|
-
user: UserOAuth = Depends(
|
|
182
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
183
183
|
db: AsyncSession = Depends(get_async_db),
|
|
184
184
|
) -> list[HistoryRunReadAggregated]:
|
|
185
185
|
# Access control
|
|
@@ -271,7 +271,7 @@ async def get_history_run_units(
|
|
|
271
271
|
workflowtask_id: int,
|
|
272
272
|
history_run_id: int,
|
|
273
273
|
unit_status: HistoryUnitStatus | None = None,
|
|
274
|
-
user: UserOAuth = Depends(
|
|
274
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
275
275
|
db: AsyncSession = Depends(get_async_db),
|
|
276
276
|
pagination: PaginationRequest = Depends(get_pagination_params),
|
|
277
277
|
) -> PaginationResponse[HistoryUnitRead]:
|
|
@@ -330,7 +330,7 @@ async def get_history_images(
|
|
|
330
330
|
dataset_id: int,
|
|
331
331
|
workflowtask_id: int,
|
|
332
332
|
request_body: ImageQuery,
|
|
333
|
-
user: UserOAuth = Depends(
|
|
333
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
334
334
|
db: AsyncSession = Depends(get_async_db),
|
|
335
335
|
pagination: PaginationRequest = Depends(get_pagination_params),
|
|
336
336
|
) -> ImagePage:
|
|
@@ -412,7 +412,7 @@ async def get_history_images(
|
|
|
412
412
|
async def get_image_log(
|
|
413
413
|
project_id: int,
|
|
414
414
|
request_data: ImageLogsRequest,
|
|
415
|
-
user: UserOAuth = Depends(
|
|
415
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
416
416
|
db: AsyncSession = Depends(get_async_db),
|
|
417
417
|
) -> JSONResponse:
|
|
418
418
|
# Access control
|
|
@@ -460,7 +460,7 @@ async def get_history_unit_log(
|
|
|
460
460
|
history_unit_id: int,
|
|
461
461
|
workflowtask_id: int,
|
|
462
462
|
dataset_id: int,
|
|
463
|
-
user: UserOAuth = Depends(
|
|
463
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
464
464
|
db: AsyncSession = Depends(get_async_db),
|
|
465
465
|
) -> JSONResponse:
|
|
466
466
|
# Access control
|
|
@@ -508,7 +508,7 @@ async def get_history_unit_log(
|
|
|
508
508
|
async def get_dataset_history(
|
|
509
509
|
project_id: int,
|
|
510
510
|
dataset_id: int,
|
|
511
|
-
user: UserOAuth = Depends(
|
|
511
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
512
512
|
db: AsyncSession = Depends(get_async_db),
|
|
513
513
|
) -> list[HistoryRunRead]:
|
|
514
514
|
"""
|
|
@@ -13,7 +13,7 @@ from fractal_server.app.db import AsyncSession
|
|
|
13
13
|
from fractal_server.app.db import get_async_db
|
|
14
14
|
from fractal_server.app.models import HistoryImageCache
|
|
15
15
|
from fractal_server.app.models import UserOAuth
|
|
16
|
-
from fractal_server.app.routes.auth import
|
|
16
|
+
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
17
17
|
from fractal_server.app.routes.pagination import get_pagination_params
|
|
18
18
|
from fractal_server.app.routes.pagination import PaginationRequest
|
|
19
19
|
from fractal_server.app.routes.pagination import PaginationResponse
|
|
@@ -60,7 +60,7 @@ async def post_new_image(
|
|
|
60
60
|
project_id: int,
|
|
61
61
|
dataset_id: int,
|
|
62
62
|
new_image: SingleImage,
|
|
63
|
-
user: UserOAuth = Depends(
|
|
63
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
64
64
|
db: AsyncSession = Depends(get_async_db),
|
|
65
65
|
) -> Response:
|
|
66
66
|
output = await _get_dataset_check_owner(
|
|
@@ -112,7 +112,7 @@ async def query_dataset_images(
|
|
|
112
112
|
dataset_id: int,
|
|
113
113
|
query: ImageQueryWithZarrUrl | None = None,
|
|
114
114
|
pagination: PaginationRequest = Depends(get_pagination_params),
|
|
115
|
-
user: UserOAuth = Depends(
|
|
115
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
116
116
|
db: AsyncSession = Depends(get_async_db),
|
|
117
117
|
) -> ImagePage:
|
|
118
118
|
page = pagination.page
|
|
@@ -183,7 +183,7 @@ async def delete_dataset_images(
|
|
|
183
183
|
project_id: int,
|
|
184
184
|
dataset_id: int,
|
|
185
185
|
zarr_url: str,
|
|
186
|
-
user: UserOAuth = Depends(
|
|
186
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
187
187
|
db: AsyncSession = Depends(get_async_db),
|
|
188
188
|
) -> Response:
|
|
189
189
|
output = await _get_dataset_check_owner(
|
|
@@ -227,7 +227,7 @@ async def patch_dataset_image(
|
|
|
227
227
|
project_id: int,
|
|
228
228
|
dataset_id: int,
|
|
229
229
|
image_update: SingleImageUpdate,
|
|
230
|
-
user: UserOAuth = Depends(
|
|
230
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
231
231
|
db: AsyncSession = Depends(get_async_db),
|
|
232
232
|
):
|
|
233
233
|
output = await _get_dataset_check_owner(
|
|
@@ -23,7 +23,7 @@ from ._aux_functions import _get_job_check_owner
|
|
|
23
23
|
from ._aux_functions import _get_project_check_owner
|
|
24
24
|
from ._aux_functions import _get_workflow_check_owner
|
|
25
25
|
from fractal_server.app.models import UserOAuth
|
|
26
|
-
from fractal_server.app.routes.auth import
|
|
26
|
+
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
27
27
|
from fractal_server.runner.filenames import WORKFLOW_LOG_FILENAME
|
|
28
28
|
|
|
29
29
|
|
|
@@ -39,7 +39,7 @@ router = APIRouter()
|
|
|
39
39
|
|
|
40
40
|
@router.get("/job/", response_model=list[JobReadV2])
|
|
41
41
|
async def get_user_jobs(
|
|
42
|
-
user: UserOAuth = Depends(
|
|
42
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
43
43
|
log: bool = True,
|
|
44
44
|
db: AsyncSession = Depends(get_async_db),
|
|
45
45
|
) -> list[JobReadV2]:
|
|
@@ -68,7 +68,7 @@ async def get_user_jobs(
|
|
|
68
68
|
async def get_workflow_jobs(
|
|
69
69
|
project_id: int,
|
|
70
70
|
workflow_id: int,
|
|
71
|
-
user: UserOAuth = Depends(
|
|
71
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
72
72
|
db: AsyncSession = Depends(get_async_db),
|
|
73
73
|
) -> list[JobReadV2] | None:
|
|
74
74
|
"""
|
|
@@ -88,7 +88,7 @@ async def get_latest_job(
|
|
|
88
88
|
project_id: int,
|
|
89
89
|
workflow_id: int,
|
|
90
90
|
dataset_id: int,
|
|
91
|
-
user: UserOAuth = Depends(
|
|
91
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
92
92
|
db: AsyncSession = Depends(get_async_db),
|
|
93
93
|
) -> JobReadV2:
|
|
94
94
|
await _get_workflow_check_owner(
|
|
@@ -120,7 +120,7 @@ async def read_job(
|
|
|
120
120
|
project_id: int,
|
|
121
121
|
job_id: int,
|
|
122
122
|
show_tmp_logs: bool = False,
|
|
123
|
-
user: UserOAuth = Depends(
|
|
123
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
124
124
|
db: AsyncSession = Depends(get_async_db),
|
|
125
125
|
) -> JobReadV2 | None:
|
|
126
126
|
"""
|
|
@@ -153,7 +153,7 @@ async def read_job(
|
|
|
153
153
|
async def download_job_logs(
|
|
154
154
|
project_id: int,
|
|
155
155
|
job_id: int,
|
|
156
|
-
user: UserOAuth = Depends(
|
|
156
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
157
157
|
db: AsyncSession = Depends(get_async_db),
|
|
158
158
|
) -> StreamingResponse:
|
|
159
159
|
"""
|
|
@@ -183,7 +183,7 @@ async def download_job_logs(
|
|
|
183
183
|
)
|
|
184
184
|
async def get_job_list(
|
|
185
185
|
project_id: int,
|
|
186
|
-
user: UserOAuth = Depends(
|
|
186
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
187
187
|
log: bool = True,
|
|
188
188
|
db: AsyncSession = Depends(get_async_db),
|
|
189
189
|
) -> list[JobReadV2] | None:
|
|
@@ -212,7 +212,7 @@ async def get_job_list(
|
|
|
212
212
|
async def stop_job(
|
|
213
213
|
project_id: int,
|
|
214
214
|
job_id: int,
|
|
215
|
-
user: UserOAuth = Depends(
|
|
215
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
216
216
|
db: AsyncSession = Depends(get_async_db),
|
|
217
217
|
) -> Response:
|
|
218
218
|
"""
|
|
@@ -11,7 +11,7 @@ from .images import ImageQuery
|
|
|
11
11
|
from fractal_server.app.db import AsyncSession
|
|
12
12
|
from fractal_server.app.db import get_async_db
|
|
13
13
|
from fractal_server.app.models import UserOAuth
|
|
14
|
-
from fractal_server.app.routes.auth import
|
|
14
|
+
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
15
15
|
from fractal_server.app.schemas.v2 import HistoryUnitStatus
|
|
16
16
|
from fractal_server.app.schemas.v2 import TaskType
|
|
17
17
|
from fractal_server.images.status_tools import enrich_images_unsorted_async
|
|
@@ -32,7 +32,7 @@ async def verify_unique_types(
|
|
|
32
32
|
dataset_id: int,
|
|
33
33
|
workflowtask_id: int,
|
|
34
34
|
query: ImageQuery | None = None,
|
|
35
|
-
user: UserOAuth = Depends(
|
|
35
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
36
36
|
db: AsyncSession = Depends(get_async_db),
|
|
37
37
|
) -> list[str]:
|
|
38
38
|
# Get dataset
|
|
@@ -93,7 +93,7 @@ async def check_non_processed_images(
|
|
|
93
93
|
workflow_id: int,
|
|
94
94
|
workflowtask_id: int,
|
|
95
95
|
filters: NonProcessedImagesPayload,
|
|
96
|
-
user: UserOAuth = Depends(
|
|
96
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
97
97
|
db: AsyncSession = Depends(get_async_db),
|
|
98
98
|
) -> JSONResponse:
|
|
99
99
|
db_workflow_task, db_workflow = await _get_workflow_task_check_owner(
|
|
@@ -20,14 +20,14 @@ from ._aux_functions import _get_project_check_owner
|
|
|
20
20
|
from ._aux_functions import _get_resource_and_profile_ids
|
|
21
21
|
from ._aux_functions import _get_submitted_jobs_statement
|
|
22
22
|
from fractal_server.app.models import UserOAuth
|
|
23
|
-
from fractal_server.app.routes.auth import
|
|
23
|
+
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
24
24
|
|
|
25
25
|
router = APIRouter()
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
@router.get("/project/", response_model=list[ProjectReadV2])
|
|
29
29
|
async def get_list_project(
|
|
30
|
-
user: UserOAuth = Depends(
|
|
30
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
31
31
|
db: AsyncSession = Depends(get_async_db),
|
|
32
32
|
) -> list[ProjectV2]:
|
|
33
33
|
"""
|
|
@@ -47,7 +47,7 @@ async def get_list_project(
|
|
|
47
47
|
@router.post("/project/", response_model=ProjectReadV2, status_code=201)
|
|
48
48
|
async def create_project(
|
|
49
49
|
project: ProjectCreateV2,
|
|
50
|
-
user: UserOAuth = Depends(
|
|
50
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
51
51
|
db: AsyncSession = Depends(get_async_db),
|
|
52
52
|
) -> ProjectReadV2 | None:
|
|
53
53
|
"""
|
|
@@ -76,7 +76,7 @@ async def create_project(
|
|
|
76
76
|
@router.get("/project/{project_id}/", response_model=ProjectReadV2)
|
|
77
77
|
async def read_project(
|
|
78
78
|
project_id: int,
|
|
79
|
-
user: UserOAuth = Depends(
|
|
79
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
80
80
|
db: AsyncSession = Depends(get_async_db),
|
|
81
81
|
) -> ProjectReadV2 | None:
|
|
82
82
|
"""
|
|
@@ -93,7 +93,7 @@ async def read_project(
|
|
|
93
93
|
async def update_project(
|
|
94
94
|
project_id: int,
|
|
95
95
|
project_update: ProjectUpdateV2,
|
|
96
|
-
user: UserOAuth = Depends(
|
|
96
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
97
97
|
db: AsyncSession = Depends(get_async_db),
|
|
98
98
|
):
|
|
99
99
|
project = await _get_project_check_owner(
|
|
@@ -118,7 +118,7 @@ async def update_project(
|
|
|
118
118
|
@router.delete("/project/{project_id}/", status_code=204)
|
|
119
119
|
async def delete_project(
|
|
120
120
|
project_id: int,
|
|
121
|
-
user: UserOAuth = Depends(
|
|
121
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
122
122
|
db: AsyncSession = Depends(get_async_db),
|
|
123
123
|
) -> Response:
|
|
124
124
|
"""
|
|
@@ -13,7 +13,7 @@ from ._aux_functions import _get_dataset_check_owner
|
|
|
13
13
|
from ._aux_functions import _get_submitted_jobs_statement
|
|
14
14
|
from ._aux_functions import _get_workflow_check_owner
|
|
15
15
|
from fractal_server.app.models import UserOAuth
|
|
16
|
-
from fractal_server.app.routes.auth import
|
|
16
|
+
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
17
17
|
|
|
18
18
|
router = APIRouter()
|
|
19
19
|
|
|
@@ -28,7 +28,7 @@ async def get_workflowtask_status(
|
|
|
28
28
|
project_id: int,
|
|
29
29
|
dataset_id: int,
|
|
30
30
|
workflow_id: int,
|
|
31
|
-
user: UserOAuth = Depends(
|
|
31
|
+
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
32
32
|
db: AsyncSession = Depends(get_async_db),
|
|
33
33
|
) -> LegacyStatusReadV2 | None:
|
|
34
34
|
"""
|