fractal-server 2.18.0__py3-none-any.whl → 2.18.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/__main__.py +1 -2
  3. fractal_server/app/models/security.py +5 -7
  4. fractal_server/app/models/v2/job.py +2 -13
  5. fractal_server/app/models/v2/resource.py +0 -13
  6. fractal_server/app/routes/admin/v2/__init__.py +12 -10
  7. fractal_server/app/routes/admin/v2/job.py +15 -15
  8. fractal_server/app/routes/admin/v2/task.py +7 -7
  9. fractal_server/app/routes/admin/v2/task_group.py +12 -14
  10. fractal_server/app/routes/admin/v2/task_group_lifecycle.py +20 -20
  11. fractal_server/app/routes/api/__init__.py +9 -0
  12. fractal_server/app/routes/api/v2/__init__.py +49 -47
  13. fractal_server/app/routes/api/v2/_aux_functions.py +47 -22
  14. fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +4 -4
  15. fractal_server/app/routes/api/v2/_aux_functions_tasks.py +2 -2
  16. fractal_server/app/routes/api/v2/dataset.py +60 -66
  17. fractal_server/app/routes/api/v2/history.py +5 -7
  18. fractal_server/app/routes/api/v2/job.py +12 -12
  19. fractal_server/app/routes/api/v2/project.py +11 -11
  20. fractal_server/app/routes/api/v2/status_legacy.py +29 -15
  21. fractal_server/app/routes/api/v2/submit.py +66 -65
  22. fractal_server/app/routes/api/v2/task.py +17 -15
  23. fractal_server/app/routes/api/v2/task_collection.py +18 -18
  24. fractal_server/app/routes/api/v2/task_collection_custom.py +13 -11
  25. fractal_server/app/routes/api/v2/task_collection_pixi.py +9 -9
  26. fractal_server/app/routes/api/v2/task_group.py +18 -18
  27. fractal_server/app/routes/api/v2/task_group_lifecycle.py +26 -26
  28. fractal_server/app/routes/api/v2/task_version_update.py +5 -5
  29. fractal_server/app/routes/api/v2/workflow.py +18 -18
  30. fractal_server/app/routes/api/v2/workflow_import.py +11 -11
  31. fractal_server/app/routes/api/v2/workflowtask.py +37 -10
  32. fractal_server/app/routes/auth/_aux_auth.py +0 -100
  33. fractal_server/app/routes/auth/current_user.py +63 -0
  34. fractal_server/app/routes/auth/group.py +30 -1
  35. fractal_server/app/routes/auth/router.py +0 -2
  36. fractal_server/app/routes/auth/users.py +0 -9
  37. fractal_server/app/schemas/user.py +12 -29
  38. fractal_server/app/schemas/user_group.py +15 -0
  39. fractal_server/app/schemas/v2/__init__.py +48 -48
  40. fractal_server/app/schemas/v2/dataset.py +13 -35
  41. fractal_server/app/schemas/v2/dumps.py +9 -9
  42. fractal_server/app/schemas/v2/job.py +11 -11
  43. fractal_server/app/schemas/v2/project.py +3 -3
  44. fractal_server/app/schemas/v2/resource.py +4 -13
  45. fractal_server/app/schemas/v2/status_legacy.py +3 -3
  46. fractal_server/app/schemas/v2/task.py +6 -6
  47. fractal_server/app/schemas/v2/task_collection.py +4 -4
  48. fractal_server/app/schemas/v2/task_group.py +16 -16
  49. fractal_server/app/schemas/v2/workflow.py +16 -16
  50. fractal_server/app/schemas/v2/workflowtask.py +14 -14
  51. fractal_server/app/security/__init__.py +1 -1
  52. fractal_server/app/shutdown.py +6 -6
  53. fractal_server/config/__init__.py +6 -0
  54. fractal_server/config/_data.py +79 -0
  55. fractal_server/config/_main.py +1 -6
  56. fractal_server/images/models.py +2 -1
  57. fractal_server/main.py +11 -72
  58. fractal_server/runner/config/_slurm.py +0 -2
  59. fractal_server/runner/executors/slurm_common/slurm_config.py +0 -1
  60. fractal_server/runner/v2/_local.py +3 -4
  61. fractal_server/runner/v2/_slurm_ssh.py +3 -4
  62. fractal_server/runner/v2/_slurm_sudo.py +3 -4
  63. fractal_server/runner/v2/runner.py +17 -36
  64. fractal_server/runner/v2/runner_functions.py +14 -11
  65. fractal_server/runner/v2/submit_workflow.py +9 -22
  66. fractal_server/tasks/v2/local/_utils.py +2 -2
  67. fractal_server/tasks/v2/local/collect.py +6 -5
  68. fractal_server/tasks/v2/local/collect_pixi.py +6 -5
  69. fractal_server/tasks/v2/local/deactivate.py +7 -7
  70. fractal_server/tasks/v2/local/deactivate_pixi.py +3 -3
  71. fractal_server/tasks/v2/local/delete.py +5 -5
  72. fractal_server/tasks/v2/local/reactivate.py +5 -5
  73. fractal_server/tasks/v2/local/reactivate_pixi.py +5 -5
  74. fractal_server/tasks/v2/ssh/collect.py +5 -5
  75. fractal_server/tasks/v2/ssh/collect_pixi.py +5 -5
  76. fractal_server/tasks/v2/ssh/deactivate.py +7 -7
  77. fractal_server/tasks/v2/ssh/deactivate_pixi.py +2 -2
  78. fractal_server/tasks/v2/ssh/delete.py +5 -5
  79. fractal_server/tasks/v2/ssh/reactivate.py +5 -5
  80. fractal_server/tasks/v2/ssh/reactivate_pixi.py +5 -5
  81. fractal_server/tasks/v2/utils_background.py +7 -7
  82. fractal_server/tasks/v2/utils_database.py +5 -5
  83. fractal_server/types/__init__.py +0 -22
  84. fractal_server/types/validators/__init__.py +0 -3
  85. fractal_server/types/validators/_common_validators.py +0 -32
  86. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a1.dist-info}/METADATA +1 -1
  87. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a1.dist-info}/RECORD +90 -95
  88. fractal_server/app/routes/auth/viewer_paths.py +0 -43
  89. fractal_server/data_migrations/2_18_0.py +0 -30
  90. fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py +0 -60
  91. fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +0 -39
  92. fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +0 -40
  93. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a1.dist-info}/WHEEL +0 -0
  94. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a1.dist-info}/entry_points.txt +0 -0
  95. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a1.dist-info}/licenses/LICENSE +0 -0
