fractal-server 2.18.0a4__py3-none-any.whl → 2.18.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 (80) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/app/models/v2/job.py +13 -2
  3. fractal_server/app/models/v2/resource.py +13 -0
  4. fractal_server/app/routes/admin/v2/__init__.py +10 -12
  5. fractal_server/app/routes/admin/v2/job.py +15 -15
  6. fractal_server/app/routes/admin/v2/task.py +7 -7
  7. fractal_server/app/routes/admin/v2/task_group.py +11 -11
  8. fractal_server/app/routes/admin/v2/task_group_lifecycle.py +20 -20
  9. fractal_server/app/routes/api/v2/__init__.py +47 -49
  10. fractal_server/app/routes/api/v2/_aux_functions.py +22 -47
  11. fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +4 -4
  12. fractal_server/app/routes/api/v2/_aux_functions_tasks.py +2 -2
  13. fractal_server/app/routes/api/v2/dataset.py +63 -73
  14. fractal_server/app/routes/api/v2/history.py +7 -5
  15. fractal_server/app/routes/api/v2/job.py +12 -12
  16. fractal_server/app/routes/api/v2/project.py +11 -11
  17. fractal_server/app/routes/api/v2/status_legacy.py +15 -29
  18. fractal_server/app/routes/api/v2/submit.py +65 -66
  19. fractal_server/app/routes/api/v2/task.py +15 -17
  20. fractal_server/app/routes/api/v2/task_collection.py +18 -18
  21. fractal_server/app/routes/api/v2/task_collection_custom.py +11 -13
  22. fractal_server/app/routes/api/v2/task_collection_pixi.py +9 -9
  23. fractal_server/app/routes/api/v2/task_group.py +18 -18
  24. fractal_server/app/routes/api/v2/task_group_lifecycle.py +26 -26
  25. fractal_server/app/routes/api/v2/task_version_update.py +5 -5
  26. fractal_server/app/routes/api/v2/workflow.py +18 -18
  27. fractal_server/app/routes/api/v2/workflow_import.py +11 -11
  28. fractal_server/app/routes/api/v2/workflowtask.py +10 -10
  29. fractal_server/app/routes/auth/_aux_auth.py +99 -0
  30. fractal_server/app/routes/auth/users.py +9 -0
  31. fractal_server/app/schemas/user.py +1 -1
  32. fractal_server/app/schemas/v2/__init__.py +48 -48
  33. fractal_server/app/schemas/v2/dataset.py +25 -13
  34. fractal_server/app/schemas/v2/dumps.py +9 -9
  35. fractal_server/app/schemas/v2/job.py +11 -11
  36. fractal_server/app/schemas/v2/project.py +3 -3
  37. fractal_server/app/schemas/v2/resource.py +13 -4
  38. fractal_server/app/schemas/v2/status_legacy.py +3 -3
  39. fractal_server/app/schemas/v2/task.py +6 -6
  40. fractal_server/app/schemas/v2/task_collection.py +4 -4
  41. fractal_server/app/schemas/v2/task_group.py +16 -16
  42. fractal_server/app/schemas/v2/workflow.py +16 -16
  43. fractal_server/app/schemas/v2/workflowtask.py +14 -14
  44. fractal_server/app/shutdown.py +6 -6
  45. fractal_server/config/_main.py +1 -1
  46. fractal_server/data_migrations/2_18_0.py +2 -1
  47. fractal_server/main.py +8 -12
  48. fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +39 -0
  49. fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +40 -0
  50. fractal_server/runner/v2/_local.py +3 -2
  51. fractal_server/runner/v2/_slurm_ssh.py +3 -2
  52. fractal_server/runner/v2/_slurm_sudo.py +3 -2
  53. fractal_server/runner/v2/runner.py +36 -17
  54. fractal_server/runner/v2/runner_functions.py +11 -14
  55. fractal_server/runner/v2/submit_workflow.py +22 -9
  56. fractal_server/tasks/v2/local/_utils.py +2 -2
  57. fractal_server/tasks/v2/local/collect.py +5 -6
  58. fractal_server/tasks/v2/local/collect_pixi.py +5 -6
  59. fractal_server/tasks/v2/local/deactivate.py +7 -7
  60. fractal_server/tasks/v2/local/deactivate_pixi.py +3 -3
  61. fractal_server/tasks/v2/local/delete.py +5 -5
  62. fractal_server/tasks/v2/local/reactivate.py +5 -5
  63. fractal_server/tasks/v2/local/reactivate_pixi.py +5 -5
  64. fractal_server/tasks/v2/ssh/collect.py +5 -5
  65. fractal_server/tasks/v2/ssh/collect_pixi.py +5 -5
  66. fractal_server/tasks/v2/ssh/deactivate.py +7 -7
  67. fractal_server/tasks/v2/ssh/deactivate_pixi.py +2 -2
  68. fractal_server/tasks/v2/ssh/delete.py +5 -5
  69. fractal_server/tasks/v2/ssh/reactivate.py +5 -5
  70. fractal_server/tasks/v2/ssh/reactivate_pixi.py +5 -5
  71. fractal_server/tasks/v2/utils_background.py +7 -7
  72. fractal_server/tasks/v2/utils_database.py +5 -5
  73. fractal_server/types/__init__.py +13 -4
  74. fractal_server/types/validators/__init__.py +3 -1
  75. fractal_server/types/validators/_common_validators.py +23 -1
  76. {fractal_server-2.18.0a4.dist-info → fractal_server-2.18.0a5.dist-info}/METADATA +1 -1
  77. {fractal_server-2.18.0a4.dist-info → fractal_server-2.18.0a5.dist-info}/RECORD +80 -78
  78. {fractal_server-2.18.0a4.dist-info → fractal_server-2.18.0a5.dist-info}/WHEEL +0 -0
  79. {fractal_server-2.18.0a4.dist-info → fractal_server-2.18.0a5.dist-info}/entry_points.txt +0 -0
  80. {fractal_server-2.18.0a4.dist-info → fractal_server-2.18.0a5.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
1
- __VERSION__ = "2.18.0a4"
1
+ __VERSION__ = "2.18.0a5"
@@ -6,9 +6,11 @@ from sqlalchemy import Column
6
6
  from sqlalchemy.dialects.postgresql import JSONB
7
7
  from sqlalchemy.types import DateTime
8
8
  from sqlmodel import Field
9
+ from sqlmodel import Index
9
10
  from sqlmodel import SQLModel
11
+ from sqlmodel import text
10
12
 
11
- from fractal_server.app.schemas.v2 import JobStatusTypeV2
13
+ from fractal_server.app.schemas.v2 import JobStatusType
12
14
  from fractal_server.utils import get_timestamp
13
15
 
14
16
 
@@ -56,7 +58,7 @@ class JobV2(SQLModel, table=True):
56
58
  end_timestamp: datetime | None = Field(
57
59
  default=None, sa_column=Column(DateTime(timezone=True))
58
60
  )
59
- status: str = JobStatusTypeV2.SUBMITTED
61
+ status: str = JobStatusType.SUBMITTED
60
62
  log: str | None = None
61
63
  executor_error_log: str | None = None
62
64
 
@@ -66,3 +68,12 @@ class JobV2(SQLModel, table=True):
66
68
  type_filters: dict[str, bool] = Field(
67
69
  sa_column=Column(JSONB, nullable=False, server_default="{}")
68
70
  )
71
+
72
+ __table_args__ = (
73
+ Index(
74
+ "ix_jobv2_one_submitted_job_per_dataset",
75
+ "dataset_id",
76
+ unique=True,
77
+ postgresql_where=text(f"status = '{JobStatusType.SUBMITTED}'"),
78
+ ),
79
+ )
@@ -5,6 +5,7 @@ from typing import Self
5
5
  from sqlalchemy import Column
6
6
  from sqlalchemy.dialects.postgresql import JSONB
7
7
  from sqlalchemy.types import DateTime
8
+ from sqlmodel import BOOLEAN
8
9
  from sqlmodel import CheckConstraint
9
10
  from sqlmodel import Field
10
11
  from sqlmodel import SQLModel
@@ -43,6 +44,18 @@ class Resource(SQLModel, table=True):
43
44
  Address for ssh connections, when `type="slurm_ssh"`.
44
45
  """
45
46
 
47
+ prevent_new_submissions: bool = Field(
48
+ sa_column=Column(
49
+ BOOLEAN,
50
+ server_default="false",
51
+ nullable=False,
52
+ ),
53
+ )
54
+ """
55
+ When set to true: Prevent new job submissions and stop execution of
56
+ ongoing jobs as soon as the current task is complete.
57
+ """
58
+
46
59
  jobs_local_dir: str
47
60
  """
48
61
  Base local folder for job subfolders (containing artifacts and logs).
@@ -14,16 +14,14 @@ from .task import router as task_router
14
14
  from .task_group import router as task_group_router
15
15
  from .task_group_lifecycle import router as task_group_lifecycle_router
16
16
 
17
- router_admin_v2 = APIRouter()
17
+ router_admin = APIRouter()
18
18
 
19
- router_admin_v2.include_router(accounting_router, prefix="/accounting")
20
- router_admin_v2.include_router(job_router, prefix="/job")
21
- router_admin_v2.include_router(task_router, prefix="/task")
22
- router_admin_v2.include_router(task_group_router, prefix="/task-group")
23
- router_admin_v2.include_router(
24
- task_group_lifecycle_router, prefix="/task-group"
25
- )
26
- router_admin_v2.include_router(impersonate_router, prefix="/impersonate")
27
- router_admin_v2.include_router(resource_router, prefix="/resource")
28
- router_admin_v2.include_router(profile_router, prefix="/profile")
29
- router_admin_v2.include_router(sharing_router, prefix="/linkuserproject")
19
+ router_admin.include_router(accounting_router, prefix="/accounting")
20
+ router_admin.include_router(job_router, prefix="/job")
21
+ router_admin.include_router(task_router, prefix="/task")
22
+ router_admin.include_router(task_group_router, prefix="/task-group")
23
+ router_admin.include_router(task_group_lifecycle_router, prefix="/task-group")
24
+ router_admin.include_router(impersonate_router, prefix="/impersonate")
25
+ router_admin.include_router(resource_router, prefix="/resource")
26
+ router_admin.include_router(profile_router, prefix="/profile")
27
+ router_admin.include_router(sharing_router, prefix="/linkuserproject")
@@ -24,9 +24,9 @@ from fractal_server.app.routes.pagination import PaginationRequest
24
24
  from fractal_server.app.routes.pagination import PaginationResponse
25
25
  from fractal_server.app.routes.pagination import get_pagination_params
26
26
  from fractal_server.app.schemas.v2 import HistoryUnitStatus
27
- from fractal_server.app.schemas.v2 import JobReadV2
28
- from fractal_server.app.schemas.v2 import JobStatusTypeV2
29
- from fractal_server.app.schemas.v2 import JobUpdateV2
27
+ from fractal_server.app.schemas.v2 import JobRead
28
+ from fractal_server.app.schemas.v2 import JobStatusType
29
+ from fractal_server.app.schemas.v2 import JobUpdate
30
30
  from fractal_server.runner.filenames import WORKFLOW_LOG_FILENAME
31
31
  from fractal_server.utils import get_timestamp
32
32
  from fractal_server.zip_tools import _zip_folder_to_byte_stream_iterator
@@ -34,14 +34,14 @@ from fractal_server.zip_tools import _zip_folder_to_byte_stream_iterator
34
34
  router = APIRouter()
35
35
 
36
36
 
37
- @router.get("/", response_model=PaginationResponse[JobReadV2])
37
+ @router.get("/", response_model=PaginationResponse[JobRead])
38
38
  async def view_job(
39
39
  id: int | None = None,
40
40
  user_id: int | None = None,
41
41
  project_id: int | None = None,
42
42
  dataset_id: int | None = None,
43
43
  workflow_id: int | None = None,
44
- status: JobStatusTypeV2 | None = None,
44
+ status: JobStatusType | None = None,
45
45
  start_timestamp_min: AwareDatetime | None = None,
46
46
  start_timestamp_max: AwareDatetime | None = None,
47
47
  end_timestamp_min: AwareDatetime | None = None,
@@ -50,7 +50,7 @@ async def view_job(
50
50
  pagination: PaginationRequest = Depends(get_pagination_params),
51
51
  user: UserOAuth = Depends(current_superuser_act),
52
52
  db: AsyncSession = Depends(get_async_db),
53
- ) -> PaginationResponse[JobReadV2]:
53
+ ) -> PaginationResponse[JobRead]:
54
54
  """
55
55
  Query `JobV2` table.
56
56
 
@@ -154,13 +154,13 @@ async def view_job(
154
154
  )
155
155
 
156
156
 
157
- @router.get("/{job_id}/", response_model=JobReadV2)
157
+ @router.get("/{job_id}/", response_model=JobRead)
158
158
  async def view_single_job(
159
159
  job_id: int,
160
160
  show_tmp_logs: bool = False,
161
161
  user: UserOAuth = Depends(current_superuser_act),
162
162
  db: AsyncSession = Depends(get_async_db),
163
- ) -> JobReadV2:
163
+ ) -> JobRead:
164
164
  job = await db.get(JobV2, job_id)
165
165
  if not job:
166
166
  raise HTTPException(
@@ -169,7 +169,7 @@ async def view_single_job(
169
169
  )
170
170
  await db.close()
171
171
 
172
- if show_tmp_logs and (job.status == JobStatusTypeV2.SUBMITTED):
172
+ if show_tmp_logs and (job.status == JobStatusType.SUBMITTED):
173
173
  try:
174
174
  with open(f"{job.working_dir}/{WORKFLOW_LOG_FILENAME}") as f:
175
175
  job.log = f.read()
@@ -179,13 +179,13 @@ async def view_single_job(
179
179
  return job
180
180
 
181
181
 
182
- @router.patch("/{job_id}/", response_model=JobReadV2)
182
+ @router.patch("/{job_id}/", response_model=JobRead)
183
183
  async def update_job(
184
- job_update: JobUpdateV2,
184
+ job_update: JobUpdate,
185
185
  job_id: int,
186
186
  user: UserOAuth = Depends(current_superuser_act),
187
187
  db: AsyncSession = Depends(get_async_db),
188
- ) -> JobReadV2 | None:
188
+ ) -> JobRead | None:
189
189
  """
190
190
  Change the status of an existing job.
191
191
 
@@ -198,13 +198,13 @@ async def update_job(
198
198
  status_code=status.HTTP_404_NOT_FOUND,
199
199
  detail=f"Job {job_id} not found",
200
200
  )
201
- if job.status != JobStatusTypeV2.SUBMITTED:
201
+ if job.status != JobStatusType.SUBMITTED:
202
202
  raise HTTPException(
203
203
  status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
204
204
  detail=f"Job {job_id} has status {job.status=} != 'submitted'.",
205
205
  )
206
206
 
207
- if job_update.status != JobStatusTypeV2.FAILED:
207
+ if job_update.status != JobStatusType.FAILED:
208
208
  raise HTTPException(
209
209
  status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
210
210
  detail=f"Cannot set job status to {job_update.status}",
@@ -217,7 +217,7 @@ async def update_job(
217
217
  job,
218
218
  "log",
219
219
  f"{job.log or ''}\nThis job was manually marked as "
220
- f"'{JobStatusTypeV2.FAILED}' by an admin ({timestamp.isoformat()}).",
220
+ f"'{JobStatusType.FAILED}' by an admin ({timestamp.isoformat()}).",
221
221
  )
222
222
 
223
223
  res = await db.execute(
@@ -23,7 +23,7 @@ from fractal_server.app.schemas.v2.task import TaskType
23
23
  router = APIRouter()
24
24
 
25
25
 
26
- class TaskV2Minimal(BaseModel):
26
+ class TaskMinimal(BaseModel):
27
27
  id: int
28
28
  name: str
29
29
  type: str
@@ -39,7 +39,7 @@ class ProjectUser(BaseModel):
39
39
  email: EmailStr
40
40
 
41
41
 
42
- class TaskV2Relationship(BaseModel):
42
+ class TaskRelationship(BaseModel):
43
43
  workflow_id: int
44
44
  workflow_name: str
45
45
  project_id: int
@@ -47,12 +47,12 @@ class TaskV2Relationship(BaseModel):
47
47
  project_users: list[ProjectUser] = Field(default_factory=list)
48
48
 
49
49
 
50
- class TaskV2Info(BaseModel):
51
- task: TaskV2Minimal
52
- relationships: list[TaskV2Relationship]
50
+ class TaskInfo(BaseModel):
51
+ task: TaskMinimal
52
+ relationships: list[TaskRelationship]
53
53
 
54
54
 
55
- @router.get("/", response_model=PaginationResponse[TaskV2Info])
55
+ @router.get("/", response_model=PaginationResponse[TaskInfo])
56
56
  async def query_tasks(
57
57
  id: int | None = None,
58
58
  source: str | None = None,
@@ -66,7 +66,7 @@ async def query_tasks(
66
66
  pagination: PaginationRequest = Depends(get_pagination_params),
67
67
  user: UserOAuth = Depends(current_superuser_act),
68
68
  db: AsyncSession = Depends(get_async_db),
69
- ) -> PaginationResponse[TaskV2Info]:
69
+ ) -> PaginationResponse[TaskInfo]:
70
70
  """
71
71
  Query `TaskV2` and get information about related workflows and projects.
72
72
  """
@@ -20,12 +20,12 @@ from fractal_server.app.routes.auth._aux_auth import (
20
20
  from fractal_server.app.routes.pagination import PaginationRequest
21
21
  from fractal_server.app.routes.pagination import PaginationResponse
22
22
  from fractal_server.app.routes.pagination import get_pagination_params
23
- from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
24
- from fractal_server.app.schemas.v2 import TaskGroupActivityStatusV2
25
- from fractal_server.app.schemas.v2 import TaskGroupActivityV2Read
23
+ from fractal_server.app.schemas.v2 import TaskGroupActivityAction
24
+ from fractal_server.app.schemas.v2 import TaskGroupActivityRead
25
+ from fractal_server.app.schemas.v2 import TaskGroupActivityStatus
26
+ from fractal_server.app.schemas.v2 import TaskGroupOriginEnum
26
27
  from fractal_server.app.schemas.v2 import TaskGroupReadSuperuser
27
- from fractal_server.app.schemas.v2 import TaskGroupUpdateV2
28
- from fractal_server.app.schemas.v2 import TaskGroupV2OriginEnum
28
+ from fractal_server.app.schemas.v2 import TaskGroupUpdate
29
29
  from fractal_server.logger import set_logger
30
30
 
31
31
  router = APIRouter()
@@ -34,20 +34,20 @@ logger = set_logger(__name__)
34
34
 
35
35
 
36
36
  @router.get(
37
- "/activity/", response_model=PaginationResponse[TaskGroupActivityV2Read]
37
+ "/activity/", response_model=PaginationResponse[TaskGroupActivityRead]
38
38
  )
39
39
  async def get_task_group_activity_list(
40
40
  task_group_activity_id: int | None = None,
41
41
  user_id: int | None = None,
42
42
  taskgroupv2_id: int | None = None,
43
43
  pkg_name: str | None = None,
44
- status: TaskGroupActivityStatusV2 | None = None,
45
- action: TaskGroupActivityActionV2 | None = None,
44
+ status: TaskGroupActivityStatus | None = None,
45
+ action: TaskGroupActivityAction | None = None,
46
46
  timestamp_started_min: AwareDatetime | None = None,
47
47
  pagination: PaginationRequest = Depends(get_pagination_params),
48
48
  superuser: UserOAuth = Depends(current_superuser_act),
49
49
  db: AsyncSession = Depends(get_async_db),
50
- ) -> PaginationResponse[TaskGroupActivityV2Read]:
50
+ ) -> PaginationResponse[TaskGroupActivityRead]:
51
51
  # Assign pagination parameters
52
52
  page = pagination.page
53
53
  page_size = pagination.page_size
@@ -127,7 +127,7 @@ async def query_task_group_list(
127
127
  private: bool | None = None,
128
128
  active: bool | None = None,
129
129
  pkg_name: str | None = None,
130
- origin: TaskGroupV2OriginEnum | None = None,
130
+ origin: TaskGroupOriginEnum | None = None,
131
131
  timestamp_last_used_min: AwareDatetime | None = None,
132
132
  timestamp_last_used_max: AwareDatetime | None = None,
133
133
  resource_id: int | None = None,
@@ -217,7 +217,7 @@ async def query_task_group_list(
217
217
  @router.patch("/{task_group_id}/", response_model=TaskGroupReadSuperuser)
218
218
  async def patch_task_group(
219
219
  task_group_id: int,
220
- task_group_update: TaskGroupUpdateV2,
220
+ task_group_update: TaskGroupUpdate,
221
221
  user: UserOAuth = Depends(current_superuser_act),
222
222
  db: AsyncSession = Depends(get_async_db),
223
223
  ) -> list[TaskGroupReadSuperuser]:
@@ -26,10 +26,10 @@ from fractal_server.app.routes.aux.validate_user_profile import (
26
26
  validate_user_profile,
27
27
  )
28
28
  from fractal_server.app.schemas.v2 import ResourceType
29
- from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
30
- from fractal_server.app.schemas.v2 import TaskGroupActivityStatusV2
31
- from fractal_server.app.schemas.v2 import TaskGroupActivityV2Read
32
- from fractal_server.app.schemas.v2 import TaskGroupV2OriginEnum
29
+ from fractal_server.app.schemas.v2 import TaskGroupActivityAction
30
+ from fractal_server.app.schemas.v2 import TaskGroupActivityRead
31
+ from fractal_server.app.schemas.v2 import TaskGroupActivityStatus
32
+ from fractal_server.app.schemas.v2 import TaskGroupOriginEnum
33
33
  from fractal_server.logger import set_logger
34
34
  from fractal_server.tasks.v2.local import deactivate_local
35
35
  from fractal_server.tasks.v2.local import delete_local
@@ -46,7 +46,7 @@ logger = set_logger(__name__)
46
46
 
47
47
  @router.post(
48
48
  "/{task_group_id}/deactivate/",
49
- response_model=TaskGroupActivityV2Read,
49
+ response_model=TaskGroupActivityRead,
50
50
  )
51
51
  async def deactivate_task_group(
52
52
  task_group_id: int,
@@ -54,7 +54,7 @@ async def deactivate_task_group(
54
54
  response: Response,
55
55
  superuser: UserOAuth = Depends(current_superuser_act),
56
56
  db: AsyncSession = Depends(get_async_db),
57
- ) -> TaskGroupActivityV2Read:
57
+ ) -> TaskGroupActivityRead:
58
58
  """
59
59
  Deactivate task-group venv
60
60
  """
@@ -78,13 +78,13 @@ async def deactivate_task_group(
78
78
  await check_no_submitted_job(task_group_id=task_group.id, db=db)
79
79
 
80
80
  # Shortcut for task-group with origin="other"
81
- if task_group.origin == TaskGroupV2OriginEnum.OTHER:
81
+ if task_group.origin == TaskGroupOriginEnum.OTHER:
82
82
  task_group.active = False
83
83
  task_group_activity = TaskGroupActivityV2(
84
84
  user_id=task_group.user_id,
85
85
  taskgroupv2_id=task_group.id,
86
- status=TaskGroupActivityStatusV2.OK,
87
- action=TaskGroupActivityActionV2.DEACTIVATE,
86
+ status=TaskGroupActivityStatus.OK,
87
+ action=TaskGroupActivityAction.DEACTIVATE,
88
88
  pkg_name=task_group.pkg_name,
89
89
  version=(task_group.version or "N/A"),
90
90
  log=(
@@ -103,8 +103,8 @@ async def deactivate_task_group(
103
103
  task_group_activity = TaskGroupActivityV2(
104
104
  user_id=task_group.user_id,
105
105
  taskgroupv2_id=task_group.id,
106
- status=TaskGroupActivityStatusV2.PENDING,
107
- action=TaskGroupActivityActionV2.DEACTIVATE,
106
+ status=TaskGroupActivityStatus.PENDING,
107
+ action=TaskGroupActivityAction.DEACTIVATE,
108
108
  pkg_name=task_group.pkg_name,
109
109
  version=task_group.version,
110
110
  timestamp_started=get_timestamp(),
@@ -140,7 +140,7 @@ async def deactivate_task_group(
140
140
 
141
141
  @router.post(
142
142
  "/{task_group_id}/reactivate/",
143
- response_model=TaskGroupActivityV2Read,
143
+ response_model=TaskGroupActivityRead,
144
144
  )
145
145
  async def reactivate_task_group(
146
146
  task_group_id: int,
@@ -148,7 +148,7 @@ async def reactivate_task_group(
148
148
  response: Response,
149
149
  superuser: UserOAuth = Depends(current_superuser_act),
150
150
  db: AsyncSession = Depends(get_async_db),
151
- ) -> TaskGroupActivityV2Read:
151
+ ) -> TaskGroupActivityRead:
152
152
  """
153
153
  Deactivate task-group venv
154
154
  """
@@ -173,13 +173,13 @@ async def reactivate_task_group(
173
173
  await check_no_submitted_job(task_group_id=task_group.id, db=db)
174
174
 
175
175
  # Shortcut for task-group with origin="other"
176
- if task_group.origin == TaskGroupV2OriginEnum.OTHER:
176
+ if task_group.origin == TaskGroupOriginEnum.OTHER:
177
177
  task_group.active = True
178
178
  task_group_activity = TaskGroupActivityV2(
179
179
  user_id=task_group.user_id,
180
180
  taskgroupv2_id=task_group.id,
181
- status=TaskGroupActivityStatusV2.OK,
182
- action=TaskGroupActivityActionV2.REACTIVATE,
181
+ status=TaskGroupActivityStatus.OK,
182
+ action=TaskGroupActivityAction.REACTIVATE,
183
183
  pkg_name=task_group.pkg_name,
184
184
  version=(task_group.version or "N/A"),
185
185
  log=(
@@ -206,8 +206,8 @@ async def reactivate_task_group(
206
206
  task_group_activity = TaskGroupActivityV2(
207
207
  user_id=task_group.user_id,
208
208
  taskgroupv2_id=task_group.id,
209
- status=TaskGroupActivityStatusV2.PENDING,
210
- action=TaskGroupActivityActionV2.REACTIVATE,
209
+ status=TaskGroupActivityStatus.PENDING,
210
+ action=TaskGroupActivityAction.REACTIVATE,
211
211
  pkg_name=task_group.pkg_name,
212
212
  version=task_group.version,
213
213
  timestamp_started=get_timestamp(),
@@ -259,8 +259,8 @@ async def delete_task_group(
259
259
  task_group_activity = TaskGroupActivityV2(
260
260
  user_id=task_group.user_id,
261
261
  taskgroupv2_id=task_group.id,
262
- status=TaskGroupActivityStatusV2.PENDING,
263
- action=TaskGroupActivityActionV2.DELETE,
262
+ status=TaskGroupActivityStatus.PENDING,
263
+ action=TaskGroupActivityAction.DELETE,
264
264
  pkg_name=task_group.pkg_name,
265
265
  version=(task_group.version or "N/A"),
266
266
  timestamp_started=get_timestamp(),
@@ -7,68 +7,66 @@ from fastapi import APIRouter
7
7
  from fractal_server.config import get_settings
8
8
  from fractal_server.syringe import Inject
9
9
 
10
- from .dataset import router as dataset_router_v2
11
- from .history import router as history_router_v2
12
- from .images import router as images_routes_v2
13
- from .job import router as job_router_v2
10
+ from .dataset import router as dataset_router
11
+ from .history import router as history_router
12
+ from .images import router as images_routes
13
+ from .job import router as job_router
14
14
  from .pre_submission_checks import router as pre_submission_checks_router
15
- from .project import router as project_router_v2
16
- from .sharing import router as sharing_router_v2
17
- from .status_legacy import router as status_legacy_router_v2
18
- from .submit import router as submit_job_router_v2
19
- from .task import router as task_router_v2
20
- from .task_collection import router as task_collection_router_v2
21
- from .task_collection_custom import router as task_collection_router_v2_custom
22
- from .task_collection_pixi import router as task_collection_pixi_router_v2
23
- from .task_group import router as task_group_router_v2
24
- from .task_group_lifecycle import router as task_group_lifecycle_router_v2
25
- from .task_version_update import router as task_version_update_router_v2
26
- from .workflow import router as workflow_router_v2
27
- from .workflow_import import router as workflow_import_router_v2
28
- from .workflowtask import router as workflowtask_router_v2
15
+ from .project import router as project_router
16
+ from .sharing import router as sharing_router
17
+ from .status_legacy import router as status_legacy_router
18
+ from .submit import router as submit_job_router
19
+ from .task import router as task_router
20
+ from .task_collection import router as task_collection_router
21
+ from .task_collection_custom import router as task_collection_router_custom
22
+ from .task_collection_pixi import router as task_collection_pixi_router
23
+ from .task_group import router as task_group_router
24
+ from .task_group_lifecycle import router as task_group_lifecycle_router
25
+ from .task_version_update import router as task_version_update_router
26
+ from .workflow import router as workflow_router
27
+ from .workflow_import import router as workflow_import_router
28
+ from .workflowtask import router as workflowtask_router
29
29
 
30
- router_api_v2 = APIRouter()
30
+ router_api = APIRouter()
31
31
 
32
- router_api_v2.include_router(dataset_router_v2, tags=["V2 Dataset"])
33
- router_api_v2.include_router(pre_submission_checks_router, tags=["V2 Job"])
34
- router_api_v2.include_router(job_router_v2, tags=["V2 Job"])
35
- router_api_v2.include_router(images_routes_v2, tags=["V2 Images"])
36
- router_api_v2.include_router(sharing_router_v2, tags=["Project Sharing"])
37
- router_api_v2.include_router(project_router_v2, tags=["V2 Project"])
38
- router_api_v2.include_router(submit_job_router_v2, tags=["V2 Job"])
39
- router_api_v2.include_router(history_router_v2, tags=["V2 History"])
40
- router_api_v2.include_router(status_legacy_router_v2, tags=["V2 Status Legacy"])
32
+ router_api.include_router(dataset_router, tags=["Dataset"])
33
+ router_api.include_router(pre_submission_checks_router, tags=["Job"])
34
+ router_api.include_router(job_router, tags=["Job"])
35
+ router_api.include_router(images_routes, tags=["Images"])
36
+ router_api.include_router(sharing_router, tags=["Project Sharing"])
37
+ router_api.include_router(project_router, tags=["Project"])
38
+ router_api.include_router(submit_job_router, tags=["Job"])
39
+ router_api.include_router(history_router, tags=["History"])
40
+ router_api.include_router(status_legacy_router, tags=["Status Legacy"])
41
41
 
42
42
 
43
43
  settings = Inject(get_settings)
44
- router_api_v2.include_router(
45
- task_collection_router_v2,
44
+ router_api.include_router(
45
+ task_collection_router,
46
46
  prefix="/task",
47
- tags=["V2 Task Lifecycle"],
47
+ tags=["Task Lifecycle"],
48
48
  )
49
- router_api_v2.include_router(
50
- task_collection_router_v2_custom,
49
+ router_api.include_router(
50
+ task_collection_router_custom,
51
51
  prefix="/task",
52
- tags=["V2 Task Lifecycle"],
52
+ tags=["Task Lifecycle"],
53
53
  )
54
- router_api_v2.include_router(
55
- task_collection_pixi_router_v2,
54
+ router_api.include_router(
55
+ task_collection_pixi_router,
56
56
  prefix="/task",
57
- tags=["V2 Task Lifecycle"],
57
+ tags=["Task Lifecycle"],
58
58
  )
59
- router_api_v2.include_router(
60
- task_group_lifecycle_router_v2,
59
+ router_api.include_router(
60
+ task_group_lifecycle_router,
61
61
  prefix="/task-group",
62
- tags=["V2 Task Lifecycle"],
62
+ tags=["Task Lifecycle"],
63
63
  )
64
64
 
65
- router_api_v2.include_router(task_router_v2, prefix="/task", tags=["V2 Task"])
66
- router_api_v2.include_router(task_version_update_router_v2, tags=["V2 Task"])
67
- router_api_v2.include_router(
68
- task_group_router_v2, prefix="/task-group", tags=["V2 TaskGroup"]
65
+ router_api.include_router(task_router, prefix="/task", tags=["Task"])
66
+ router_api.include_router(task_version_update_router, tags=["Task"])
67
+ router_api.include_router(
68
+ task_group_router, prefix="/task-group", tags=["TaskGroup"]
69
69
  )
70
- router_api_v2.include_router(workflow_router_v2, tags=["V2 Workflow"])
71
- router_api_v2.include_router(
72
- workflow_import_router_v2, tags=["V2 Workflow Import"]
73
- )
74
- router_api_v2.include_router(workflowtask_router_v2, tags=["V2 WorkflowTask"])
70
+ router_api.include_router(workflow_router, tags=["Workflow"])
71
+ router_api.include_router(workflow_import_router, tags=["Workflow Import"])
72
+ router_api.include_router(workflowtask_router, tags=["WorkflowTask"])