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.
Files changed (65) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/__main__.py +137 -120
  3. fractal_server/app/models/security.py +19 -21
  4. fractal_server/app/models/user_settings.py +1 -0
  5. fractal_server/app/models/v2/task_group.py +1 -0
  6. fractal_server/app/routes/admin/v2/accounting.py +3 -3
  7. fractal_server/app/routes/admin/v2/impersonate.py +2 -2
  8. fractal_server/app/routes/admin/v2/job.py +6 -6
  9. fractal_server/app/routes/admin/v2/profile.py +4 -4
  10. fractal_server/app/routes/admin/v2/project.py +2 -2
  11. fractal_server/app/routes/admin/v2/resource.py +42 -8
  12. fractal_server/app/routes/admin/v2/task.py +2 -2
  13. fractal_server/app/routes/admin/v2/task_group.py +5 -5
  14. fractal_server/app/routes/admin/v2/task_group_lifecycle.py +4 -4
  15. fractal_server/app/routes/api/__init__.py +5 -5
  16. fractal_server/app/routes/api/v2/dataset.py +10 -19
  17. fractal_server/app/routes/api/v2/history.py +8 -8
  18. fractal_server/app/routes/api/v2/images.py +5 -5
  19. fractal_server/app/routes/api/v2/job.py +8 -8
  20. fractal_server/app/routes/api/v2/pre_submission_checks.py +3 -3
  21. fractal_server/app/routes/api/v2/project.py +6 -6
  22. fractal_server/app/routes/api/v2/status_legacy.py +2 -2
  23. fractal_server/app/routes/api/v2/submit.py +24 -26
  24. fractal_server/app/routes/api/v2/task.py +6 -7
  25. fractal_server/app/routes/api/v2/task_collection.py +4 -3
  26. fractal_server/app/routes/api/v2/task_collection_custom.py +4 -3
  27. fractal_server/app/routes/api/v2/task_collection_pixi.py +2 -2
  28. fractal_server/app/routes/api/v2/task_group.py +6 -6
  29. fractal_server/app/routes/api/v2/task_group_lifecycle.py +4 -4
  30. fractal_server/app/routes/api/v2/task_version_update.py +3 -3
  31. fractal_server/app/routes/api/v2/workflow.py +9 -9
  32. fractal_server/app/routes/api/v2/workflow_import.py +2 -2
  33. fractal_server/app/routes/api/v2/workflowtask.py +5 -5
  34. fractal_server/app/routes/auth/__init__.py +34 -5
  35. fractal_server/app/routes/auth/current_user.py +22 -67
  36. fractal_server/app/routes/auth/group.py +8 -35
  37. fractal_server/app/routes/auth/register.py +2 -2
  38. fractal_server/app/routes/auth/users.py +5 -46
  39. fractal_server/app/schemas/__init__.py +0 -1
  40. fractal_server/app/schemas/user.py +23 -0
  41. fractal_server/app/schemas/v2/task_group.py +1 -0
  42. fractal_server/app/security/__init__.py +134 -46
  43. fractal_server/app/security/signup_email.py +52 -34
  44. fractal_server/config/__init__.py +1 -7
  45. fractal_server/config/_email.py +10 -47
  46. fractal_server/config/_main.py +14 -3
  47. fractal_server/migrations/versions/f65ee53991e3_user_settings_related.py +67 -0
  48. fractal_server/runner/config/_slurm.py +3 -2
  49. fractal_server/runner/executors/slurm_common/base_slurm_runner.py +2 -2
  50. fractal_server/runner/executors/slurm_common/get_slurm_config.py +1 -1
  51. fractal_server/runner/executors/slurm_common/slurm_config.py +7 -13
  52. fractal_server/runner/executors/slurm_ssh/runner.py +1 -1
  53. fractal_server/runner/executors/slurm_sudo/runner.py +1 -1
  54. fractal_server/runner/v2/_slurm_ssh.py +2 -1
  55. fractal_server/runner/v2/_slurm_sudo.py +1 -1
  56. fractal_server/runner/v2/submit_workflow.py +12 -12
  57. {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/METADATA +1 -2
  58. {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/RECORD +61 -64
  59. fractal_server/app/routes/aux/validate_user_settings.py +0 -76
  60. fractal_server/app/schemas/user_settings.py +0 -63
  61. fractal_server/app/user_settings.py +0 -32
  62. fractal_server/config/_init_data.py +0 -27
  63. {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/WHEEL +0 -0
  64. {fractal_server-2.17.0a3.dist-info → fractal_server-2.17.0a5.dist-info}/entry_points.txt +0 -0
  65. {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.routes.auth import current_active_superuser
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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 current_active_superuser
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(current_active_superuser),
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 current_active_superuser
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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 current_active_superuser
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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 current_active_superuser
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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(current_active_superuser),
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 current_active_user
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(current_active_user),
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.settings.project_dir}/fractal/"
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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 current_active_user
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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 current_active_user
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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 current_active_user
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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 current_active_user
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(current_active_user),
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(current_active_user),
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 current_active_user
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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(current_active_user),
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 current_active_user
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(current_active_user),
31
+ user: UserOAuth = Depends(current_user_act_ver_prof),
32
32
  db: AsyncSession = Depends(get_async_db),
33
33
  ) -> LegacyStatusReadV2 | None:
34
34
  """