@@ -13,17 +13,17 @@ from pydantic import ConfigDict
13
13
  from pydantic import Field
14
14
 
15
15
  from .task import TaskType
16
- from .task_group import TaskGroupOriginEnum
16
+ from .task_group import TaskGroupV2OriginEnum
17
17
 
18
18
 
19
- class ProjectDump(BaseModel):
19
+ class ProjectDumpV2(BaseModel):
20
20
  model_config = ConfigDict(extra="forbid")
21
21
  id: int
22
22
  name: str
23
23
  timestamp_created: str
24
24
 
25
25
 
26
- class TaskDump(BaseModel):
26
+ class TaskDumpV2(BaseModel):
27
27
  id: int
28
28
  name: str
29
29
  type: TaskType
@@ -37,7 +37,7 @@ class TaskDump(BaseModel):
37
37
  output_types: dict[str, bool]
38
38
 
39
39
 
40
- class WorkflowTaskDump(BaseModel):
40
+ class WorkflowTaskDumpV2(BaseModel):
41
41
  """
42
42
  We do not include 'model_config = ConfigDict(extra="forbid")'
43
43
  because legacy data may include 'input_filters' field and we want to avoid
@@ -51,10 +51,10 @@ class WorkflowTaskDump(BaseModel):
51
51
  type_filters: dict[str, bool]
52
52
 
53
53
  task_id: int | None = None
54
- task: TaskDump | None = None
54
+ task: TaskDumpV2 | None = None
55
55
 
56
56
 
57
- class WorkflowDump(BaseModel):
57
+ class WorkflowDumpV2(BaseModel):
58
58
  model_config = ConfigDict(extra="forbid")
59
59
  id: int
60
60
  name: str
@@ -62,7 +62,7 @@ class WorkflowDump(BaseModel):
62
62
  timestamp_created: str
63
63
 
64
64
 
65
- class DatasetDump(BaseModel):
65
+ class DatasetDumpV2(BaseModel):
66
66
  """
67
67
  We do not include 'model_config = ConfigDict(extra="forbid")' because
