fractal-server 2.15.3__py3-none-any.whl → 2.15.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fractal_server/__init__.py +1 -1
- fractal_server/app/models/v2/project.py +0 -1
- fractal_server/app/models/v2/task_group.py +0 -1
- fractal_server/app/models/v2/workflow.py +0 -1
- fractal_server/app/routes/admin/v2/accounting.py +0 -1
- fractal_server/app/routes/admin/v2/job.py +0 -1
- fractal_server/app/routes/admin/v2/task.py +0 -4
- fractal_server/app/routes/admin/v2/task_group.py +0 -3
- fractal_server/app/routes/api/v2/_aux_functions.py +0 -1
- fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -1
- fractal_server/app/routes/api/v2/history.py +0 -2
- fractal_server/app/routes/api/v2/images.py +0 -5
- fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -1
- fractal_server/app/routes/api/v2/submit.py +0 -1
- fractal_server/app/routes/api/v2/task_collection_custom.py +0 -2
- fractal_server/app/routes/api/v2/task_collection_pixi.py +0 -1
- fractal_server/app/routes/api/v2/task_group.py +0 -2
- fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -2
- fractal_server/app/routes/api/v2/task_version_update.py +0 -2
- fractal_server/app/routes/api/v2/workflow.py +0 -2
- fractal_server/app/routes/auth/group.py +0 -5
- fractal_server/app/routes/pagination.py +0 -2
- fractal_server/app/runner/executors/local/runner.py +0 -3
- fractal_server/app/runner/v2/db_tools.py +0 -1
- fractal_server/app/runner/v2/merge_outputs.py +0 -2
- fractal_server/app/runner/v2/runner.py +0 -1
- fractal_server/app/runner/v2/task_interface.py +1 -4
- fractal_server/app/schemas/v2/accounting.py +0 -1
- fractal_server/app/schemas/v2/project.py +0 -3
- fractal_server/app/schemas/v2/workflow.py +0 -3
- fractal_server/config.py +2 -2
- fractal_server/data_migrations/2_14_10.py +0 -1
- fractal_server/main.py +0 -1
- fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -1
- fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -1
- fractal_server/tasks/v2/local/_utils.py +32 -0
- fractal_server/tasks/v2/local/collect.py +0 -1
- fractal_server/tasks/v2/local/collect_pixi.py +7 -6
- fractal_server/tasks/v2/local/deactivate.py +0 -2
- fractal_server/tasks/v2/local/deactivate_pixi.py +0 -1
- fractal_server/tasks/v2/local/reactivate_pixi.py +5 -0
- fractal_server/tasks/v2/ssh/_utils.py +38 -0
- fractal_server/tasks/v2/ssh/collect.py +0 -1
- fractal_server/tasks/v2/ssh/collect_pixi.py +11 -4
- fractal_server/tasks/v2/ssh/deactivate.py +0 -1
- fractal_server/tasks/v2/ssh/reactivate_pixi.py +10 -0
- fractal_server/tasks/v2/utils_pixi.py +67 -0
- fractal_server/tasks/v2/utils_python_interpreter.py +1 -1
- fractal_server/types/validators/_filter_validators.py +1 -1
- fractal_server/zip_tools.py +0 -1
- {fractal_server-2.15.3.dist-info → fractal_server-2.15.4.dist-info}/METADATA +2 -1
- {fractal_server-2.15.3.dist-info → fractal_server-2.15.4.dist-info}/RECORD +55 -55
- {fractal_server-2.15.3.dist-info → fractal_server-2.15.4.dist-info}/LICENSE +0 -0
- {fractal_server-2.15.3.dist-info → fractal_server-2.15.4.dist-info}/WHEEL +0 -0
- {fractal_server-2.15.3.dist-info → fractal_server-2.15.4.dist-info}/entry_points.txt +0 -0
fractal_server/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__VERSION__ = "2.15.
|
|
1
|
+
__VERSION__ = "2.15.4"
|
|
@@ -107,7 +107,6 @@ class TaskGroupV2(SQLModel, table=True):
|
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
class TaskGroupActivityV2(SQLModel, table=True):
|
|
110
|
-
|
|
111
110
|
id: int | None = Field(default=None, primary_key=True)
|
|
112
111
|
user_id: int = Field(foreign_key="user_oauth.id")
|
|
113
112
|
taskgroupv2_id: int | None = Field(
|
|
@@ -82,7 +82,6 @@ async def query_accounting_slurm(
|
|
|
82
82
|
superuser: UserOAuth = Depends(current_active_superuser),
|
|
83
83
|
db: AsyncSession = Depends(get_async_db),
|
|
84
84
|
) -> JSONResponse:
|
|
85
|
-
|
|
86
85
|
stm = select(AccountingRecordSlurm.slurm_job_ids)
|
|
87
86
|
if query.user_id is not None:
|
|
88
87
|
stm = stm.where(AccountingRecordSlurm.user_id == query.user_id)
|
|
@@ -20,7 +20,6 @@ router = APIRouter()
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class TaskV2Minimal(BaseModel):
|
|
23
|
-
|
|
24
23
|
id: int
|
|
25
24
|
name: str
|
|
26
25
|
type: str
|
|
@@ -32,13 +31,11 @@ class TaskV2Minimal(BaseModel):
|
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
class ProjectUser(BaseModel):
|
|
35
|
-
|
|
36
34
|
id: int
|
|
37
35
|
email: EmailStr
|
|
38
36
|
|
|
39
37
|
|
|
40
38
|
class TaskV2Relationship(BaseModel):
|
|
41
|
-
|
|
42
39
|
workflow_id: int
|
|
43
40
|
workflow_name: str
|
|
44
41
|
project_id: int
|
|
@@ -47,7 +44,6 @@ class TaskV2Relationship(BaseModel):
|
|
|
47
44
|
|
|
48
45
|
|
|
49
46
|
class TaskV2Info(BaseModel):
|
|
50
|
-
|
|
51
47
|
task: TaskV2Minimal
|
|
52
48
|
relationships: list[TaskV2Relationship]
|
|
53
49
|
|
|
@@ -43,7 +43,6 @@ async def get_task_group_activity_list(
|
|
|
43
43
|
superuser: UserOAuth = Depends(current_active_superuser),
|
|
44
44
|
db: AsyncSession = Depends(get_async_db),
|
|
45
45
|
) -> list[TaskGroupActivityV2Read]:
|
|
46
|
-
|
|
47
46
|
stm = select(TaskGroupActivityV2)
|
|
48
47
|
if task_group_activity_id is not None:
|
|
49
48
|
stm = stm.where(TaskGroupActivityV2.id == task_group_activity_id)
|
|
@@ -73,7 +72,6 @@ async def query_task_group(
|
|
|
73
72
|
user: UserOAuth = Depends(current_active_superuser),
|
|
74
73
|
db: AsyncSession = Depends(get_async_db),
|
|
75
74
|
) -> TaskGroupReadV2:
|
|
76
|
-
|
|
77
75
|
task_group = await db.get(TaskGroupV2, task_group_id)
|
|
78
76
|
if task_group is None:
|
|
79
77
|
raise HTTPException(
|
|
@@ -96,7 +94,6 @@ async def query_task_group_list(
|
|
|
96
94
|
user: UserOAuth = Depends(current_active_superuser),
|
|
97
95
|
db: AsyncSession = Depends(get_async_db),
|
|
98
96
|
) -> list[TaskGroupReadV2]:
|
|
99
|
-
|
|
100
97
|
stm = select(TaskGroupV2)
|
|
101
98
|
|
|
102
99
|
if user_group_id is not None and private is True:
|
|
@@ -71,7 +71,6 @@ async def get_workflow_tasks_statuses(
|
|
|
71
71
|
user: UserOAuth = Depends(current_active_user),
|
|
72
72
|
db: AsyncSession = Depends(get_async_db),
|
|
73
73
|
) -> JSONResponse:
|
|
74
|
-
|
|
75
74
|
# Access control
|
|
76
75
|
workflow = await _get_workflow_check_owner(
|
|
77
76
|
project_id=project_id,
|
|
@@ -335,7 +334,6 @@ async def get_history_images(
|
|
|
335
334
|
db: AsyncSession = Depends(get_async_db),
|
|
336
335
|
pagination: PaginationRequest = Depends(get_pagination_params),
|
|
337
336
|
) -> ImagePage:
|
|
338
|
-
|
|
339
337
|
# Access control and object retrieval
|
|
340
338
|
wftask = await get_wftask_check_owner(
|
|
341
339
|
project_id=project_id,
|
|
@@ -31,7 +31,6 @@ router = APIRouter()
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class ImagePage(PaginationResponse[SingleImage]):
|
|
34
|
-
|
|
35
34
|
attributes: dict[str, list[ImageAttributeValue]]
|
|
36
35
|
types: list[str]
|
|
37
36
|
|
|
@@ -64,7 +63,6 @@ async def post_new_image(
|
|
|
64
63
|
user: UserOAuth = Depends(current_active_user),
|
|
65
64
|
db: AsyncSession = Depends(get_async_db),
|
|
66
65
|
) -> Response:
|
|
67
|
-
|
|
68
66
|
output = await _get_dataset_check_owner(
|
|
69
67
|
project_id=project_id, dataset_id=dataset_id, user_id=user.id, db=db
|
|
70
68
|
)
|
|
@@ -117,7 +115,6 @@ async def query_dataset_images(
|
|
|
117
115
|
user: UserOAuth = Depends(current_active_user),
|
|
118
116
|
db: AsyncSession = Depends(get_async_db),
|
|
119
117
|
) -> ImagePage:
|
|
120
|
-
|
|
121
118
|
page = pagination.page
|
|
122
119
|
page_size = pagination.page_size
|
|
123
120
|
|
|
@@ -131,7 +128,6 @@ async def query_dataset_images(
|
|
|
131
128
|
types = aggregate_types(images)
|
|
132
129
|
|
|
133
130
|
if query is not None:
|
|
134
|
-
|
|
135
131
|
if query.zarr_url is not None:
|
|
136
132
|
image = next(
|
|
137
133
|
(
|
|
@@ -190,7 +186,6 @@ async def delete_dataset_images(
|
|
|
190
186
|
user: UserOAuth = Depends(current_active_user),
|
|
191
187
|
db: AsyncSession = Depends(get_async_db),
|
|
192
188
|
) -> Response:
|
|
193
|
-
|
|
194
189
|
output = await _get_dataset_check_owner(
|
|
195
190
|
project_id=project_id, dataset_id=dataset_id, user_id=user.id, db=db
|
|
196
191
|
)
|
|
@@ -96,7 +96,6 @@ async def check_non_processed_images(
|
|
|
96
96
|
user: UserOAuth = Depends(current_active_user),
|
|
97
97
|
db: AsyncSession = Depends(get_async_db),
|
|
98
98
|
) -> JSONResponse:
|
|
99
|
-
|
|
100
99
|
db_workflow_task, db_workflow = await _get_workflow_task_check_owner(
|
|
101
100
|
project_id=project_id,
|
|
102
101
|
workflow_task_id=workflowtask_id,
|
|
@@ -57,7 +57,6 @@ async def apply_workflow(
|
|
|
57
57
|
user: UserOAuth = Depends(current_active_verified_user),
|
|
58
58
|
db: AsyncSession = Depends(get_async_db),
|
|
59
59
|
) -> JobReadV2 | None:
|
|
60
|
-
|
|
61
60
|
# Remove non-submitted V2 jobs from the app state when the list grows
|
|
62
61
|
# beyond a threshold
|
|
63
62
|
settings = Inject(get_settings)
|
|
@@ -47,7 +47,6 @@ async def collect_task_custom(
|
|
|
47
47
|
user: UserOAuth = Depends(current_active_verified_user),
|
|
48
48
|
db: AsyncSession = Depends(get_async_db),
|
|
49
49
|
) -> list[TaskReadV2]:
|
|
50
|
-
|
|
51
50
|
settings = Inject(get_settings)
|
|
52
51
|
|
|
53
52
|
# Validate query parameters related to user-group ownership
|
|
@@ -97,7 +96,6 @@ async def collect_task_custom(
|
|
|
97
96
|
)
|
|
98
97
|
|
|
99
98
|
if task_collect.package_root is None:
|
|
100
|
-
|
|
101
99
|
package_name_underscore = task_collect.package_name.replace("-", "_")
|
|
102
100
|
# Note that python_command is then used as part of a subprocess.run
|
|
103
101
|
# statement: be careful with mixing `'` and `"`.
|
|
@@ -89,7 +89,6 @@ async def collect_task_pixi(
|
|
|
89
89
|
user: UserOAuth = Depends(current_active_verified_user),
|
|
90
90
|
db: AsyncSession = Depends(get_async_db),
|
|
91
91
|
) -> TaskGroupActivityV2Read:
|
|
92
|
-
|
|
93
92
|
settings = Inject(get_settings)
|
|
94
93
|
# Check if Pixi is available
|
|
95
94
|
if settings.pixi is None:
|
|
@@ -72,7 +72,6 @@ async def get_task_group_activity_list(
|
|
|
72
72
|
user: UserOAuth = Depends(current_active_user),
|
|
73
73
|
db: AsyncSession = Depends(get_async_db),
|
|
74
74
|
) -> list[TaskGroupActivityV2Read]:
|
|
75
|
-
|
|
76
75
|
stm = select(TaskGroupActivityV2).where(
|
|
77
76
|
TaskGroupActivityV2.user_id == user.id
|
|
78
77
|
)
|
|
@@ -105,7 +104,6 @@ async def get_task_group_activity(
|
|
|
105
104
|
user: UserOAuth = Depends(current_active_user),
|
|
106
105
|
db: AsyncSession = Depends(get_async_db),
|
|
107
106
|
) -> TaskGroupActivityV2Read:
|
|
108
|
-
|
|
109
107
|
activity = await db.get(TaskGroupActivityV2, task_group_activity_id)
|
|
110
108
|
|
|
111
109
|
if activity is None:
|
|
@@ -115,7 +115,6 @@ async def deactivate_task_group(
|
|
|
115
115
|
# Submit background task
|
|
116
116
|
settings = Inject(get_settings)
|
|
117
117
|
if settings.FRACTAL_RUNNER_BACKEND == "slurm_ssh":
|
|
118
|
-
|
|
119
118
|
# Validate user settings (backend-specific)
|
|
120
119
|
user_settings = await validate_user_settings(
|
|
121
120
|
user=user, backend=settings.FRACTAL_RUNNER_BACKEND, db=db
|
|
@@ -242,7 +241,6 @@ async def reactivate_task_group(
|
|
|
242
241
|
# Submit background task
|
|
243
242
|
settings = Inject(get_settings)
|
|
244
243
|
if settings.FRACTAL_RUNNER_BACKEND == "slurm_ssh":
|
|
245
|
-
|
|
246
244
|
# Validate user settings (backend-specific)
|
|
247
245
|
user_settings = await validate_user_settings(
|
|
248
246
|
user=user, backend=settings.FRACTAL_RUNNER_BACKEND, db=db
|
|
@@ -78,7 +78,6 @@ async def get_workflow_version_update_candidates(
|
|
|
78
78
|
user: UserOAuth = Depends(current_active_user),
|
|
79
79
|
db: AsyncSession = Depends(get_async_db),
|
|
80
80
|
) -> list[list[TaskVersionRead]]:
|
|
81
|
-
|
|
82
81
|
workflow = await _get_workflow_check_owner(
|
|
83
82
|
project_id=project_id,
|
|
84
83
|
workflow_id=workflow_id,
|
|
@@ -181,7 +180,6 @@ async def replace_workflowtask(
|
|
|
181
180
|
user: UserOAuth = Depends(current_active_user),
|
|
182
181
|
db: AsyncSession = Depends(get_async_db),
|
|
183
182
|
) -> WorkflowTaskReadV2:
|
|
184
|
-
|
|
185
183
|
# Get objects from database
|
|
186
184
|
workflow_task, workflow = await _get_workflow_task_check_owner(
|
|
187
185
|
project_id=project_id,
|
|
@@ -147,7 +147,6 @@ async def update_workflow(
|
|
|
147
147
|
|
|
148
148
|
for key, value in patch.model_dump(exclude_unset=True).items():
|
|
149
149
|
if key == "reordered_workflowtask_ids":
|
|
150
|
-
|
|
151
150
|
if await _workflow_has_submitted_job(
|
|
152
151
|
workflow_id=workflow_id, db=db
|
|
153
152
|
):
|
|
@@ -329,7 +328,6 @@ async def get_workflow_type_filters(
|
|
|
329
328
|
|
|
330
329
|
response_items = []
|
|
331
330
|
for wftask in workflow.task_list:
|
|
332
|
-
|
|
333
331
|
# Compute input_type_filters, based on wftask and task manifest
|
|
334
332
|
input_type_filters = merge_type_filters(
|
|
335
333
|
wftask_type_filters=wftask.type_filters,
|
|
@@ -39,7 +39,6 @@ async def get_list_user_groups(
|
|
|
39
39
|
user: UserOAuth = Depends(current_active_superuser),
|
|
40
40
|
db: AsyncSession = Depends(get_async_db),
|
|
41
41
|
) -> list[UserGroupRead]:
|
|
42
|
-
|
|
43
42
|
# Get all groups
|
|
44
43
|
stm_all_groups = select(UserGroup)
|
|
45
44
|
res = await db.execute(stm_all_groups)
|
|
@@ -88,7 +87,6 @@ async def create_single_group(
|
|
|
88
87
|
user: UserOAuth = Depends(current_active_superuser),
|
|
89
88
|
db: AsyncSession = Depends(get_async_db),
|
|
90
89
|
) -> UserGroupRead:
|
|
91
|
-
|
|
92
90
|
# Check that name is not already in use
|
|
93
91
|
existing_name_str = select(UserGroup).where(
|
|
94
92
|
UserGroup.name == group_create.name
|
|
@@ -121,7 +119,6 @@ async def update_single_group(
|
|
|
121
119
|
user: UserOAuth = Depends(current_active_superuser),
|
|
122
120
|
db: AsyncSession = Depends(get_async_db),
|
|
123
121
|
) -> UserGroupRead:
|
|
124
|
-
|
|
125
122
|
group = await _usergroup_or_404(group_id, db)
|
|
126
123
|
|
|
127
124
|
# Patch `viewer_paths`
|
|
@@ -143,7 +140,6 @@ async def delete_single_group(
|
|
|
143
140
|
user: UserOAuth = Depends(current_active_superuser),
|
|
144
141
|
db: AsyncSession = Depends(get_async_db),
|
|
145
142
|
) -> Response:
|
|
146
|
-
|
|
147
143
|
group = await _usergroup_or_404(group_id, db)
|
|
148
144
|
|
|
149
145
|
if group.name == FRACTAL_DEFAULT_GROUP_NAME:
|
|
@@ -219,7 +215,6 @@ async def remove_user_from_group(
|
|
|
219
215
|
superuser: UserOAuth = Depends(current_active_superuser),
|
|
220
216
|
db: AsyncSession = Depends(get_async_db),
|
|
221
217
|
) -> UserGroupRead:
|
|
222
|
-
|
|
223
218
|
# Check that user and group exist
|
|
224
219
|
await _usergroup_or_404(group_id, db)
|
|
225
220
|
user = await _user_or_404(user_id, db)
|
|
@@ -11,7 +11,6 @@ T = TypeVar("T")
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class PaginationRequest(BaseModel):
|
|
14
|
-
|
|
15
14
|
page: int = Field(ge=1)
|
|
16
15
|
page_size: int | None = Field(ge=1)
|
|
17
16
|
|
|
@@ -38,7 +37,6 @@ def get_pagination_params(
|
|
|
38
37
|
|
|
39
38
|
|
|
40
39
|
class PaginationResponse(BaseModel, Generic[T]):
|
|
41
|
-
|
|
42
40
|
current_page: int = Field(ge=1)
|
|
43
41
|
page_size: int = Field(ge=0)
|
|
44
42
|
total_count: int = Field(ge=0)
|
|
@@ -28,7 +28,6 @@ def run_single_task(
|
|
|
28
28
|
parameters: dict[str, Any],
|
|
29
29
|
task_files: TaskFiles,
|
|
30
30
|
):
|
|
31
|
-
|
|
32
31
|
# Write args.json file
|
|
33
32
|
with open(task_files.args_file_local, "w") as f:
|
|
34
33
|
json.dump(parameters, f)
|
|
@@ -169,7 +168,6 @@ class LocalRunner(BaseRunner):
|
|
|
169
168
|
exceptions: dict[int, BaseException] = {}
|
|
170
169
|
|
|
171
170
|
try:
|
|
172
|
-
|
|
173
171
|
self.validate_multisubmit_parameters(
|
|
174
172
|
list_parameters=list_parameters,
|
|
175
173
|
task_type=task_type,
|
|
@@ -208,7 +206,6 @@ class LocalRunner(BaseRunner):
|
|
|
208
206
|
|
|
209
207
|
# Execute tasks, in chunks of size `parallel_tasks_per_job`
|
|
210
208
|
for ind_chunk in range(0, n_elements, parallel_tasks_per_job):
|
|
211
|
-
|
|
212
209
|
list_parameters_chunk = list_parameters[
|
|
213
210
|
ind_chunk : ind_chunk + parallel_tasks_per_job
|
|
214
211
|
]
|
|
@@ -3,7 +3,6 @@ from fractal_server.app.runner.v2.task_interface import TaskOutput
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
def merge_outputs(task_outputs: list[TaskOutput]) -> TaskOutput:
|
|
6
|
-
|
|
7
6
|
if len(task_outputs) == 0:
|
|
8
7
|
return TaskOutput()
|
|
9
8
|
|
|
@@ -11,7 +10,6 @@ def merge_outputs(task_outputs: list[TaskOutput]) -> TaskOutput:
|
|
|
11
10
|
final_image_list_removals = []
|
|
12
11
|
|
|
13
12
|
for task_output in task_outputs:
|
|
14
|
-
|
|
15
13
|
final_image_list_updates.extend(task_output.image_list_updates)
|
|
16
14
|
final_image_list_removals.extend(task_output.image_list_removals)
|
|
17
15
|
|
|
@@ -415,7 +415,6 @@ def execute_tasks_v2(
|
|
|
415
415
|
# Write current dataset images into the database.
|
|
416
416
|
db_dataset = db.get(DatasetV2, dataset.id)
|
|
417
417
|
if ENRICH_IMAGES_WITH_STATUS:
|
|
418
|
-
|
|
419
418
|
db_dataset.images = _remove_status_from_attributes(tmp_images)
|
|
420
419
|
else:
|
|
421
420
|
db_dataset.images = tmp_images
|
|
@@ -11,7 +11,6 @@ from fractal_server.types import ZarrUrlStr
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class TaskOutput(BaseModel):
|
|
14
|
-
|
|
15
14
|
model_config = ConfigDict(extra="forbid")
|
|
16
15
|
|
|
17
16
|
image_list_updates: list[SingleImageTaskOutput] = Field(
|
|
@@ -40,7 +39,6 @@ class TaskOutput(BaseModel):
|
|
|
40
39
|
|
|
41
40
|
|
|
42
41
|
class InitArgsModel(BaseModel):
|
|
43
|
-
|
|
44
42
|
model_config = ConfigDict(extra="forbid")
|
|
45
43
|
|
|
46
44
|
zarr_url: ZarrUrlStr
|
|
@@ -48,14 +46,13 @@ class InitArgsModel(BaseModel):
|
|
|
48
46
|
|
|
49
47
|
|
|
50
48
|
class InitTaskOutput(BaseModel):
|
|
51
|
-
|
|
52
49
|
model_config = ConfigDict(extra="forbid")
|
|
53
50
|
|
|
54
51
|
parallelization_list: list[InitArgsModel] = Field(default_factory=list)
|
|
55
52
|
|
|
56
53
|
|
|
57
54
|
def _cast_and_validate_TaskOutput(
|
|
58
|
-
task_output: dict[str, Any]
|
|
55
|
+
task_output: dict[str, Any],
|
|
59
56
|
) -> TaskOutput | None:
|
|
60
57
|
try:
|
|
61
58
|
validated_task_output = TaskOutput(**task_output)
|
|
@@ -9,14 +9,12 @@ from fractal_server.types import NonEmptyStr
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ProjectCreateV2(BaseModel):
|
|
12
|
-
|
|
13
12
|
model_config = ConfigDict(extra="forbid")
|
|
14
13
|
|
|
15
14
|
name: NonEmptyStr
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
class ProjectReadV2(BaseModel):
|
|
19
|
-
|
|
20
18
|
id: int
|
|
21
19
|
name: str
|
|
22
20
|
timestamp_created: AwareDatetime
|
|
@@ -27,7 +25,6 @@ class ProjectReadV2(BaseModel):
|
|
|
27
25
|
|
|
28
26
|
|
|
29
27
|
class ProjectUpdateV2(BaseModel):
|
|
30
|
-
|
|
31
28
|
model_config = ConfigDict(extra="forbid")
|
|
32
29
|
|
|
33
30
|
name: NonEmptyStr = None
|
|
@@ -17,14 +17,12 @@ from fractal_server.types import NonEmptyStr
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class WorkflowCreateV2(BaseModel):
|
|
20
|
-
|
|
21
20
|
model_config = ConfigDict(extra="forbid")
|
|
22
21
|
|
|
23
22
|
name: NonEmptyStr
|
|
24
23
|
|
|
25
24
|
|
|
26
25
|
class WorkflowReadV2(BaseModel):
|
|
27
|
-
|
|
28
26
|
id: int
|
|
29
27
|
name: str
|
|
30
28
|
project_id: int
|
|
@@ -42,7 +40,6 @@ class WorkflowReadV2WithWarnings(WorkflowReadV2):
|
|
|
42
40
|
|
|
43
41
|
|
|
44
42
|
class WorkflowUpdateV2(BaseModel):
|
|
45
|
-
|
|
46
43
|
model_config = ConfigDict(extra="forbid")
|
|
47
44
|
|
|
48
45
|
name: NonEmptyStr = None
|
fractal_server/config.py
CHANGED
|
@@ -95,10 +95,11 @@ class PixiSettings(BaseModel):
|
|
|
95
95
|
PIXI_CONCURRENT_SOLVES: int = 4
|
|
96
96
|
PIXI_CONCURRENT_DOWNLOADS: int = 4
|
|
97
97
|
TOKIO_WORKER_THREADS: int = 2
|
|
98
|
+
DEFAULT_ENVIRONMENT: str = "default"
|
|
99
|
+
DEFAULT_PLATFORM: str = "linux-64"
|
|
98
100
|
|
|
99
101
|
@model_validator(mode="after")
|
|
100
102
|
def check_pixi_settings(self):
|
|
101
|
-
|
|
102
103
|
if self.default_version not in self.versions:
|
|
103
104
|
raise ValueError(
|
|
104
105
|
f"Default version '{self.default_version}' not in "
|
|
@@ -108,7 +109,6 @@ class PixiSettings(BaseModel):
|
|
|
108
109
|
pixi_base_dir = Path(self.versions[self.default_version]).parent
|
|
109
110
|
|
|
110
111
|
for key, value in self.versions.items():
|
|
111
|
-
|
|
112
112
|
pixi_path = Path(value)
|
|
113
113
|
|
|
114
114
|
if pixi_path.parent != pixi_base_dir:
|
fractal_server/main.py
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
|
+
from ..utils_pixi import simplify_pyproject_toml
|
|
3
4
|
from fractal_server.app.schemas.v2 import TaskCreateV2
|
|
5
|
+
from fractal_server.config import get_settings
|
|
4
6
|
from fractal_server.logger import get_logger
|
|
7
|
+
from fractal_server.logger import set_logger
|
|
8
|
+
from fractal_server.syringe import Inject
|
|
5
9
|
from fractal_server.tasks.v2.utils_templates import customize_template
|
|
6
10
|
from fractal_server.utils import execute_command_sync
|
|
7
11
|
|
|
8
12
|
|
|
13
|
+
logger = set_logger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
9
16
|
def _customize_and_run_template(
|
|
10
17
|
template_filename: str,
|
|
11
18
|
replacements: list[tuple[str, str]],
|
|
@@ -69,3 +76,28 @@ def check_task_files_exist(task_list: list[TaskCreateV2]) -> None:
|
|
|
69
76
|
f"Task `{_task.name}` has `command_parallel` "
|
|
70
77
|
f"pointing to missing file `{_task_path}`."
|
|
71
78
|
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def edit_pyproject_toml_in_place_local(pyproject_toml_path: Path) -> None:
|
|
82
|
+
"""
|
|
83
|
+
Wrapper of `simplify_pyproject_toml`, with I/O.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
# Read `pyproject.toml`
|
|
87
|
+
with pyproject_toml_path.open() as f:
|
|
88
|
+
pyproject_contents = f.read()
|
|
89
|
+
|
|
90
|
+
# Simplify contents
|
|
91
|
+
settings = Inject(get_settings)
|
|
92
|
+
new_pyproject_contents = simplify_pyproject_toml(
|
|
93
|
+
original_toml_string=pyproject_contents,
|
|
94
|
+
pixi_environment=settings.pixi.DEFAULT_ENVIRONMENT,
|
|
95
|
+
pixi_platform=settings.pixi.DEFAULT_PLATFORM,
|
|
96
|
+
)
|
|
97
|
+
# Write new `pyproject.toml`
|
|
98
|
+
with pyproject_toml_path.open("w") as f:
|
|
99
|
+
f.write(new_pyproject_contents)
|
|
100
|
+
logger.debug(
|
|
101
|
+
f"Replaced local {pyproject_toml_path.as_posix()} "
|
|
102
|
+
"with simplified version."
|
|
103
|
+
)
|
|
@@ -7,6 +7,7 @@ from tempfile import TemporaryDirectory
|
|
|
7
7
|
from ..utils_database import create_db_tasks_and_update_task_group_sync
|
|
8
8
|
from ..utils_pixi import parse_collect_stdout
|
|
9
9
|
from ..utils_pixi import SOURCE_DIR_NAME
|
|
10
|
+
from ._utils import edit_pyproject_toml_in_place_local
|
|
10
11
|
from fractal_server.app.db import get_sync_db
|
|
11
12
|
from fractal_server.app.schemas.v2 import FractalUploadedFile
|
|
12
13
|
from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
|
|
@@ -134,6 +135,11 @@ def collect_local_pixi(
|
|
|
134
135
|
activity.log = get_current_log(log_file_path)
|
|
135
136
|
activity = add_commit_refresh(obj=activity, db=db)
|
|
136
137
|
|
|
138
|
+
# Simplify `pyproject.toml`
|
|
139
|
+
source_dir = Path(task_group.path, SOURCE_DIR_NAME).as_posix()
|
|
140
|
+
pyproject_toml_path = Path(source_dir, "pyproject.toml")
|
|
141
|
+
edit_pyproject_toml_in_place_local(pyproject_toml_path)
|
|
142
|
+
|
|
137
143
|
# Run script 2
|
|
138
144
|
_customize_and_run_template(
|
|
139
145
|
template_filename="pixi_2_install.sh",
|
|
@@ -160,7 +166,6 @@ def collect_local_pixi(
|
|
|
160
166
|
]
|
|
161
167
|
|
|
162
168
|
# Make task folder 755
|
|
163
|
-
source_dir = Path(task_group.path, SOURCE_DIR_NAME).as_posix()
|
|
164
169
|
command = f"chmod -R 755 {source_dir}"
|
|
165
170
|
execute_command_sync(
|
|
166
171
|
command=command,
|
|
@@ -205,11 +210,7 @@ def collect_local_pixi(
|
|
|
205
210
|
"Add env_info, venv_size and venv_file_number "
|
|
206
211
|
"to TaskGroupV2 - start"
|
|
207
212
|
)
|
|
208
|
-
with Path(
|
|
209
|
-
task_group.path,
|
|
210
|
-
SOURCE_DIR_NAME,
|
|
211
|
-
"pixi.lock",
|
|
212
|
-
).open() as f:
|
|
213
|
+
with Path(source_dir, "pixi.lock").open() as f:
|
|
213
214
|
pixi_lock_contents = f.read()
|
|
214
215
|
|
|
215
216
|
# NOTE: see issue 2626 about whether to keep `pixi.lock` files
|
|
@@ -72,7 +72,6 @@ def deactivate_local(
|
|
|
72
72
|
return
|
|
73
73
|
|
|
74
74
|
try:
|
|
75
|
-
|
|
76
75
|
activity.status = TaskGroupActivityStatusV2.ONGOING
|
|
77
76
|
activity = add_commit_refresh(obj=activity, db=db)
|
|
78
77
|
|
|
@@ -115,7 +114,6 @@ def deactivate_local(
|
|
|
115
114
|
|
|
116
115
|
# Handle some specific cases for wheel-file case
|
|
117
116
|
if task_group.origin == TaskGroupV2OriginEnum.WHEELFILE:
|
|
118
|
-
|
|
119
117
|
logger.info(
|
|
120
118
|
f"Handle specific cases for {task_group.origin=}."
|
|
121
119
|
)
|
|
@@ -7,6 +7,7 @@ from ..utils_background import add_commit_refresh
|
|
|
7
7
|
from ..utils_background import fail_and_cleanup
|
|
8
8
|
from ..utils_background import get_activity_and_task_group
|
|
9
9
|
from ..utils_pixi import SOURCE_DIR_NAME
|
|
10
|
+
from ._utils import edit_pyproject_toml_in_place_local
|
|
10
11
|
from fractal_server.app.db import get_sync_db
|
|
11
12
|
from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
|
|
12
13
|
from fractal_server.app.schemas.v2.task_group import TaskGroupActivityStatusV2
|
|
@@ -121,6 +122,10 @@ def reactivate_local_pixi(
|
|
|
121
122
|
activity.log = get_current_log(log_file_path)
|
|
122
123
|
activity = add_commit_refresh(obj=activity, db=db)
|
|
123
124
|
|
|
125
|
+
# Simplify `pyproject.toml`
|
|
126
|
+
pyproject_toml_path = Path(source_dir, "pyproject.toml")
|
|
127
|
+
edit_pyproject_toml_in_place_local(pyproject_toml_path)
|
|
128
|
+
|
|
124
129
|
# Write pixi.lock into `source_dir`
|
|
125
130
|
logger.debug(f"start - writing {source_dir}/pixi.lock")
|
|
126
131
|
with Path(source_dir, "pixi.lock").open("w") as f:
|
|
@@ -4,12 +4,18 @@ from pathlib import Path
|
|
|
4
4
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
5
5
|
|
|
6
6
|
from ..utils_background import fail_and_cleanup
|
|
7
|
+
from ..utils_pixi import simplify_pyproject_toml
|
|
7
8
|
from fractal_server.app.models.v2 import TaskGroupActivityV2
|
|
8
9
|
from fractal_server.app.models.v2 import TaskGroupV2
|
|
10
|
+
from fractal_server.config import get_settings
|
|
9
11
|
from fractal_server.logger import get_logger
|
|
12
|
+
from fractal_server.logger import set_logger
|
|
10
13
|
from fractal_server.ssh._fabric import FractalSSH
|
|
14
|
+
from fractal_server.syringe import Inject
|
|
11
15
|
from fractal_server.tasks.v2.utils_templates import customize_template
|
|
12
16
|
|
|
17
|
+
logger = set_logger(__name__)
|
|
18
|
+
|
|
13
19
|
|
|
14
20
|
def _customize_and_run_template(
|
|
15
21
|
*,
|
|
@@ -126,3 +132,35 @@ def check_ssh_or_fail_and_cleanup(
|
|
|
126
132
|
db=db,
|
|
127
133
|
)
|
|
128
134
|
return False
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def edit_pyproject_toml_in_place_ssh(
|
|
138
|
+
*,
|
|
139
|
+
fractal_ssh: FractalSSH,
|
|
140
|
+
pyproject_toml_path: Path,
|
|
141
|
+
) -> None:
|
|
142
|
+
"""
|
|
143
|
+
Wrapper of `simplify_pyproject_toml`, with I/O.
|
|
144
|
+
"""
|
|
145
|
+
|
|
146
|
+
# Read `pyproject.toml`
|
|
147
|
+
pyproject_contents = fractal_ssh.read_remote_text_file(
|
|
148
|
+
pyproject_toml_path.as_posix()
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# Simplify contents
|
|
152
|
+
settings = Inject(get_settings)
|
|
153
|
+
new_pyproject_contents = simplify_pyproject_toml(
|
|
154
|
+
original_toml_string=pyproject_contents,
|
|
155
|
+
pixi_environment=settings.pixi.DEFAULT_ENVIRONMENT,
|
|
156
|
+
pixi_platform=settings.pixi.DEFAULT_PLATFORM,
|
|
157
|
+
)
|
|
158
|
+
# Write new `pyproject.toml`
|
|
159
|
+
fractal_ssh.write_remote_file(
|
|
160
|
+
path=pyproject_toml_path.as_posix(),
|
|
161
|
+
content=new_pyproject_contents,
|
|
162
|
+
)
|
|
163
|
+
logger.debug(
|
|
164
|
+
f"Replaced remote {pyproject_toml_path.as_posix()} "
|
|
165
|
+
"with simplified version."
|
|
166
|
+
)
|
|
@@ -9,6 +9,7 @@ from ..utils_database import create_db_tasks_and_update_task_group_sync
|
|
|
9
9
|
from ..utils_pixi import parse_collect_stdout
|
|
10
10
|
from ..utils_pixi import SOURCE_DIR_NAME
|
|
11
11
|
from ._utils import check_ssh_or_fail_and_cleanup
|
|
12
|
+
from ._utils import edit_pyproject_toml_in_place_ssh
|
|
12
13
|
from fractal_server.app.db import get_sync_db
|
|
13
14
|
from fractal_server.app.schemas.v2 import FractalUploadedFile
|
|
14
15
|
from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
|
|
@@ -80,7 +81,6 @@ def collect_ssh_pixi(
|
|
|
80
81
|
ssh_config=ssh_config,
|
|
81
82
|
logger_name=LOGGER_NAME,
|
|
82
83
|
) as fractal_ssh:
|
|
83
|
-
|
|
84
84
|
try:
|
|
85
85
|
# Check SSH connection
|
|
86
86
|
ssh_ok = check_ssh_or_fail_and_cleanup(
|
|
@@ -191,6 +191,16 @@ def collect_ssh_pixi(
|
|
|
191
191
|
activity.log = get_current_log(log_file_path)
|
|
192
192
|
activity = add_commit_refresh(obj=activity, db=db)
|
|
193
193
|
|
|
194
|
+
# Simplify `pyproject.toml`
|
|
195
|
+
source_dir = Path(
|
|
196
|
+
task_group.path, SOURCE_DIR_NAME
|
|
197
|
+
).as_posix()
|
|
198
|
+
pyproject_toml_path = Path(source_dir, "pyproject.toml")
|
|
199
|
+
edit_pyproject_toml_in_place_ssh(
|
|
200
|
+
fractal_ssh=fractal_ssh,
|
|
201
|
+
pyproject_toml_path=pyproject_toml_path,
|
|
202
|
+
)
|
|
203
|
+
|
|
194
204
|
stdout = _customize_and_run_template(
|
|
195
205
|
template_filename="pixi_2_install.sh",
|
|
196
206
|
replacements=replacements,
|
|
@@ -218,9 +228,6 @@ def collect_ssh_pixi(
|
|
|
218
228
|
"project_python_wrapper"
|
|
219
229
|
]
|
|
220
230
|
|
|
221
|
-
source_dir = Path(
|
|
222
|
-
task_group.path, SOURCE_DIR_NAME
|
|
223
|
-
).as_posix()
|
|
224
231
|
fractal_ssh.run_command(cmd=f"chmod -R 755 {source_dir}")
|
|
225
232
|
|
|
226
233
|
# Read and validate remote manifest file
|
|
@@ -6,6 +6,7 @@ from ..utils_background import fail_and_cleanup
|
|
|
6
6
|
from ..utils_background import get_activity_and_task_group
|
|
7
7
|
from ..utils_pixi import SOURCE_DIR_NAME
|
|
8
8
|
from ._utils import check_ssh_or_fail_and_cleanup
|
|
9
|
+
from ._utils import edit_pyproject_toml_in_place_ssh
|
|
9
10
|
from fractal_server.app.db import get_sync_db
|
|
10
11
|
from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
|
|
11
12
|
from fractal_server.app.schemas.v2 import TaskGroupActivityStatusV2
|
|
@@ -161,6 +162,15 @@ def reactivate_ssh_pixi(
|
|
|
161
162
|
activity.log = get_current_log(log_file_path)
|
|
162
163
|
activity = add_commit_refresh(obj=activity, db=db)
|
|
163
164
|
|
|
165
|
+
# Simplify `pyproject.toml`
|
|
166
|
+
source_dir = Path(
|
|
167
|
+
task_group.path, SOURCE_DIR_NAME
|
|
168
|
+
).as_posix()
|
|
169
|
+
pyproject_toml_path = Path(source_dir, "pyproject.toml")
|
|
170
|
+
edit_pyproject_toml_in_place_ssh(
|
|
171
|
+
fractal_ssh=fractal_ssh,
|
|
172
|
+
pyproject_toml_path=pyproject_toml_path,
|
|
173
|
+
)
|
|
164
174
|
# Write pixi.lock into `source_dir`
|
|
165
175
|
pixi_lock_local = Path(tmpdir, "pixi.lock").as_posix()
|
|
166
176
|
pixi_lock_remote = Path(
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import tomllib
|
|
1
2
|
from typing import TypedDict
|
|
2
3
|
|
|
4
|
+
import tomli_w
|
|
5
|
+
|
|
6
|
+
from fractal_server.logger import set_logger
|
|
7
|
+
|
|
8
|
+
logger = set_logger(__name__)
|
|
9
|
+
|
|
3
10
|
SOURCE_DIR_NAME = "source_dir"
|
|
4
11
|
|
|
5
12
|
|
|
@@ -36,3 +43,63 @@ def parse_collect_stdout(stdout: str) -> ParsedOutput:
|
|
|
36
43
|
attribute_value = actual_line.split(search)[-1].strip(" ")
|
|
37
44
|
attributes[attribute_name] = attribute_value
|
|
38
45
|
return attributes
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def simplify_pyproject_toml(
|
|
49
|
+
*,
|
|
50
|
+
original_toml_string: str,
|
|
51
|
+
pixi_environment: str,
|
|
52
|
+
pixi_platform: str,
|
|
53
|
+
) -> str:
|
|
54
|
+
"""
|
|
55
|
+
Simplify `pyproject.toml` contents to make `pixi install` less heavy.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
original_toml_string: Original `pyproject.toml` contents
|
|
59
|
+
environment: Name of the pixi environment to use (e.g. `default`).
|
|
60
|
+
target_platform: Name of the platform (e.g. `linux-64`)
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
New `pyproject.toml` contents
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
# Parse TOML string
|
|
67
|
+
data = tomllib.loads(original_toml_string)
|
|
68
|
+
try:
|
|
69
|
+
pixi_data = data["tool"]["pixi"]
|
|
70
|
+
except KeyError:
|
|
71
|
+
logger.warning(
|
|
72
|
+
"KeyError when looking for tool/pixi path. Return original value."
|
|
73
|
+
)
|
|
74
|
+
return original_toml_string
|
|
75
|
+
|
|
76
|
+
# Use a single platform (or skip, if not set)
|
|
77
|
+
try:
|
|
78
|
+
pixi_data["workspace"]["platforms"] = [pixi_platform]
|
|
79
|
+
except KeyError:
|
|
80
|
+
logger.info("KeyError for workspace/platforms - skip.")
|
|
81
|
+
|
|
82
|
+
# Keep a single environment (or skip, if not set)
|
|
83
|
+
try:
|
|
84
|
+
current_environments = pixi_data["environments"]
|
|
85
|
+
pixi_data["environments"] = {
|
|
86
|
+
key: value
|
|
87
|
+
for key, value in current_environments.items()
|
|
88
|
+
if key == pixi_environment
|
|
89
|
+
}
|
|
90
|
+
if pixi_data["environments"] == {}:
|
|
91
|
+
raise ValueError(
|
|
92
|
+
f"No '{pixi_environment}' pixi environment found."
|
|
93
|
+
)
|
|
94
|
+
except KeyError:
|
|
95
|
+
logger.info("KeyError for workspace/platforms - skip.")
|
|
96
|
+
|
|
97
|
+
# Drop pixi.tasks
|
|
98
|
+
pixi_data.pop("tasks", None)
|
|
99
|
+
|
|
100
|
+
# Prepare and validate new `pyprojectl.toml` contents
|
|
101
|
+
data["tool"]["pixi"] = pixi_data
|
|
102
|
+
new_toml_string = tomli_w.dumps(data)
|
|
103
|
+
tomllib.loads(new_toml_string)
|
|
104
|
+
|
|
105
|
+
return new_toml_string
|
|
@@ -4,7 +4,7 @@ from ._common_validators import valdict_keys
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def validate_attribute_filters(
|
|
7
|
-
attribute_filters: dict[str, list[int | float | str | bool]]
|
|
7
|
+
attribute_filters: dict[str, list[int | float | str | bool]],
|
|
8
8
|
) -> dict[str, list[Any]]:
|
|
9
9
|
attribute_filters = valdict_keys(attribute_filters)
|
|
10
10
|
for key, values in attribute_filters.items():
|
fractal_server/zip_tools.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: fractal-server
|
|
3
|
-
Version: 2.15.
|
|
3
|
+
Version: 2.15.4
|
|
4
4
|
Summary: Backend component of the Fractal analytics platform
|
|
5
5
|
License: BSD-3-Clause
|
|
6
6
|
Author: Tommaso Comparin
|
|
@@ -23,6 +23,7 @@ Requires-Dist: pydantic-settings (>=2.7.0)
|
|
|
23
23
|
Requires-Dist: python-dotenv (>=1.1.0,<1.2.0)
|
|
24
24
|
Requires-Dist: sqlalchemy[asyncio] (>=2.0.23,<2.1)
|
|
25
25
|
Requires-Dist: sqlmodel (==0.0.24)
|
|
26
|
+
Requires-Dist: tomli_w (>=1.2.0,<1.3.0)
|
|
26
27
|
Requires-Dist: uvicorn (>=0.29.0,<0.35.0)
|
|
27
28
|
Requires-Dist: uvicorn-worker (==0.3.0)
|
|
28
29
|
Project-URL: Documentation, https://fractal-analytics-platform.github.io/fractal-server
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
|
1
|
+
fractal_server/__init__.py,sha256=oQyZUHcUuOnv7ZqsoVjwEhBSMPbobwbvTyb3GUD_ZT8,23
|
|
2
2
|
fractal_server/__main__.py,sha256=rkM8xjY1KeS3l63irB8yCrlVobR-73uDapC4wvrIlxI,6957
|
|
3
3
|
fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
|
|
4
4
|
fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -13,51 +13,51 @@ fractal_server/app/models/v2/accounting.py,sha256=i-2TsjqyuclxFQ21C-TeDoss7ZBTRu
|
|
|
13
13
|
fractal_server/app/models/v2/dataset.py,sha256=P_zy4dPQAqrCALQ6737VkAFk1SvcgYjnslGUZhPI8sc,1226
|
|
14
14
|
fractal_server/app/models/v2/history.py,sha256=CBN2WVg9vW5pHU1RP8TkB_nnJrwnuifCcxgnd53UtEE,2163
|
|
15
15
|
fractal_server/app/models/v2/job.py,sha256=e3Un_rUgWC-KazGLDQqy17NQK_2ZsL3EmEmDAky_bN0,1998
|
|
16
|
-
fractal_server/app/models/v2/project.py,sha256=
|
|
16
|
+
fractal_server/app/models/v2/project.py,sha256=XLna1SSKdywdDS3qfcVaGtafyVKMZq6CiLvHOe-AjhU,754
|
|
17
17
|
fractal_server/app/models/v2/task.py,sha256=iBIQB8POQE5MyKvLZhw7jZWlBhbrThzCDzRTcgiAczQ,1493
|
|
18
|
-
fractal_server/app/models/v2/task_group.py,sha256
|
|
19
|
-
fractal_server/app/models/v2/workflow.py,sha256=
|
|
18
|
+
fractal_server/app/models/v2/task_group.py,sha256=-x-BLtE2biV6kR0hENFgcq3N0B1QuLehdUWhCCO34tk,3856
|
|
19
|
+
fractal_server/app/models/v2/workflow.py,sha256=gBjDXO-RytVT81aAlesImBhmVHrwNUrmsF_UsGa1qLM,1057
|
|
20
20
|
fractal_server/app/models/v2/workflowtask.py,sha256=qkTc-hcFLpJUVsEUbnDq2BJL0qg9jagy2doZeusF1ek,1266
|
|
21
21
|
fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
fractal_server/app/routes/admin/v2/__init__.py,sha256=_5lqb6-M8-fZqE1HRMep6pAFYRUKMxrvbZOKs-RXWkw,933
|
|
24
|
-
fractal_server/app/routes/admin/v2/accounting.py,sha256
|
|
24
|
+
fractal_server/app/routes/admin/v2/accounting.py,sha256=-eLzBirENvdhjhrCf6bs1pTriIui19DAr_k-zuJB7Y8,3593
|
|
25
25
|
fractal_server/app/routes/admin/v2/impersonate.py,sha256=gc4lshfEPFR6W2asH7aKu6hqE6chzusdhAUVV9p51eU,1131
|
|
26
|
-
fractal_server/app/routes/admin/v2/job.py,sha256=
|
|
26
|
+
fractal_server/app/routes/admin/v2/job.py,sha256=fl_1hWrriCA24OPlHZhxfnM1j0C4UL5hqjcG1ww8Fac,7584
|
|
27
27
|
fractal_server/app/routes/admin/v2/project.py,sha256=MA_LdoEuSuisSGRO43TapMuJ080y5iaUGSAUgKuuKOg,1188
|
|
28
|
-
fractal_server/app/routes/admin/v2/task.py,sha256=
|
|
29
|
-
fractal_server/app/routes/admin/v2/task_group.py,sha256=
|
|
28
|
+
fractal_server/app/routes/admin/v2/task.py,sha256=8njjq_zcvNW-Ewxn7WfsRQbs_aV5h-7pgcRIAegzTnc,4308
|
|
29
|
+
fractal_server/app/routes/admin/v2/task_group.py,sha256=JUCxKnwSNmOKyh6lpqfG5jT5BuRE_U2X6HqD5VVhWPg,7096
|
|
30
30
|
fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=2J3M9VXWD_0j9jRTZ5APuUXl9E-aVv0qF8K02vvcO3s,9150
|
|
31
31
|
fractal_server/app/routes/api/__init__.py,sha256=B8l6PSAhR10iZqHEiyTat-_0tkeKdrCigIE6DJGP5b8,638
|
|
32
32
|
fractal_server/app/routes/api/v2/__init__.py,sha256=D3sRRsqkmZO6kBxUjg40q0aRDsnuXI4sOOfn0xF9JsM,2820
|
|
33
|
-
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=
|
|
33
|
+
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=tfnxqbufKqd5dbFUzOFlRPc9EgURhpNa5V2V4agzndg,14259
|
|
34
34
|
fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=Z23xwvBaVEEQ5B-JsWZJpjj4_QqoXqHYONztnbAH6gw,4425
|
|
35
35
|
fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=GpKfw9yj01LmOAuNMTOreU1PFkCKpjK5oCt7_wp35-A,6741
|
|
36
36
|
fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py,sha256=WLDOYCnb6fnS5avKflyx6yN24Vo1n5kJk5ZyiKbzb8Y,1175
|
|
37
|
-
fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256
|
|
37
|
+
fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=-KTPouwPQga5SGe2n0diWm-Fev31DPAfXKMo6PijBSI,12207
|
|
38
38
|
fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py,sha256=8x1_q9FyCzItnPmdSdLQuwUTy4B9xCsXscp97_lJcpM,4635
|
|
39
39
|
fractal_server/app/routes/api/v2/dataset.py,sha256=6u4MFqJ3YZ0Zq6Xx8CRMrTPKW55ZaR63Uno21DqFr4Q,8889
|
|
40
|
-
fractal_server/app/routes/api/v2/history.py,sha256=
|
|
41
|
-
fractal_server/app/routes/api/v2/images.py,sha256=
|
|
40
|
+
fractal_server/app/routes/api/v2/history.py,sha256=03QPe08pyy-NWEe21NVKprsLgqxljQO4gMZ8plt9wys,17112
|
|
41
|
+
fractal_server/app/routes/api/v2/images.py,sha256=amQz2uoaeSSuUeYfjfQ_zyEak6h_F7KSgI5RM81cqDI,7864
|
|
42
42
|
fractal_server/app/routes/api/v2/job.py,sha256=8xRTwh_OCHmK9IfI_zUASa2ozewR0qu0zVBl_a4IvHw,6467
|
|
43
|
-
fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=
|
|
43
|
+
fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=AEN6w2X5kCkSpZydudvuTPhl_VZUQ4zUav6D3NiF6r8,4935
|
|
44
44
|
fractal_server/app/routes/api/v2/project.py,sha256=ldMEyjtwGpX2teu85sCNWaubDFlw-En8U1SA7G1VaIw,4567
|
|
45
45
|
fractal_server/app/routes/api/v2/status_legacy.py,sha256=ZckHeBy8y21cyQ_OLY-VmkapzMhd3g9ae-qg-r4-uVo,6317
|
|
46
|
-
fractal_server/app/routes/api/v2/submit.py,sha256=
|
|
46
|
+
fractal_server/app/routes/api/v2/submit.py,sha256=3RPfpuMWEp-orB6iUQCQYmxXu9nRC0m1V5-dznsDrks,8780
|
|
47
47
|
fractal_server/app/routes/api/v2/task.py,sha256=ptS47XtxnHzk9bPNZV24Wfroo5sP19RE0-LsfX0ZvOc,7018
|
|
48
48
|
fractal_server/app/routes/api/v2/task_collection.py,sha256=UcS7tb9RjiDimeI-iWwD0wqnXYQEdEZT56PnPa0zC9Q,12233
|
|
49
|
-
fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=
|
|
50
|
-
fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=
|
|
51
|
-
fractal_server/app/routes/api/v2/task_group.py,sha256=
|
|
52
|
-
fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256
|
|
53
|
-
fractal_server/app/routes/api/v2/task_version_update.py,sha256=
|
|
54
|
-
fractal_server/app/routes/api/v2/workflow.py,sha256=
|
|
49
|
+
fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=j-vI1_FjoxU59VwkwUTYW5HhMVB5NObMkWLCjAKbers,6726
|
|
50
|
+
fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=1rCBfKANT9zcKcOVMQTByVpP8GjdrzeaMzyQT05k0nY,7517
|
|
51
|
+
fractal_server/app/routes/api/v2/task_group.py,sha256=DrXMc0D7IYqUsrlrpF5JO1zVKvx7RPdKPPOhz3FqqJE,9203
|
|
52
|
+
fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=itsldN_aYT_-wuCmwAoVKbH8D6eZpL_z89gCBZDM5cg,9996
|
|
53
|
+
fractal_server/app/routes/api/v2/task_version_update.py,sha256=RoeN21kYvBwc8xLcJZ8t0hZtl32P3FhMqiofntHyrjQ,8233
|
|
54
|
+
fractal_server/app/routes/api/v2/workflow.py,sha256=n0sRsDHGrjDAoo_0klqoYW4AuZ1LajWtlzEd6gKmvps,10697
|
|
55
55
|
fractal_server/app/routes/api/v2/workflow_import.py,sha256=kOGDaCj0jCGK1WSYGbnUjtUg2U1YxUY9UMH-2ilqJg4,9027
|
|
56
56
|
fractal_server/app/routes/api/v2/workflowtask.py,sha256=5_SQAG8ztDnaaRXwKalcO69HVpSl-QbrhiI7fCP3YRI,7924
|
|
57
57
|
fractal_server/app/routes/auth/__init__.py,sha256=fao6CS0WiAjHDTvBzgBVV_bSXFpEAeDBF6Z6q7rRkPc,1658
|
|
58
58
|
fractal_server/app/routes/auth/_aux_auth.py,sha256=UZgauY0V6mSqjte_sYI1cBl2h8bcbLaeWzgpl1jdJlk,4883
|
|
59
59
|
fractal_server/app/routes/auth/current_user.py,sha256=EjkwMxUA0l6FLbDJdertHGnuOoSS-HEysmm6l5FkAlY,5903
|
|
60
|
-
fractal_server/app/routes/auth/group.py,sha256=
|
|
60
|
+
fractal_server/app/routes/auth/group.py,sha256=VBeV5PbSYkyevvg2USrMPHR2sD1DUp8IsDyhC2Gb7vI,7888
|
|
61
61
|
fractal_server/app/routes/auth/login.py,sha256=tSu6OBLOieoBtMZB4JkBAdEgH2Y8KqPGSbwy7NIypIo,566
|
|
62
62
|
fractal_server/app/routes/auth/oauth.py,sha256=KCtJHSzemC4S8AfX9bLLdVhlF1nU4DOyox-sNQtcWew,1978
|
|
63
63
|
fractal_server/app/routes/auth/register.py,sha256=DlHq79iOvGd_gt2v9uwtsqIKeO6i_GKaW59VIkllPqY,587
|
|
@@ -67,7 +67,7 @@ fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
67
67
|
fractal_server/app/routes/aux/_job.py,sha256=XWyWpOObcV55YyK7uzGRlaslmPDCBZy4hiSZBpoa_bg,616
|
|
68
68
|
fractal_server/app/routes/aux/_runner.py,sha256=spNudutueHTBJPhm55RlOuYzb31DhyheSjl2rk6dloM,873
|
|
69
69
|
fractal_server/app/routes/aux/validate_user_settings.py,sha256=FLVi__8YFcm_6c_K5uMQo7raWWXQLBcZtx8yaPO4jaE,2301
|
|
70
|
-
fractal_server/app/routes/pagination.py,sha256=
|
|
70
|
+
fractal_server/app/routes/pagination.py,sha256=IGy8Ll5lYr6ENYE18h3huH5s0GMX1DCs5VdCi6j1cdk,1174
|
|
71
71
|
fractal_server/app/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
72
|
fractal_server/app/runner/components.py,sha256=-Ii5l8d_V6f5DFOd-Zsr8VYmOsyqw0Hox9fEFQiuqxY,66
|
|
73
73
|
fractal_server/app/runner/exceptions.py,sha256=tJxs7WCQ86kjezunFm4o_VAiUAyD70l3GiH6ht0waWA,3958
|
|
@@ -76,7 +76,7 @@ fractal_server/app/runner/executors/base_runner.py,sha256=7ujN6gN92X9sWAlDwkc07G
|
|
|
76
76
|
fractal_server/app/runner/executors/call_command_wrapper.py,sha256=1BHl-zbXoX2oGUWGAFprVZMmg5QjutPH0-VZJSIC0II,1419
|
|
77
77
|
fractal_server/app/runner/executors/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
78
|
fractal_server/app/runner/executors/local/get_local_config.py,sha256=KBYOkcuwpSYl-ZIAwPBxpn59QSyFF8eJ-fLKVIhwwzA,3594
|
|
79
|
-
fractal_server/app/runner/executors/local/runner.py,sha256=
|
|
79
|
+
fractal_server/app/runner/executors/local/runner.py,sha256=syJcUYkdKeGYbD33VzuX9Ysr7OjK34TkZjB7xvkzqXU,10838
|
|
80
80
|
fractal_server/app/runner/executors/slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
81
|
fractal_server/app/runner/executors/slurm_common/_batching.py,sha256=gbHZIxt90GjUwhB9_UInwVqpX-KdxRQMDeXzUagdL3U,8816
|
|
82
82
|
fractal_server/app/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
|
|
@@ -100,37 +100,37 @@ fractal_server/app/runner/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
100
100
|
fractal_server/app/runner/v2/_local.py,sha256=tTJgABK-zAZmmRzoie_MPNTXJx_zBAXiZiiWl1CC2qo,3035
|
|
101
101
|
fractal_server/app/runner/v2/_slurm_ssh.py,sha256=JlDngsVSOUNqEubDl-5jkIxQQmV4mhTqbMbJVY_rL6M,2840
|
|
102
102
|
fractal_server/app/runner/v2/_slurm_sudo.py,sha256=Gvsh4tUlc1_3KdF3B7zEqs-YIntC_joLtTGSNFbKKSs,2939
|
|
103
|
-
fractal_server/app/runner/v2/db_tools.py,sha256=
|
|
103
|
+
fractal_server/app/runner/v2/db_tools.py,sha256=ozp4RFLB3LNI0rM0q0udi6ja8-5vooH_dVqrbmTPNDg,3323
|
|
104
104
|
fractal_server/app/runner/v2/deduplicate_list.py,sha256=IVTE4abBU1bUprFTkxrTfYKnvkNTanWQ-KWh_etiT08,645
|
|
105
|
-
fractal_server/app/runner/v2/merge_outputs.py,sha256=
|
|
106
|
-
fractal_server/app/runner/v2/runner.py,sha256=
|
|
105
|
+
fractal_server/app/runner/v2/merge_outputs.py,sha256=YOTKbGOM9s-uqY4KN2onoIxuHNm-v3hr5zv6Aa1KEtA,905
|
|
106
|
+
fractal_server/app/runner/v2/runner.py,sha256=IsQhSxASVI-yPBO2G2uuVvZkRIoAlSY6Ev7gcSYmDOw,18989
|
|
107
107
|
fractal_server/app/runner/v2/runner_functions.py,sha256=aEwEDzI2l-QvgfJSj-M2LGvqA89nOiJYIFVryKEq_3M,18988
|
|
108
108
|
fractal_server/app/runner/v2/submit_workflow.py,sha256=AMnXdozwIGlXD55ch0_SNAG-ntKBO-QRhkbInrvsShU,13140
|
|
109
|
-
fractal_server/app/runner/v2/task_interface.py,sha256=
|
|
109
|
+
fractal_server/app/runner/v2/task_interface.py,sha256=BRSKpitGproY48JQdCbfrghbDonA-EqPP1yIopohpPo,2525
|
|
110
110
|
fractal_server/app/runner/versions.py,sha256=4BW-8Et8RVgILgpFoUJLWkEnZz53pv8hv_2ucG480ns,398
|
|
111
111
|
fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
|
|
112
112
|
fractal_server/app/schemas/user.py,sha256=t9nbyYjGCSOsxm9K97PDG3-9o27CsaFfhWb_L5nrjqA,1910
|
|
113
113
|
fractal_server/app/schemas/user_group.py,sha256=x3-kqbo0q2wTP7QI0iZ7PU_9Dr957UYrFMKqS7BXLhE,1425
|
|
114
114
|
fractal_server/app/schemas/user_settings.py,sha256=NpdC0Me0fgwwdfJuTSlFLCnLUjiWWzrJlPn_UPLjXnw,1862
|
|
115
115
|
fractal_server/app/schemas/v2/__init__.py,sha256=GqV6kJ0nKDq2vsSA4uph-nb5pmuaq013LUCcm9LbpLE,3097
|
|
116
|
-
fractal_server/app/schemas/v2/accounting.py,sha256=
|
|
116
|
+
fractal_server/app/schemas/v2/accounting.py,sha256=C_ekrYQwhi7PtrxxB07oVAG2y1NLigXjYwyp4E38fao,396
|
|
117
117
|
fractal_server/app/schemas/v2/dataset.py,sha256=NKCjBwGBC7mPiSlXktZAcleJsvlLY6KfNKw7Wx4Zfqk,1728
|
|
118
118
|
fractal_server/app/schemas/v2/dumps.py,sha256=MoQHjKZy-_ujSfr7XmZ6FjB_VR-zLedx9XJj_sp5xvc,2210
|
|
119
119
|
fractal_server/app/schemas/v2/history.py,sha256=pZiMKfh6nMWbTp5MUtrnGySPKbeRFf5tM1VLFaTgGcw,1784
|
|
120
120
|
fractal_server/app/schemas/v2/job.py,sha256=fPay7dLSr-skKRdVRoZig8rf_sZwUdVdHZaJ4XM8vMI,3288
|
|
121
121
|
fractal_server/app/schemas/v2/manifest.py,sha256=QUpXMDB8WkB1F4UK-yYmm3O8bXoHwDGURnqwn6ayO_I,6674
|
|
122
|
-
fractal_server/app/schemas/v2/project.py,sha256=
|
|
122
|
+
fractal_server/app/schemas/v2/project.py,sha256=7UC0aZLgtmkaAiPykeUj-9OZXhMkoyi3V-475UW_EQs,654
|
|
123
123
|
fractal_server/app/schemas/v2/status_legacy.py,sha256=eQT1zGxbkzSwd0EqclsOdZ60n1x6J3DB1CZ3m4LYyxc,955
|
|
124
124
|
fractal_server/app/schemas/v2/task.py,sha256=IJv8loB4kx9FBkaIHoiMsswQyq02FxvyAnHK1u074fU,4364
|
|
125
125
|
fractal_server/app/schemas/v2/task_collection.py,sha256=EPGe4bTRka-Y3S3_h6Wfmstq1889Cn-5cZ9ODdnsKG8,4154
|
|
126
126
|
fractal_server/app/schemas/v2/task_group.py,sha256=NwU3FRPzPtoEhunE7dcF3su20dxaL_4YJQw4fPnTcgo,3231
|
|
127
|
-
fractal_server/app/schemas/v2/workflow.py,sha256=
|
|
127
|
+
fractal_server/app/schemas/v2/workflow.py,sha256=L-dW6SzCH_VNoH6ENip44lTgGGqVYHHBk_3PtM-Ooy8,1772
|
|
128
128
|
fractal_server/app/schemas/v2/workflowtask.py,sha256=6eweAMyziwaoMT-7R1fVJYunIeZKzT0-7fAVgPO_FEc,3639
|
|
129
129
|
fractal_server/app/security/__init__.py,sha256=oJ8RVglpOvWPQY4RokiE2YA72Nqo42dZEjywWTt8xr8,14032
|
|
130
130
|
fractal_server/app/security/signup_email.py,sha256=Xd6QYxcdmg0PHpDwmUE8XQmPcOj3Xjy5oROcIMhmltM,1472
|
|
131
131
|
fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
|
|
132
|
-
fractal_server/config.py,sha256=
|
|
133
|
-
fractal_server/data_migrations/2_14_10.py,sha256=
|
|
132
|
+
fractal_server/config.py,sha256=oVNGnbyLhvVzcFnCPS4UCCEXbAVyACZR_u4fDsBa534,28337
|
|
133
|
+
fractal_server/data_migrations/2_14_10.py,sha256=jzMg2c1zNO8C_Nho_9_EZJD6kR1-gkFNpNrMR5Hr8hM,1598
|
|
134
134
|
fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
|
|
135
135
|
fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
|
|
136
136
|
fractal_server/exceptions.py,sha256=7ftpWwNsTQmNonWCynhH5ErUh1haPPhIaVPrNHla7-o,53
|
|
@@ -140,18 +140,18 @@ fractal_server/images/models.py,sha256=6WchcIzLLLwdkLNRfg71Dl4Y-9UFLPyrrzh1lWgju
|
|
|
140
140
|
fractal_server/images/status_tools.py,sha256=KICcThwHniHNkDftzJmK_n2gQK2IeTKlR_PFAesf204,4912
|
|
141
141
|
fractal_server/images/tools.py,sha256=92kmt2Fnyp8ycTbyuar9_U8kJTi0wKpBk8ZagARWl9Y,4177
|
|
142
142
|
fractal_server/logger.py,sha256=QIeVn3QpZsiIL2jDdrKotr-MLyDcZYgiPiTluFU46lE,5317
|
|
143
|
-
fractal_server/main.py,sha256=
|
|
143
|
+
fractal_server/main.py,sha256=0lh7JQGt7e6wekLHzhiSWURKzkE8GeRz6lhlCWjF8Ho,4560
|
|
144
144
|
fractal_server/migrations/env.py,sha256=nfyBpMIOT3kny6t-b-tUjyRjZ4k906bb1_wCQ7me1BI,1353
|
|
145
145
|
fractal_server/migrations/naming_convention.py,sha256=htbKrVdetx3pklowb_9Cdo5RqeF0fJ740DNecY5de_M,265
|
|
146
146
|
fractal_server/migrations/versions/034a469ec2eb_task_groups.py,sha256=vrPhC8hfFu1c4HmLHNZyCuqEfecFD8-bWc49bXMNes0,6199
|
|
147
147
|
fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py,sha256=-BSS9AFTPcu3gYC-sYbawSy4MWQQx8TfMb5BW5EBKmQ,1450
|
|
148
148
|
fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py,sha256=Q1Gj1cJ0UrdLBJ5AXfFK9QpxTtmcv-4Z3NEGDnxOme4,961
|
|
149
|
-
fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py,sha256=
|
|
149
|
+
fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py,sha256=7OW3HmqAePHx53OWdEPzNxvtupxSR0lB_6tZF1b3JIM,1604
|
|
150
150
|
fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py,sha256=lANgTox0rz459_yo1Rw7fGCT1qw5sUCUXTLUMc_Bzf8,911
|
|
151
151
|
fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py,sha256=vePkVm1iUHiPNKLQ3KR7BBLdHruqBdl87j_tUCbMbEA,1414
|
|
152
152
|
fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py,sha256=-wHe-fOffmYeAm0JXVl_lxZ7hhDkaEVqxgxpHkb_uL8,954
|
|
153
153
|
fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py,sha256=Mob8McGYAcmgvrseyyYOa54E6Gsgr-4SiGdC-r9O4_A,1157
|
|
154
|
-
fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py,sha256=
|
|
154
|
+
fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py,sha256=JOrVa6mGzqZ6H61YCFVOed64vFRjTWGWyN3z7NE3T08,3270
|
|
155
155
|
fractal_server/migrations/versions/50a13d6138fd_initial_schema.py,sha256=zwXegXs9J40eyCWi3w0c_iIBVJjXNn4VdVnQaT3KxDg,8770
|
|
156
156
|
fractal_server/migrations/versions/5bf02391cfef_v2.py,sha256=axhNkr_H6R4rRbY7oGYazNbFvPXeSyBDWFVbKNmiqs8,8433
|
|
157
157
|
fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=Q-DsMzG3IcUV2Ol1dhJWosDvKERamBE6QvA2zzS5zpQ,1632
|
|
@@ -192,21 +192,21 @@ fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39N
|
|
|
192
192
|
fractal_server/tasks/utils.py,sha256=V7dj8o2AnoHhGSTYlqJHcRFhCIpmOrMOUhtiE_DvRVA,291
|
|
193
193
|
fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
194
194
|
fractal_server/tasks/v2/local/__init__.py,sha256=S842wRersYKBKjc7xbmj0ov8b5i1YuCHa2f_yYuxcaI,312
|
|
195
|
-
fractal_server/tasks/v2/local/_utils.py,sha256=
|
|
196
|
-
fractal_server/tasks/v2/local/collect.py,sha256=
|
|
197
|
-
fractal_server/tasks/v2/local/collect_pixi.py,sha256=
|
|
198
|
-
fractal_server/tasks/v2/local/deactivate.py,sha256=
|
|
199
|
-
fractal_server/tasks/v2/local/deactivate_pixi.py,sha256=
|
|
195
|
+
fractal_server/tasks/v2/local/_utils.py,sha256=vhi0LKWXeU4-2xVYe1G52-wzfl11fxgkM9SDFGo-NlM,3485
|
|
196
|
+
fractal_server/tasks/v2/local/collect.py,sha256=mO1gDIQH5VbpvFQL4H37RhFRlQ1h7dInqy9RASiiBx4,11896
|
|
197
|
+
fractal_server/tasks/v2/local/collect_pixi.py,sha256=Ej4ovQeFZMTN-ZQNjMZDwRxSWivEWAS233CIZlEzWDc,10897
|
|
198
|
+
fractal_server/tasks/v2/local/deactivate.py,sha256=0gIOk8Cych-QCMwKPcw29tTly3pBzmWtqsJS8JseNyo,9730
|
|
199
|
+
fractal_server/tasks/v2/local/deactivate_pixi.py,sha256=x9YCILEP1EjCrZccAcj5C5i0NBzqSXQc2L-r3hfOL6s,3493
|
|
200
200
|
fractal_server/tasks/v2/local/reactivate.py,sha256=Q43DOadNeFyyfgNP67lUqaXmZsS6onv67XwxH_-5ANA,5756
|
|
201
|
-
fractal_server/tasks/v2/local/reactivate_pixi.py,sha256=
|
|
201
|
+
fractal_server/tasks/v2/local/reactivate_pixi.py,sha256=IuxDRaj8i6Rc582TIbc9HVKQ9pOvR4IepyXSaJx2PfQ,7565
|
|
202
202
|
fractal_server/tasks/v2/ssh/__init__.py,sha256=vX5aIM9Hbn2T_cIP_LrZ5ekRqJzYm_GSfp-4Iv7kqeI,300
|
|
203
|
-
fractal_server/tasks/v2/ssh/_utils.py,sha256=
|
|
204
|
-
fractal_server/tasks/v2/ssh/collect.py,sha256=
|
|
205
|
-
fractal_server/tasks/v2/ssh/collect_pixi.py,sha256=
|
|
206
|
-
fractal_server/tasks/v2/ssh/deactivate.py,sha256=
|
|
203
|
+
fractal_server/tasks/v2/ssh/_utils.py,sha256=jMe3eg2duad8wtGS_RD6oOIvA0LyJEg5cn--qanGuwE,4954
|
|
204
|
+
fractal_server/tasks/v2/ssh/collect.py,sha256=WesUBtNaax9ST7CtgqAD2qd-ZII4t1JFPzRzltEOuM8,14333
|
|
205
|
+
fractal_server/tasks/v2/ssh/collect_pixi.py,sha256=PWv-5cQFLA3n4NeFsTU-zfE1xWEy8LoLvHy41gRtWW8,14169
|
|
206
|
+
fractal_server/tasks/v2/ssh/deactivate.py,sha256=7gJ2mOah0wKwUnK0S9QpaXg08_WE95P0rC-oExAGhLE,12438
|
|
207
207
|
fractal_server/tasks/v2/ssh/deactivate_pixi.py,sha256=K0yK_NPUqhFMj6cp6G_0Kfn0Yo7oQux4kT5dFPulnos,4748
|
|
208
208
|
fractal_server/tasks/v2/ssh/reactivate.py,sha256=NJIgMNFKaXMhbvK0iZOsMwMtsms6Boj9f8N4L01X9Bo,8271
|
|
209
|
-
fractal_server/tasks/v2/ssh/reactivate_pixi.py,sha256=
|
|
209
|
+
fractal_server/tasks/v2/ssh/reactivate_pixi.py,sha256=JGP19nbmCCuE8Ya7sBfgrm78vORM0bF0tkt3bWakvF0,10281
|
|
210
210
|
fractal_server/tasks/v2/templates/1_create_venv.sh,sha256=PK0jdHKtQpda1zULebBaVPORt4t6V17wa4N1ohcj5ac,548
|
|
211
211
|
fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=jMJPQJXHKznO6fxOOXtFXKPdCmTf1VLLWj_JL_ZdKxo,1644
|
|
212
212
|
fractal_server/tasks/v2/templates/3_pip_freeze.sh,sha256=JldREScEBI4cD_qjfX4UK7V4aI-FnX9ZvVNxgpSOBFc,168
|
|
@@ -219,19 +219,19 @@ fractal_server/tasks/v2/templates/pixi_3_post_install.sh,sha256=99J8KXkNeQk9utuE
|
|
|
219
219
|
fractal_server/tasks/v2/utils_background.py,sha256=_4wGETgZ3JdnJXLYKSI0Lns8LwokJL-NEzUOK5SxCJU,4811
|
|
220
220
|
fractal_server/tasks/v2/utils_database.py,sha256=yi7793Uue32O59OBVUgomO42oUrVKdSKXoShBUNDdK0,1807
|
|
221
221
|
fractal_server/tasks/v2/utils_package_names.py,sha256=RDg__xrvQs4ieeVzmVdMcEh95vGQYrv9Hfal-5EDBM8,2393
|
|
222
|
-
fractal_server/tasks/v2/utils_pixi.py,sha256=
|
|
223
|
-
fractal_server/tasks/v2/utils_python_interpreter.py,sha256=
|
|
222
|
+
fractal_server/tasks/v2/utils_pixi.py,sha256=VNcHNaHH8uceEtBvuiD-hCjkJHutAP6F4BbEVrAKfbU,3102
|
|
223
|
+
fractal_server/tasks/v2/utils_python_interpreter.py,sha256=JOYHou_zgV83zsmNeR9tX0F2xjiYVwKvEASh9nIDGlw,956
|
|
224
224
|
fractal_server/tasks/v2/utils_templates.py,sha256=GR8z7ODkR9tLftNAI1g1NrtN7pvDGrasp2jIlfdg4cI,3518
|
|
225
225
|
fractal_server/types/__init__.py,sha256=aA_8J1xXzuiLqpwO_Qf18-qzaRcYkHzevhH_T-diXWM,2026
|
|
226
226
|
fractal_server/types/validators/__init__.py,sha256=5uj6KJ9MelFZgyoq3MzXLhgWCl0yiriS7XKmb0gathg,392
|
|
227
227
|
fractal_server/types/validators/_common_validators.py,sha256=MpxyaP2kwgbyCTOaVRjYnJ74Lfi0f2X0q3rjX9w3vTk,1170
|
|
228
|
-
fractal_server/types/validators/_filter_validators.py,sha256=
|
|
228
|
+
fractal_server/types/validators/_filter_validators.py,sha256=irmjzycmiR6F4fmWUeA45Pdh7AeLufwVjNItskDsknk,831
|
|
229
229
|
fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=HL7NgV8d56XbcD6gG5PVFUPMHjDm5Q-d7cXhVLdFAGU,387
|
|
230
230
|
fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
|
|
231
231
|
fractal_server/utils.py,sha256=Vn35lApt1T1J8nc09sAVqd10Cy0sa3dLipcljI-hkuk,2185
|
|
232
|
-
fractal_server/zip_tools.py,sha256=
|
|
233
|
-
fractal_server-2.15.
|
|
234
|
-
fractal_server-2.15.
|
|
235
|
-
fractal_server-2.15.
|
|
236
|
-
fractal_server-2.15.
|
|
237
|
-
fractal_server-2.15.
|
|
232
|
+
fractal_server/zip_tools.py,sha256=H0w7wS5yE4ebj7hw1_77YQ959dl2c-L0WX6J_ro1TY4,4884
|
|
233
|
+
fractal_server-2.15.4.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
|
234
|
+
fractal_server-2.15.4.dist-info/METADATA,sha256=xtZoBMySmrfFIEf-RXzQHmqZUUvZr2Ud1cyR1rMLqoM,4283
|
|
235
|
+
fractal_server-2.15.4.dist-info/WHEEL,sha256=7dDg4QLnNKTvwIDR9Ac8jJaAmBC_owJrckbC0jjThyA,88
|
|
236
|
+
fractal_server-2.15.4.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
|
237
|
+
fractal_server-2.15.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|