fractal-server 2.14.15__py3-none-any.whl → 2.14.16__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/history.py +2 -0
- fractal_server/app/routes/api/v2/history.py +2 -2
- fractal_server/app/routes/api/v2/pre_submission_checks.py +3 -3
- fractal_server/app/runner/executors/slurm_ssh/runner.py +3 -1
- fractal_server/app/runner/v2/runner.py +2 -2
- fractal_server/images/status_tools.py +80 -75
- fractal_server/migrations/versions/791ce783d3d8_add_indices.py +41 -0
- fractal_server/ssh/_fabric.py +3 -0
- {fractal_server-2.14.15.dist-info → fractal_server-2.14.16.dist-info}/METADATA +4 -4
- {fractal_server-2.14.15.dist-info → fractal_server-2.14.16.dist-info}/RECORD +14 -13
- {fractal_server-2.14.15.dist-info → fractal_server-2.14.16.dist-info}/LICENSE +0 -0
- {fractal_server-2.14.15.dist-info → fractal_server-2.14.16.dist-info}/WHEEL +0 -0
- {fractal_server-2.14.15.dist-info → fractal_server-2.14.16.dist-info}/entry_points.txt +0 -0
fractal_server/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__VERSION__ = "2.14.
|
1
|
+
__VERSION__ = "2.14.16"
|
@@ -65,11 +65,13 @@ class HistoryImageCache(SQLModel, table=True):
|
|
65
65
|
primary_key=True,
|
66
66
|
foreign_key="datasetv2.id",
|
67
67
|
ondelete="CASCADE",
|
68
|
+
index=True,
|
68
69
|
)
|
69
70
|
workflowtask_id: int = Field(
|
70
71
|
primary_key=True,
|
71
72
|
foreign_key="workflowtaskv2.id",
|
72
73
|
ondelete="CASCADE",
|
74
|
+
index=True,
|
73
75
|
)
|
74
76
|
|
75
77
|
latest_history_unit_id: int = Field(
|
@@ -34,7 +34,7 @@ from fractal_server.app.schemas.v2 import HistoryUnitRead
|
|
34
34
|
from fractal_server.app.schemas.v2 import HistoryUnitStatus
|
35
35
|
from fractal_server.app.schemas.v2 import HistoryUnitStatusWithUnset
|
36
36
|
from fractal_server.app.schemas.v2 import ImageLogsRequest
|
37
|
-
from fractal_server.images.status_tools import
|
37
|
+
from fractal_server.images.status_tools import enrich_images_unsorted_async
|
38
38
|
from fractal_server.images.status_tools import IMAGE_STATUS_KEY
|
39
39
|
from fractal_server.images.tools import aggregate_attributes
|
40
40
|
from fractal_server.images.tools import aggregate_types
|
@@ -334,7 +334,7 @@ async def get_history_images(
|
|
334
334
|
types = aggregate_types(type_filtered_images)
|
335
335
|
|
336
336
|
# (3) Enrich images with status attribute
|
337
|
-
type_filtered_images_with_status = await
|
337
|
+
type_filtered_images_with_status = await enrich_images_unsorted_async(
|
338
338
|
dataset_id=dataset_id,
|
339
339
|
workflowtask_id=workflowtask_id,
|
340
340
|
images=type_filtered_images,
|
@@ -14,7 +14,7 @@ from fractal_server.app.models import UserOAuth
|
|
14
14
|
from fractal_server.app.routes.auth import current_active_user
|
15
15
|
from fractal_server.app.schemas.v2 import HistoryUnitStatus
|
16
16
|
from fractal_server.app.schemas.v2 import TaskType
|
17
|
-
from fractal_server.images.status_tools import
|
17
|
+
from fractal_server.images.status_tools import enrich_images_unsorted_async
|
18
18
|
from fractal_server.images.status_tools import IMAGE_STATUS_KEY
|
19
19
|
from fractal_server.images.tools import aggregate_types
|
20
20
|
from fractal_server.images.tools import filter_image_list
|
@@ -46,7 +46,7 @@ async def verify_unique_types(
|
|
46
46
|
filtered_images = dataset.images
|
47
47
|
else:
|
48
48
|
if IMAGE_STATUS_KEY in query.attribute_filters.keys():
|
49
|
-
images = await
|
49
|
+
images = await enrich_images_unsorted_async(
|
50
50
|
dataset_id=dataset_id,
|
51
51
|
workflowtask_id=workflowtask_id,
|
52
52
|
images=dataset.images,
|
@@ -134,7 +134,7 @@ async def check_non_processed_images(
|
|
134
134
|
attribute_filters=filters.attribute_filters,
|
135
135
|
)
|
136
136
|
|
137
|
-
filtered_images_with_status = await
|
137
|
+
filtered_images_with_status = await enrich_images_unsorted_async(
|
138
138
|
dataset_id=dataset_id,
|
139
139
|
workflowtask_id=previous_wft.id,
|
140
140
|
images=filtered_images,
|
@@ -40,8 +40,10 @@ class SlurmSSHRunner(BaseSlurmRunner):
|
|
40
40
|
self.fractal_ssh = fractal_ssh
|
41
41
|
logger.warning(self.fractal_ssh)
|
42
42
|
|
43
|
-
|
43
|
+
# Check SSH connection and try to recover from a closed-socket error
|
44
|
+
self.fractal_ssh.check_connection()
|
44
45
|
|
46
|
+
settings = Inject(get_settings)
|
45
47
|
super().__init__(
|
46
48
|
slurm_runner_type="ssh",
|
47
49
|
root_dir_local=root_dir_local,
|
@@ -32,7 +32,7 @@ from fractal_server.app.schemas.v2 import TaskDumpV2
|
|
32
32
|
from fractal_server.app.schemas.v2 import TaskGroupDumpV2
|
33
33
|
from fractal_server.app.schemas.v2 import TaskType
|
34
34
|
from fractal_server.images import SingleImage
|
35
|
-
from fractal_server.images.status_tools import
|
35
|
+
from fractal_server.images.status_tools import enrich_images_unsorted_sync
|
36
36
|
from fractal_server.images.status_tools import IMAGE_STATUS_KEY
|
37
37
|
from fractal_server.images.tools import filter_image_list
|
38
38
|
from fractal_server.images.tools import find_image_by_zarr_url
|
@@ -147,7 +147,7 @@ def execute_tasks_v2(
|
|
147
147
|
|
148
148
|
if ind_wftask == 0 and ENRICH_IMAGES_WITH_STATUS:
|
149
149
|
# FIXME: Could this be done on `type_filtered_images`?
|
150
|
-
tmp_images =
|
150
|
+
tmp_images = enrich_images_unsorted_sync(
|
151
151
|
images=tmp_images,
|
152
152
|
dataset_id=dataset.id,
|
153
153
|
workflowtask_id=wftask.id,
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import time
|
2
|
-
from copy import deepcopy
|
3
2
|
from typing import Any
|
4
3
|
|
5
4
|
from sqlalchemy import Select
|
@@ -11,7 +10,6 @@ from fractal_server.app.models.v2 import HistoryImageCache
|
|
11
10
|
from fractal_server.app.models.v2 import HistoryUnit
|
12
11
|
from fractal_server.app.schemas.v2 import HistoryUnitStatusWithUnset
|
13
12
|
from fractal_server.logger import set_logger
|
14
|
-
from fractal_server.types import ImageAttributeValue
|
15
13
|
|
16
14
|
logger = set_logger(__name__)
|
17
15
|
|
@@ -19,36 +17,84 @@ logger = set_logger(__name__)
|
|
19
17
|
IMAGE_STATUS_KEY = "__wftask_dataset_image_status__"
|
20
18
|
|
21
19
|
|
22
|
-
def _enriched_image(
|
23
|
-
|
24
|
-
|
20
|
+
def _enriched_image(
|
21
|
+
*,
|
22
|
+
img: dict[str, Any],
|
23
|
+
status: str,
|
24
|
+
) -> dict[str, Any]:
|
25
|
+
return img | {
|
26
|
+
"attributes": (img["attributes"] | {IMAGE_STATUS_KEY: status})
|
27
|
+
}
|
25
28
|
|
26
29
|
|
27
30
|
def _prepare_query(
|
28
31
|
*,
|
29
32
|
dataset_id: int,
|
30
33
|
workflowtask_id: int,
|
31
|
-
zarr_urls: list[str],
|
32
34
|
) -> Select:
|
35
|
+
"""
|
36
|
+
Note: the query does not include `.order_by`.
|
37
|
+
"""
|
33
38
|
stm = (
|
34
39
|
select(HistoryImageCache.zarr_url, HistoryUnit.status)
|
35
40
|
.join(HistoryUnit)
|
36
41
|
.where(HistoryImageCache.dataset_id == dataset_id)
|
37
42
|
.where(HistoryImageCache.workflowtask_id == workflowtask_id)
|
38
43
|
.where(HistoryImageCache.latest_history_unit_id == HistoryUnit.id)
|
39
|
-
.where(HistoryImageCache.zarr_url.in_(zarr_urls))
|
40
|
-
.order_by(HistoryImageCache.zarr_url)
|
41
44
|
)
|
42
45
|
return stm
|
43
46
|
|
44
47
|
|
45
|
-
|
48
|
+
def _postprocess_image_lists(
|
49
|
+
target_images: list[dict[str, Any]],
|
50
|
+
list_query_url_status: list[tuple[str, str]],
|
51
|
+
) -> list[dict[str, Any]]:
|
52
|
+
""" """
|
53
|
+
t_1 = time.perf_counter()
|
54
|
+
|
55
|
+
# Select only processed images that are part of the target image set
|
56
|
+
zarr_url_to_image = {img["zarr_url"]: img for img in target_images}
|
57
|
+
target_zarr_urls = zarr_url_to_image.keys()
|
58
|
+
list_processed_url_status = [
|
59
|
+
url_status
|
60
|
+
for url_status in list_query_url_status
|
61
|
+
if url_status[0] in target_zarr_urls
|
62
|
+
]
|
63
|
+
|
64
|
+
set_processed_urls = set(
|
65
|
+
url_status[0] for url_status in list_processed_url_status
|
66
|
+
)
|
67
|
+
processed_images_with_status = [
|
68
|
+
_enriched_image(
|
69
|
+
img=zarr_url_to_image[item[0]],
|
70
|
+
status=item[1],
|
71
|
+
)
|
72
|
+
for item in list_processed_url_status
|
73
|
+
]
|
74
|
+
|
75
|
+
non_processed_urls = target_zarr_urls - set_processed_urls
|
76
|
+
non_processed_images_with_status = [
|
77
|
+
_enriched_image(
|
78
|
+
img=zarr_url_to_image[zarr_url],
|
79
|
+
status=HistoryUnitStatusWithUnset.UNSET,
|
80
|
+
)
|
81
|
+
for zarr_url in non_processed_urls
|
82
|
+
]
|
83
|
+
t_2 = time.perf_counter()
|
84
|
+
logger.debug(
|
85
|
+
f"[enrich_images_async] post-processing, elapsed={t_2 - t_1:.5f} s"
|
86
|
+
)
|
87
|
+
|
88
|
+
return processed_images_with_status + non_processed_images_with_status
|
89
|
+
|
90
|
+
|
91
|
+
async def enrich_images_unsorted_async(
|
46
92
|
*,
|
47
93
|
images: list[dict[str, Any]],
|
48
94
|
dataset_id: int,
|
49
95
|
workflowtask_id: int,
|
50
96
|
db: AsyncSession,
|
51
|
-
) -> list[dict[str,
|
97
|
+
) -> list[dict[str, Any]]:
|
52
98
|
"""
|
53
99
|
Enrich images with a status-related attribute.
|
54
100
|
|
@@ -59,116 +105,75 @@ async def enrich_images_async(
|
|
59
105
|
db: An async db session
|
60
106
|
|
61
107
|
Returns:
|
62
|
-
The list of enriched images
|
108
|
+
The list of enriched images, not necessarily in the same order as
|
109
|
+
the input.
|
63
110
|
"""
|
64
111
|
t_0 = time.perf_counter()
|
65
112
|
logger.info(
|
66
113
|
f"[enrich_images_async] START, {dataset_id=}, {workflowtask_id=}"
|
67
114
|
)
|
68
115
|
|
69
|
-
|
70
|
-
|
116
|
+
# Get `(zarr_url, status)` for _all_ processed images (including those that
|
117
|
+
# are not part of the target image set)
|
71
118
|
res = await db.execute(
|
72
119
|
_prepare_query(
|
73
120
|
dataset_id=dataset_id,
|
74
121
|
workflowtask_id=workflowtask_id,
|
75
|
-
zarr_urls=zarr_url_to_image.keys(),
|
76
122
|
)
|
77
123
|
)
|
78
|
-
|
124
|
+
list_query_url_status = res.all()
|
79
125
|
t_1 = time.perf_counter()
|
80
|
-
logger.debug(f"[enrich_images_async]
|
126
|
+
logger.debug(f"[enrich_images_async] query, elapsed={t_1 - t_0:.5f} s")
|
81
127
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
img=zarr_url_to_image[item[0]],
|
86
|
-
status=item[1],
|
87
|
-
)
|
88
|
-
for item in list_processed_url_status
|
89
|
-
]
|
90
|
-
t_2 = time.perf_counter()
|
91
|
-
logger.debug(
|
92
|
-
"[enrich_images_async] processed-images, " f"elapsed={t_2 - t_1:.3f} s"
|
93
|
-
)
|
94
|
-
|
95
|
-
non_processed_urls = zarr_url_to_image.keys() - set_processed_urls
|
96
|
-
non_processed_images_with_status = [
|
97
|
-
_enriched_image(
|
98
|
-
img=zarr_url_to_image[zarr_url],
|
99
|
-
status=HistoryUnitStatusWithUnset.UNSET,
|
100
|
-
)
|
101
|
-
for zarr_url in non_processed_urls
|
102
|
-
]
|
103
|
-
t_3 = time.perf_counter()
|
104
|
-
logger.debug(
|
105
|
-
"[enrich_images_async] non-processed-images, "
|
106
|
-
f"elapsed={t_3 - t_2:.3f} s"
|
128
|
+
output = _postprocess_image_lists(
|
129
|
+
target_images=images,
|
130
|
+
list_query_url_status=list_query_url_status,
|
107
131
|
)
|
108
132
|
|
109
|
-
return
|
133
|
+
return output
|
110
134
|
|
111
135
|
|
112
|
-
def
|
136
|
+
def enrich_images_unsorted_sync(
|
113
137
|
*,
|
114
138
|
images: list[dict[str, Any]],
|
115
139
|
dataset_id: int,
|
116
140
|
workflowtask_id: int,
|
117
|
-
) -> list[dict[str,
|
141
|
+
) -> list[dict[str, Any]]:
|
118
142
|
"""
|
119
143
|
Enrich images with a status-related attribute.
|
120
144
|
|
145
|
+
|
121
146
|
Args:
|
122
147
|
images: The input image list
|
123
148
|
dataset_id: The dataset ID
|
124
149
|
workflowtask_id: The workflow-task ID
|
125
150
|
|
126
151
|
Returns:
|
127
|
-
The list of enriched images
|
152
|
+
The list of enriched images, not necessarily in the same order as
|
153
|
+
the input.
|
128
154
|
"""
|
155
|
+
|
129
156
|
t_0 = time.perf_counter()
|
130
157
|
logger.info(
|
131
158
|
f"[enrich_images_async] START, {dataset_id=}, {workflowtask_id=}"
|
132
159
|
)
|
133
160
|
|
134
|
-
|
161
|
+
# Get `(zarr_url, status)` for _all_ processed images (including those that
|
162
|
+
# are not part of the target image set)
|
135
163
|
with next(get_sync_db()) as db:
|
136
164
|
res = db.execute(
|
137
165
|
_prepare_query(
|
138
166
|
dataset_id=dataset_id,
|
139
167
|
workflowtask_id=workflowtask_id,
|
140
|
-
zarr_urls=zarr_url_to_image.keys(),
|
141
168
|
)
|
142
169
|
)
|
143
|
-
|
170
|
+
list_query_url_status = res.all()
|
144
171
|
t_1 = time.perf_counter()
|
145
|
-
logger.debug(f"[enrich_images_async]
|
146
|
-
|
147
|
-
set_processed_urls = set(item[0] for item in list_processed_url_status)
|
148
|
-
processed_images_with_status = [
|
149
|
-
_enriched_image(
|
150
|
-
img=zarr_url_to_image[item[0]],
|
151
|
-
status=item[1],
|
152
|
-
)
|
153
|
-
for item in list_processed_url_status
|
154
|
-
]
|
155
|
-
t_2 = time.perf_counter()
|
156
|
-
logger.debug(
|
157
|
-
"[enrich_images_async] processed-images, " f"elapsed={t_2 - t_1:.3f} s"
|
158
|
-
)
|
172
|
+
logger.debug(f"[enrich_images_async] query, elapsed={t_1 - t_0:.5f} s")
|
159
173
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
img=zarr_url_to_image[zarr_url],
|
164
|
-
status=HistoryUnitStatusWithUnset.UNSET,
|
165
|
-
)
|
166
|
-
for zarr_url in non_processed_urls
|
167
|
-
]
|
168
|
-
t_3 = time.perf_counter()
|
169
|
-
logger.debug(
|
170
|
-
"[enrich_images_async] non-processed-images, "
|
171
|
-
f"elapsed={t_3 - t_2:.3f} s"
|
174
|
+
output = _postprocess_image_lists(
|
175
|
+
target_images=images,
|
176
|
+
list_query_url_status=list_query_url_status,
|
172
177
|
)
|
173
178
|
|
174
|
-
return
|
179
|
+
return output
|
@@ -0,0 +1,41 @@
|
|
1
|
+
"""Add indices
|
2
|
+
|
3
|
+
Revision ID: 791ce783d3d8
|
4
|
+
Revises: 969d84257cac
|
5
|
+
Create Date: 2025-06-03 09:32:30.757651
|
6
|
+
|
7
|
+
"""
|
8
|
+
from alembic import op
|
9
|
+
|
10
|
+
|
11
|
+
# revision identifiers, used by Alembic.
|
12
|
+
revision = "791ce783d3d8"
|
13
|
+
down_revision = "969d84257cac"
|
14
|
+
branch_labels = None
|
15
|
+
depends_on = None
|
16
|
+
|
17
|
+
|
18
|
+
def upgrade() -> None:
|
19
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
20
|
+
with op.batch_alter_table("historyimagecache", schema=None) as batch_op:
|
21
|
+
batch_op.create_index(
|
22
|
+
batch_op.f("ix_historyimagecache_dataset_id"),
|
23
|
+
["dataset_id"],
|
24
|
+
unique=False,
|
25
|
+
)
|
26
|
+
batch_op.create_index(
|
27
|
+
batch_op.f("ix_historyimagecache_workflowtask_id"),
|
28
|
+
["workflowtask_id"],
|
29
|
+
unique=False,
|
30
|
+
)
|
31
|
+
|
32
|
+
# ### end Alembic commands ###
|
33
|
+
|
34
|
+
|
35
|
+
def downgrade() -> None:
|
36
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
37
|
+
with op.batch_alter_table("historyimagecache", schema=None) as batch_op:
|
38
|
+
batch_op.drop_index(batch_op.f("ix_historyimagecache_workflowtask_id"))
|
39
|
+
batch_op.drop_index(batch_op.f("ix_historyimagecache_dataset_id"))
|
40
|
+
|
41
|
+
# ### end Alembic commands ###
|
fractal_server/ssh/_fabric.py
CHANGED
@@ -642,6 +642,9 @@ class FractalSSHList:
|
|
642
642
|
connect_kwargs={
|
643
643
|
"key_filename": key_path,
|
644
644
|
"look_for_keys": False,
|
645
|
+
"banner_timeout": 30,
|
646
|
+
"auth_timeout": 30, # default value
|
647
|
+
"channel_timeout": 60 * 60, # default value
|
645
648
|
},
|
646
649
|
)
|
647
650
|
with _acquire_lock_with_timeout(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: fractal-server
|
3
|
-
Version: 2.14.
|
3
|
+
Version: 2.14.16
|
4
4
|
Summary: Backend component of the Fractal analytics platform
|
5
5
|
License: BSD-3-Clause
|
6
6
|
Author: Tommaso Comparin
|
@@ -11,16 +11,16 @@ Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
13
13
|
Requires-Dist: alembic (>=1.13.1,<2.0.0)
|
14
|
-
Requires-Dist: cryptography (>=
|
14
|
+
Requires-Dist: cryptography (>=45.0.3,<45.1.0)
|
15
15
|
Requires-Dist: fabric (>=3.2.2,<3.3.0)
|
16
16
|
Requires-Dist: fastapi (>=0.115.0,<0.116.0)
|
17
17
|
Requires-Dist: fastapi-users[oauth] (>=14,<15)
|
18
18
|
Requires-Dist: gunicorn (>=23.0,<24.0)
|
19
|
-
Requires-Dist: packaging (>=
|
19
|
+
Requires-Dist: packaging (>=25.0.0,<26.0.0)
|
20
20
|
Requires-Dist: psycopg[binary] (>=3.1.0,<4.0.0)
|
21
21
|
Requires-Dist: pydantic (>=2.11.0,<2.12.0)
|
22
22
|
Requires-Dist: pydantic-settings (>=2.7.0)
|
23
|
-
Requires-Dist: python-dotenv (>=1.
|
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
26
|
Requires-Dist: uvicorn (>=0.29.0,<0.35.0)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
1
|
+
fractal_server/__init__.py,sha256=gwWAj4n6TyJ-oQRbdVm1m1OqN5wobWHCuIFtGE6bVzs,24
|
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
|
@@ -11,7 +11,7 @@ fractal_server/app/models/user_settings.py,sha256=RxzRBGLHF_wc5csrTeHGUSV77Md_X0
|
|
11
11
|
fractal_server/app/models/v2/__init__.py,sha256=vjHwek7-IXmaZZL9VF0nD30YL9ca4wNc8P4RXJK_kDc,832
|
12
12
|
fractal_server/app/models/v2/accounting.py,sha256=i-2TsjqyuclxFQ21C-TeDoss7ZBTRuXdzIJfVr2UxwE,1081
|
13
13
|
fractal_server/app/models/v2/dataset.py,sha256=B_bPnYCSLRFN-vBIOc5nJ31JTruQPxLda9mqpPIJmGk,1209
|
14
|
-
fractal_server/app/models/v2/history.py,sha256=
|
14
|
+
fractal_server/app/models/v2/history.py,sha256=CBN2WVg9vW5pHU1RP8TkB_nnJrwnuifCcxgnd53UtEE,2163
|
15
15
|
fractal_server/app/models/v2/job.py,sha256=LfpwAedMVcA_6Ne0Rr4g3tt0asAQkWz3LSPm7IwZhYc,1978
|
16
16
|
fractal_server/app/models/v2/project.py,sha256=RmU5BQR4HD6xifRndUhvPBy30wntml-giBRoEysdWXw,755
|
17
17
|
fractal_server/app/models/v2/task.py,sha256=P7nsS5mCmVyzr4WtcjoiedesqkWvkHA2cQPsMbQt-7o,1427
|
@@ -37,10 +37,10 @@ fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py,sha256=WL
|
|
37
37
|
fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=MFYnyNPBACSHXTDLXe6cSennnpmlpajN84iivOOMW7Y,11599
|
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=
|
40
|
+
fractal_server/app/routes/api/v2/history.py,sha256=BHBZYFSF5lw-YYOl0OVV5yEZPMxiqjH72_KwR66EtaE,15495
|
41
41
|
fractal_server/app/routes/api/v2/images.py,sha256=TS1ltUhP0_SaViupdHrSh3MLDi5OVk-lOhE1VCVyZj0,7869
|
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=2jaaM5WJBTGpOWhm6a42JViT8j4X5hixltxIY1p-188,4936
|
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
46
|
fractal_server/app/routes/api/v2/submit.py,sha256=_BDkWtFdo8-p7kZ0Oxaidei04MfuBeaEsWtwJaKZQ_Y,8781
|
@@ -86,7 +86,7 @@ fractal_server/app/runner/executors/slurm_common/remote.py,sha256=xWnI6WktHR_7cx
|
|
86
86
|
fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py,sha256=K4SdJOKsUWzDlnkb8Ug_UmTx6nBMsTqn9_oKqwE4XDI,3520
|
87
87
|
fractal_server/app/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
88
|
fractal_server/app/runner/executors/slurm_ssh/run_subprocess.py,sha256=SyW6t4egvbiARph2YkFjc88Hj94fCamZVi50L7ph8VM,996
|
89
|
-
fractal_server/app/runner/executors/slurm_ssh/runner.py,sha256=
|
89
|
+
fractal_server/app/runner/executors/slurm_ssh/runner.py,sha256=Hzq01rLgOEzS6UPMzW59d4Ox-wwHlxyPF1KiKcGQvIM,7993
|
90
90
|
fractal_server/app/runner/executors/slurm_ssh/tar_commands.py,sha256=g173siyv7qtjov5i-CjTVRT8d19ibK8re3RVWbsdHYA,1845
|
91
91
|
fractal_server/app/runner/executors/slurm_sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
92
92
|
fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=W-FxnVcHxMGpv4zGgJVttVQoweyGgR4uBxO22QIZkp0,2576
|
@@ -102,7 +102,7 @@ fractal_server/app/runner/v2/_slurm_sudo.py,sha256=Gvsh4tUlc1_3KdF3B7zEqs-YIntC_
|
|
102
102
|
fractal_server/app/runner/v2/db_tools.py,sha256=du5dKhMMFMErQXbGIgu9JvO_vtMensodyPsyDeqz1yQ,3324
|
103
103
|
fractal_server/app/runner/v2/deduplicate_list.py,sha256=IVTE4abBU1bUprFTkxrTfYKnvkNTanWQ-KWh_etiT08,645
|
104
104
|
fractal_server/app/runner/v2/merge_outputs.py,sha256=D1L4Taieq9i71SPQyNc1kMokgHh-sV_MqF3bv7QMDBc,907
|
105
|
-
fractal_server/app/runner/v2/runner.py,sha256=
|
105
|
+
fractal_server/app/runner/v2/runner.py,sha256=84aEfpMMEXxCWyhJckGpkC9REEoBNnV_MshAMuwKZlE,18990
|
106
106
|
fractal_server/app/runner/v2/runner_functions.py,sha256=aEwEDzI2l-QvgfJSj-M2LGvqA89nOiJYIFVryKEq_3M,18988
|
107
107
|
fractal_server/app/runner/v2/submit_workflow.py,sha256=AMnXdozwIGlXD55ch0_SNAG-ntKBO-QRhkbInrvsShU,13140
|
108
108
|
fractal_server/app/runner/v2/task_interface.py,sha256=V2TWBK6tbhycyMrJvFaoJ9IpuKlrLrvmjJbfNMsBBXo,2527
|
@@ -136,7 +136,7 @@ fractal_server/exceptions.py,sha256=7ftpWwNsTQmNonWCynhH5ErUh1haPPhIaVPrNHla7-o,
|
|
136
136
|
fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
|
137
137
|
fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTsyBpM,154
|
138
138
|
fractal_server/images/models.py,sha256=6WchcIzLLLwdkLNRfg71Dl4Y-9UFLPyrrzh1lWgjuP0,1245
|
139
|
-
fractal_server/images/status_tools.py,sha256=
|
139
|
+
fractal_server/images/status_tools.py,sha256=KICcThwHniHNkDftzJmK_n2gQK2IeTKlR_PFAesf204,4912
|
140
140
|
fractal_server/images/tools.py,sha256=92kmt2Fnyp8ycTbyuar9_U8kJTi0wKpBk8ZagARWl9Y,4177
|
141
141
|
fractal_server/logger.py,sha256=QIeVn3QpZsiIL2jDdrKotr-MLyDcZYgiPiTluFU46lE,5317
|
142
142
|
fractal_server/main.py,sha256=FD9KzTTsXTQnTW0z3Hu7y0Nj_oAkBeZEInKDXFd4hjE,4561
|
@@ -155,6 +155,7 @@ fractal_server/migrations/versions/50a13d6138fd_initial_schema.py,sha256=zwXegXs
|
|
155
155
|
fractal_server/migrations/versions/5bf02391cfef_v2.py,sha256=axhNkr_H6R4rRbY7oGYazNbFvPXeSyBDWFVbKNmiqs8,8433
|
156
156
|
fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=Q-DsMzG3IcUV2Ol1dhJWosDvKERamBE6QvA2zzS5zpQ,1632
|
157
157
|
fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py,sha256=mbWuCkTpRAdGbRhW7lhXs_e5S6O37UAcCN6JfoY5H8A,1353
|
158
|
+
fractal_server/migrations/versions/791ce783d3d8_add_indices.py,sha256=gNE6AgJgeJZY99Fbd336Z9see3gRMQvuNBC0xDk_5sw,1154
|
158
159
|
fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py,sha256=NSCuhANChsg76vBkShBl-9tQ4VEHubOjtAv1etHhlvY,2684
|
159
160
|
fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py,sha256=68y9-fpSuKx6KPtM_9n8Ho0I1qwa8IoG-yJqXUYQrGg,1111
|
160
161
|
fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py,sha256=6pgODDtyAxevZvAJBj9IJ41inhV1RpwbpZr_qfPPu1A,1115
|
@@ -181,7 +182,7 @@ fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.p
|
|
181
182
|
fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py,sha256=TDWCaIoM0Q4SpRWmR9zr_rdp3lJXhCfBPTMhtrP5xYE,3950
|
182
183
|
fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
183
184
|
fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
|
184
|
-
fractal_server/ssh/_fabric.py,sha256=
|
185
|
+
fractal_server/ssh/_fabric.py,sha256=AK5E2LXVv0fNilSCy4Zufh0D5QdMozL4OtvNKgMSli4,24155
|
185
186
|
fractal_server/string_tools.py,sha256=qLB5u6-4QxXPiZrUeWn_cEo47axj4OXFzDd47kNTIWw,1847
|
186
187
|
fractal_server/syringe.py,sha256=3YJeIALH-wibuJ9R5VMNYUWh7x1-MkWT0SqGcWG5MY8,2795
|
187
188
|
fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
|
@@ -216,8 +217,8 @@ fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=HL
|
|
216
217
|
fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
|
217
218
|
fractal_server/utils.py,sha256=Vn35lApt1T1J8nc09sAVqd10Cy0sa3dLipcljI-hkuk,2185
|
218
219
|
fractal_server/zip_tools.py,sha256=tqz_8f-vQ9OBRW-4OQfO6xxY-YInHTyHmZxU7U4PqZo,4885
|
219
|
-
fractal_server-2.14.
|
220
|
-
fractal_server-2.14.
|
221
|
-
fractal_server-2.14.
|
222
|
-
fractal_server-2.14.
|
223
|
-
fractal_server-2.14.
|
220
|
+
fractal_server-2.14.16.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
221
|
+
fractal_server-2.14.16.dist-info/METADATA,sha256=ose9XmKdvMaW1w7zsAUu1gIEy62J4B8OxawPGpmLNrs,4244
|
222
|
+
fractal_server-2.14.16.dist-info/WHEEL,sha256=7dDg4QLnNKTvwIDR9Ac8jJaAmBC_owJrckbC0jjThyA,88
|
223
|
+
fractal_server-2.14.16.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
224
|
+
fractal_server-2.14.16.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|