68
68
  legacy data may include 'type_filters' or 'attribute_filters' and we
@@ -76,9 +76,9 @@ class DatasetDump(BaseModel):
76
76
  zarr_dir: str
77
77
 
78
78
 
79
- class TaskGroupDump(BaseModel):
79
+ class TaskGroupDumpV2(BaseModel):
80
80
  id: int
81
- origin: TaskGroupOriginEnum
81
+ origin: TaskGroupV2OriginEnum
82
82
  pkg_name: str
83
83
  version: str | None = None
84
84
  python_version: str | None = None
@@ -10,15 +10,15 @@ from pydantic.types import AwareDatetime
10
10
  from pydantic.types import NonNegativeInt
11
11
  from pydantic.types import StrictStr
12
12
 
13
- from fractal_server.app.schemas.v2.dumps import DatasetDump
14
- from fractal_server.app.schemas.v2.dumps import ProjectDump
15
- from fractal_server.app.schemas.v2.dumps import WorkflowDump
13
+ from fractal_server.app.schemas.v2.dumps import DatasetDumpV2
14
+ from fractal_server.app.schemas.v2.dumps import ProjectDumpV2
15
+ from fractal_server.app.schemas.v2.dumps import WorkflowDumpV2
16
16
  from fractal_server.types import AttributeFilters
17
17
  from fractal_server.types import NonEmptyStr
18
18
  from fractal_server.types import TypeFilters
19
19
 
20
20
 
21
- class JobStatusType(StrEnum):
21
+ class JobStatusTypeV2(StrEnum):
22
22
  """
23
23
  Define the available job statuses
24
24
 
@@ -39,7 +39,7 @@ class JobStatusType(StrEnum):
39
39
  FAILED = "failed"
40
40
 
41
41
 
42
- class JobCreate(BaseModel):
42
+ class JobCreateV2(BaseModel):
43
43
  model_config = ConfigDict(extra="forbid")
44
44
 
45
45
  first_task_index: NonNegativeInt | None = None
@@ -65,16 +65,16 @@ class JobCreate(BaseModel):
65
65
  return values
66
66
 
67
67
 
68
- class JobRead(BaseModel):
68
+ class JobReadV2(BaseModel):
69
69
  id: int
70
70
  project_id: int | None = None
71
- project_dump: ProjectDump
71
+ project_dump: ProjectDumpV2
72
72
  user_email: str
73
73
  slurm_account: str | None = None
74
74
  workflow_id: int | None = None
75
- workflow_dump: WorkflowDump
75
+ workflow_dump: WorkflowDumpV2
76
76
  dataset_id: int | None = None
77
- dataset_dump: DatasetDump
77
+ dataset_dump: DatasetDumpV2
78
78
  start_timestamp: AwareDatetime
79
79
  end_timestamp: AwareDatetime | None = None
80
80
  status: str
@@ -100,7 +100,7 @@ class JobRead(BaseModel):
100
100
  return v.isoformat()
101
101
 
102
102
 
103
- class JobUpdate(BaseModel):
103
+ class JobUpdateV2(BaseModel):
104
104
  model_config = ConfigDict(extra="forbid")
105
105
 
106
- status: JobStatusType
106
+ status: JobStatusTypeV2
@@ -8,13 +8,13 @@ from pydantic.types import AwareDatetime
8
8
  from fractal_server.types import NonEmptyStr
9
9
 
10
10
 
11
- class ProjectCreate(BaseModel):
11
+ class ProjectCreateV2(BaseModel):
12
12
  model_config = ConfigDict(extra="forbid")
13
13
 
14
14
  name: NonEmptyStr
15
15
 
16
16
 
17
- class ProjectRead(BaseModel):
17
+ class ProjectReadV2(BaseModel):
18
18
  id: int
19
19
  name: str
20
20
  timestamp_created: AwareDatetime
@@ -24,7 +24,7 @@ class ProjectRead(BaseModel):
24
24
  return v.isoformat()
25
25
 
26
26
 
27
- class ProjectUpdate(BaseModel):
27
+ class ProjectUpdateV2(BaseModel):
28
28
  model_config = ConfigDict(extra="forbid")
29
29
 
30
30
  name: NonEmptyStr = None
@@ -77,8 +77,6 @@ class ValidResourceBase(BaseModel):
77
77
  jobs_runner_config: dict[NonEmptyStr, Any]
78
78
  jobs_poll_interval: int = 5
79
79
 
80
- prevent_new_submissions: bool = False
81
-
82
80
  @model_validator(mode="after")
83
81
  def _pixi_slurm_config(self) -> Self:
84
82
  if (
@@ -97,9 +95,6 @@ class ValidResourceLocal(ValidResourceBase):
97
95
  Attributes:
98
96
  name: Resource name.
99
97
  type: Resource type.
100
- prevent_new_submissions:
101
- When set to true: Prevent new job submissions and stop execution of
102
- ongoing jobs as soon as the current task is complete.
103
98
  tasks_python_config:
104
99
  Configuration of Python interpreters used for task collection.
105
100
  tasks_pixi_config:
@@ -110,6 +105,7 @@ class ValidResourceLocal(ValidResourceBase):
110
105
  Local base folder for job folders.
111
106
  jobs_runner_config:
112
107
  Runner configuration.
108
+
113
109
  """
114
110
 
115
111
  type: Literal[ResourceType.LOCAL]
@@ -125,9 +121,6 @@ class ValidResourceSlurmSudo(ValidResourceBase):
125
121
  Attributes:
126
122
  name: Resource name.
127
123
  type: Resource type.
128
- prevent_new_submissions:
129
- When set to true: Prevent new job submissions and stop execution of
130
- ongoing jobs as soon as the current task is complete.
131
124
  tasks_python_config:
132
125
  Configuration of Python interpreters used for task collection.
133
126
  tasks_pixi_config:
@@ -157,9 +150,6 @@ class ValidResourceSlurmSSH(ValidResourceBase):
157
150
  Attributes:
158
151
  name: Resource name
159
152
  type: Resource type.
160
- prevent_new_submissions:
161
- When set to true: Prevent new job submissions and stop execution of
162
- ongoing jobs as soon as the current task is complete.
163
153
  tasks_python_config:
164
154
  Configuration of Python interpreters used for task collection.
165
155
  tasks_pixi_config:
@@ -208,9 +198,10 @@ class ResourceRead(BaseModel):
208
198
  """
209
199
 
210
200
  id: int
211
- name: str
201
+
212
202
  type: str
213
- prevent_new_submissions: bool
203
+
204
+ name: str
214
205
  timestamp_created: AwareDatetime
215
206
 
216
207
  host: str | None
@@ -4,7 +4,7 @@ from pydantic import BaseModel
4
4
  from pydantic import Field
5
5
 
6
6
 
7
- class WorkflowTaskStatusType(StrEnum):
7
+ class WorkflowTaskStatusTypeV2(StrEnum):
8
8
  """
9
9
  Define the available values for the status of a `WorkflowTask`.
10
10
 
@@ -23,7 +23,7 @@ class WorkflowTaskStatusType(StrEnum):
23
23
  FAILED = "failed"
24
24
 
25
25
 
26
- class LegacyStatusRead(BaseModel):
26
+ class LegacyStatusReadV2(BaseModel):
27
27
  """
28
28
  Response type for the
29
29
  `/project/{project_id}/status/` endpoint
@@ -31,5 +31,5 @@ class LegacyStatusRead(BaseModel):
31
31
 
32
32
  status: dict[
33
33
  str,
34
- WorkflowTaskStatusType,
34
+ WorkflowTaskStatusTypeV2,
35
35
  ] = Field(default_factory=dict)
@@ -29,7 +29,7 @@ class TaskType(StrEnum):
29
29
  PARALLEL = "parallel"
30
30
 
31
31
 
32
- class TaskCreate(BaseModel):
32
+ class TaskCreateV2(BaseModel):
33
33
  model_config = ConfigDict(extra="forbid")
34
34
 
35
35
  name: NonEmptyStr
@@ -90,7 +90,7 @@ class TaskCreate(BaseModel):
90
90
  return self
91
91
 
92
92
 
93
- class TaskRead(BaseModel):
93
+ class TaskReadV2(BaseModel):
94
94
  id: int
95
95
  name: str
96
96
  type: TaskType
@@ -117,7 +117,7 @@ class TaskRead(BaseModel):
117
117
  tags: list[str]
118
118
 
119
119
 
120
- class TaskUpdate(BaseModel):
120
+ class TaskUpdateV2(BaseModel):
121
121
  model_config = ConfigDict(extra="forbid")
122
122
 
123
123
  command_parallel: NonEmptyStr = None
@@ -131,7 +131,7 @@ class TaskUpdate(BaseModel):
131
131
  tags: ListUniqueNonEmptyString | None = None
132
132
 
133
133
 
134
- class TaskImport(BaseModel):
134
+ class TaskImportV2(BaseModel):
135
135
  model_config = ConfigDict(extra="forbid")
136
136
 
137
137
  pkg_name: NonEmptyStr
@@ -139,11 +139,11 @@ class TaskImport(BaseModel):
139
139
  name: NonEmptyStr
140
140
 
141
141
 
142
- class TaskImportLegacy(BaseModel):
142
+ class TaskImportV2Legacy(BaseModel):
143
143
  source: NonEmptyStr
144
144
 
145
145
 
146
- class TaskExport(BaseModel):
146
+ class TaskExportV2(BaseModel):
147
147
  pkg_name: NonEmptyStr
148
148
  version: NonEmptyStr | None = None
149
149
  name: NonEmptyStr
@@ -21,9 +21,9 @@ class FractalUploadedFile(BaseModel):
21
21
  contents: bytes
22
22
 
23
23
 
24
- class TaskCollectPip(BaseModel):
24
+ class TaskCollectPipV2(BaseModel):
25
25
  """
26
- TaskCollectPip class
26
+ TaskCollectPipV2 class
27
27
 
28
28
  This class only encodes the attributes required to trigger a
29
29
  task-collection operation. Other attributes (that are assigned *during*
@@ -91,7 +91,7 @@ class TaskCollectPip(BaseModel):
91
91
  return value
92
92
 
93
93
 
94
- class TaskCollectCustom(BaseModel):
94
+ class TaskCollectCustomV2(BaseModel):
95
95
  """
96
96
  Attributes:
97
97
  manifest: Manifest of a Fractal task package (this is typically the
@@ -99,7 +99,7 @@ class TaskCollectCustom(BaseModel):
99
99
  python_interpreter: Absolute path to the Python interpreter to be used
100
100
  for running tasks.
101
101
  name: A name identifying this package, that will fill the
102
- `TaskGroup.pkg_name` column.
102
+ `TaskGroupV2.pkg_name` column.
103
103
  package_root: The folder where the package is installed.
104
104
  If not provided, it will be extracted via `pip show`
105
105
  (requires `package_name` to be set).
@@ -7,40 +7,40 @@ from pydantic import Field
7
7
  from pydantic import field_serializer
8
8
  from pydantic.types import AwareDatetime
9
9
 
10
- from fractal_server.app.schemas.v2.task import TaskRead
10
+ from fractal_server.app.schemas.v2.task import TaskReadV2
11
11
  from fractal_server.types import AbsolutePathStr
12
12
  from fractal_server.types import DictStrStr
13
13
  from fractal_server.types import NonEmptyStr
14
14
 
15
15
 
16
- class TaskGroupOriginEnum(StrEnum):
16
+ class TaskGroupV2OriginEnum(StrEnum):
17
17
  PYPI = "pypi"
18
18
  WHEELFILE = "wheel-file"
19
19
  PIXI = "pixi"
20
20
  OTHER = "other"
21
21
 
22
22
 
23
- class TaskGroupActivityStatus(StrEnum):
23
+ class TaskGroupActivityStatusV2(StrEnum):
24
24
  PENDING = "pending"
25
25
  ONGOING = "ongoing"
26
26
  FAILED = "failed"
27
27
  OK = "OK"
28
28
 
29
29
 
30
- class TaskGroupActivityAction(StrEnum):
30
+ class TaskGroupActivityActionV2(StrEnum):
31
31
  COLLECT = "collect"
32
32
  DEACTIVATE = "deactivate"
33
33
  REACTIVATE = "reactivate"
34
34
  DELETE = "delete"
35
35
 
36
36
 
37
- class TaskGroupCreate(BaseModel):
37
+ class TaskGroupCreateV2(BaseModel):
38
38
  model_config = ConfigDict(extra="forbid")
39
39
  user_id: int
40
40
  resource_id: int
41
41
  user_group_id: int | None = None
42
42
  active: bool = True
43
- origin: TaskGroupOriginEnum
43
+ origin: TaskGroupV2OriginEnum
44
44
  pkg_name: str
45
45
  version: str | None = None
46
46
  python_version: NonEmptyStr = None
@@ -54,9 +54,9 @@ class TaskGroupCreate(BaseModel):
54
54
  pinned_package_versions_post: DictStrStr = Field(default_factory=dict)
55
55
 
56
56
 
57
- class TaskGroupCreateStrict(TaskGroupCreate):
57
+ class TaskGroupCreateV2Strict(TaskGroupCreateV2):
58
58
  """
59
- A strict version of TaskGroupCreate, to be used for task collection.
59
+ A strict version of TaskGroupCreateV2, to be used for task collection.
60
60
  """
61
61
 
62
62
  path: AbsolutePathStr
@@ -65,14 +65,14 @@ class TaskGroupCreateStrict(TaskGroupCreate):
65
65
  python_version: NonEmptyStr
66
66
 
67
67
 
68
- class TaskGroupRead(BaseModel):
68
+ class TaskGroupReadV2(BaseModel):
69
69
  id: int
70
- task_list: list[TaskRead]
70
+ task_list: list[TaskReadV2]
71
71
 
72
72
  user_id: int
73
73
  user_group_id: int | None = None
74
74
 
75
- origin: TaskGroupOriginEnum
75
+ origin: TaskGroupV2OriginEnum
76
76
  pkg_name: str
77
77
  version: str | None = None
78
78
  python_version: str | None = None
@@ -96,16 +96,16 @@ class TaskGroupRead(BaseModel):
96
96
  return v.isoformat()
97
97
 
98
98
 
99
- class TaskGroupReadSuperuser(TaskGroupRead):
99
+ class TaskGroupReadSuperuser(TaskGroupReadV2):
100
100
  resource_id: int
101
101
 
102
102
 
103
- class TaskGroupUpdate(BaseModel):
103
+ class TaskGroupUpdateV2(BaseModel):
104
104
  model_config = ConfigDict(extra="forbid")
105
105
  user_group_id: int | None = None
106
106
 
107
107
 
108
- class TaskGroupActivityRead(BaseModel):
108
+ class TaskGroupActivityV2Read(BaseModel):
109
109
  id: int
110
110
  user_id: int
111
111
  taskgroupv2_id: int | None = None
@@ -113,8 +113,8 @@ class TaskGroupActivityRead(BaseModel):
113
113
  timestamp_ended: AwareDatetime | None = None
114
114
  pkg_name: str
115
115
  version: str
116
- status: TaskGroupActivityStatus
117
- action: TaskGroupActivityAction
116
+ status: TaskGroupActivityStatusV2
117
+ action: TaskGroupActivityActionV2
118
118
  log: str | None = None
119
119
 
120
120
  @field_serializer("timestamp_started")
@@ -5,29 +5,29 @@ from pydantic import ConfigDict
5
5
  from pydantic import field_serializer
6
6
  from pydantic.types import AwareDatetime
7
7
 
8
- from fractal_server.app.schemas.v2.project import ProjectRead
9
- from fractal_server.app.schemas.v2.workflowtask import WorkflowTaskExport
10
- from fractal_server.app.schemas.v2.workflowtask import WorkflowTaskImport
11
- from fractal_server.app.schemas.v2.workflowtask import WorkflowTaskRead
8
+ from fractal_server.app.schemas.v2.project import ProjectReadV2
9
+ from fractal_server.app.schemas.v2.workflowtask import WorkflowTaskExportV2
10
+ from fractal_server.app.schemas.v2.workflowtask import WorkflowTaskImportV2
11
+ from fractal_server.app.schemas.v2.workflowtask import WorkflowTaskReadV2
12
12
  from fractal_server.app.schemas.v2.workflowtask import (
13
- WorkflowTaskReadWithWarning,
13
+ WorkflowTaskReadV2WithWarning,
14
14
  )
15
15
  from fractal_server.types import ListUniqueNonNegativeInt
16
16
  from fractal_server.types import NonEmptyStr
17
17
 
18
18
 
19
- class WorkflowCreate(BaseModel):
19
+ class WorkflowCreateV2(BaseModel):
20
20
  model_config = ConfigDict(extra="forbid")
21
21
 
22
22
  name: NonEmptyStr
23
23
 
24
24
 
25
- class WorkflowRead(BaseModel):
25
+ class WorkflowReadV2(BaseModel):
26
26
  id: int
27
27
  name: str
28
28
  project_id: int
29
- task_list: list[WorkflowTaskRead]
30
- project: ProjectRead
29
+ task_list: list[WorkflowTaskReadV2]
30
+ project: ProjectReadV2
31
31
  timestamp_created: AwareDatetime
32
32
 
33
33
  @field_serializer("timestamp_created")
@@ -35,18 +35,18 @@ class WorkflowRead(BaseModel):
35
35
  return v.isoformat()
36
36
 
37
37
 
38
- class WorkflowReadWithWarnings(WorkflowRead):
39
- task_list: list[WorkflowTaskReadWithWarning]
38
+ class WorkflowReadV2WithWarnings(WorkflowReadV2):
39
+ task_list: list[WorkflowTaskReadV2WithWarning]
40
40
 
41
41
 
42
- class WorkflowUpdate(BaseModel):
42
+ class WorkflowUpdateV2(BaseModel):
43
43
  model_config = ConfigDict(extra="forbid")
44
44
 
45
45
  name: NonEmptyStr = None
46
46
  reordered_workflowtask_ids: ListUniqueNonNegativeInt | None = None
47
47
 
48
48
 
49
- class WorkflowImport(BaseModel):
49
+ class WorkflowImportV2(BaseModel):
50
50
  """
51
51
  Class for `Workflow` import.
52
52
 
@@ -56,10 +56,10 @@ class WorkflowImport(BaseModel):
56
56
 
57
57
  model_config = ConfigDict(extra="forbid")
58
58
  name: NonEmptyStr
59
- task_list: list[WorkflowTaskImport]
59
+ task_list: list[WorkflowTaskImportV2]
60
60
 
61
61
 
62
- class WorkflowExport(BaseModel):
62
+ class WorkflowExportV2(BaseModel):
63
63
  """
64
64
  Class for `Workflow` export.
65
65
 
@@ -68,4 +68,4 @@ class WorkflowExport(BaseModel):
68
68
  """
69
69
 
70
70
  name: str
71
- task_list: list[WorkflowTaskExport]
71
+ task_list: list[WorkflowTaskExportV2]
@@ -9,14 +9,14 @@ from fractal_server.types import DictStrAny
9
9
  from fractal_server.types import TypeFilters
10
10
  from fractal_server.types import WorkflowTaskArgument
11
11
 
12
- from .task import TaskExport
13
- from .task import TaskImport
14
- from .task import TaskImportLegacy
15
- from .task import TaskRead
12
+ from .task import TaskExportV2
13
+ from .task import TaskImportV2
14
+ from .task import TaskImportV2Legacy
15
+ from .task import TaskReadV2
16
16
  from .task import TaskType
17
17
 
18
18
 
19
- class WorkflowTaskCreate(BaseModel):
19
+ class WorkflowTaskCreateV2(BaseModel):
20
20
  model_config = ConfigDict(extra="forbid")
21
21
 
22
22
  meta_non_parallel: DictStrAny | None = None
@@ -26,14 +26,14 @@ class WorkflowTaskCreate(BaseModel):
26
26
  type_filters: TypeFilters = Field(default_factory=dict)
27
27
 
28
28
 
29
- class WorkflowTaskReplace(BaseModel):
29
+ class WorkflowTaskReplaceV2(BaseModel):
30
30
  """Used by 'replace-task' endpoint"""
31
31
 
32
32
  args_non_parallel: dict[str, Any] | None = None
33
33
  args_parallel: dict[str, Any] | None = None
34
34
 
35
35
 
36
- class WorkflowTaskRead(BaseModel):
36
+ class WorkflowTaskReadV2(BaseModel):
37
37
  id: int
38
38
 
39
39
  workflow_id: int
@@ -48,14 +48,14 @@ class WorkflowTaskRead(BaseModel):
48
48
 
49
49
  task_type: TaskType
50
50
  task_id: int
51
- task: TaskRead
51
+ task: TaskReadV2
52
52
 
53
53
 
54
- class WorkflowTaskReadWithWarning(WorkflowTaskRead):
54
+ class WorkflowTaskReadV2WithWarning(WorkflowTaskReadV2):
55
55
  warning: str | None = None
56
56
 
57
57
 
58
- class WorkflowTaskUpdate(BaseModel):
58
+ class WorkflowTaskUpdateV2(BaseModel):
59
59
  model_config = ConfigDict(extra="forbid")
60
60
 
61
61
  meta_non_parallel: DictStrAny | None = None
@@ -65,7 +65,7 @@ class WorkflowTaskUpdate(BaseModel):
65
65
  type_filters: TypeFilters = None
66
66
 
67
67
 
68
- class WorkflowTaskImport(BaseModel):
68
+ class WorkflowTaskImportV2(BaseModel):
69
69
  model_config = ConfigDict(extra="forbid")
70
70
 
71
71
  meta_non_parallel: DictStrAny | None = None
@@ -75,7 +75,7 @@ class WorkflowTaskImport(BaseModel):
75
75
  type_filters: TypeFilters | None = None
76
76
  input_filters: dict[str, Any] | None = None
77
77
 
78
- task: TaskImport | TaskImportLegacy
78
+ task: TaskImportV2 | TaskImportV2Legacy
79
79
 
80
80
  @model_validator(mode="before")
81
81
  @classmethod
@@ -106,11 +106,11 @@ class WorkflowTaskImport(BaseModel):
106
106
  return values
107
107
 
108
108
 
109
- class WorkflowTaskExport(BaseModel):
109
+ class WorkflowTaskExportV2(BaseModel):
110
110
  meta_non_parallel: dict[str, Any] | None = None
111
111
  meta_parallel: dict[str, Any] | None = None
112
112
  args_non_parallel: dict[str, Any] | None = None
113
113
  args_parallel: dict[str, Any] | None = None
114
114
  type_filters: dict[str, bool] = Field(default_factory=dict)
115
115
 
116
- task: TaskExport
116
+ task: TaskExportV2
@@ -425,7 +425,7 @@ async def _create_first_user(
425
425
  kwargs = dict(
426
426
  email=email,
427
427
  password=password,
428
- project_dirs=[project_dir],
428
+ project_dir=project_dir,
429
429
  profile_id=profile_id,
430
430
  is_superuser=is_superuser,
431
431
  is_verified=is_verified,
@@ -4,26 +4,26 @@ from sqlmodel import select
4
4
 
5
5
  from fractal_server.app.db import get_async_db
6
6
  from fractal_server.app.models.v2 import JobV2
7
- from fractal_server.app.models.v2.job import JobStatusType
7
+ from fractal_server.app.models.v2.job import JobStatusTypeV2
8
8
  from fractal_server.app.routes.aux._job import _write_shutdown_file
9
9
  from fractal_server.config import get_settings
10
10
  from fractal_server.logger import get_logger
11
11
  from fractal_server.syringe import Inject
12
12
 
13
13
 
14
- async def cleanup_after_shutdown(*, jobs: list[int], logger_name: str):
14
+ async def cleanup_after_shutdown(*, jobsV2: list[int], logger_name: str):
15
15
  settings = Inject(get_settings)
16
16
  logger = get_logger(logger_name)
17
17
  logger.info("Cleanup function after shutdown")
18
18
  stm_objects = (
19
19
  select(JobV2)
20
- .where(JobV2.id.in_(jobs))
21
- .where(JobV2.status == JobStatusType.SUBMITTED)
20
+ .where(JobV2.id.in_(jobsV2))
21
+ .where(JobV2.status == JobStatusTypeV2.SUBMITTED)
22
22
  )
23
23
  stm_ids = (
24
24
  select(JobV2.id)
25
- .where(JobV2.id.in_(jobs))
26
- .where(JobV2.status == JobStatusType.SUBMITTED)
25
+ .where(JobV2.id.in_(jobsV2))
26
+ .where(JobV2.status == JobStatusTypeV2.SUBMITTED)
27
27
  )
28
28
 
29
29
  async for session in get_async_db():
@@ -1,3 +1,5 @@
1
+ from ._data import DataAuthScheme # noqa F401
2
+ from ._data import DataSettings
1
3
  from ._database import DatabaseSettings
2
4
  from ._email import EmailSettings
3
5
  from ._email import PublicEmailSettings # noqa F401
@@ -19,3 +21,7 @@ def get_email_settings(email_settings=EmailSettings()) -> EmailSettings:
19
21
 
20
22
  def get_oauth_settings(oauth_settings=OAuthSettings()) -> OAuthSettings:
21
23
  return oauth_settings
24
+
25
+
26
+ def get_data_settings(data_settings=DataSettings()) -> DataSettings:
27
+ return data_settings