fractal-server 2.12.1__py3-none-any.whl → 2.13.1__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/security.py +9 -12
- fractal_server/app/models/v2/__init__.py +4 -0
- fractal_server/app/models/v2/accounting.py +35 -0
- fractal_server/app/models/v2/dataset.py +2 -2
- fractal_server/app/models/v2/job.py +11 -9
- fractal_server/app/models/v2/task.py +2 -3
- fractal_server/app/models/v2/task_group.py +6 -2
- fractal_server/app/models/v2/workflowtask.py +15 -8
- fractal_server/app/routes/admin/v2/__init__.py +4 -0
- fractal_server/app/routes/admin/v2/accounting.py +108 -0
- fractal_server/app/routes/admin/v2/impersonate.py +35 -0
- fractal_server/app/routes/admin/v2/job.py +5 -13
- fractal_server/app/routes/admin/v2/task.py +1 -1
- fractal_server/app/routes/admin/v2/task_group.py +5 -13
- fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +3 -3
- fractal_server/app/routes/api/v2/dataset.py +4 -4
- fractal_server/app/routes/api/v2/images.py +11 -11
- fractal_server/app/routes/api/v2/project.py +2 -2
- fractal_server/app/routes/api/v2/status.py +1 -1
- fractal_server/app/routes/api/v2/submit.py +9 -6
- fractal_server/app/routes/api/v2/task.py +4 -2
- fractal_server/app/routes/api/v2/task_collection.py +3 -2
- fractal_server/app/routes/api/v2/task_group.py +4 -7
- fractal_server/app/routes/api/v2/workflow.py +3 -3
- fractal_server/app/routes/api/v2/workflow_import.py +3 -3
- fractal_server/app/routes/api/v2/workflowtask.py +3 -1
- fractal_server/app/routes/auth/_aux_auth.py +4 -1
- fractal_server/app/routes/auth/current_user.py +3 -5
- fractal_server/app/routes/auth/group.py +1 -1
- fractal_server/app/routes/auth/users.py +2 -4
- fractal_server/app/routes/aux/__init__.py +0 -20
- fractal_server/app/routes/aux/_runner.py +1 -1
- fractal_server/app/routes/aux/validate_user_settings.py +1 -2
- fractal_server/app/runner/executors/_job_states.py +13 -0
- fractal_server/app/runner/executors/slurm/_slurm_config.py +26 -18
- fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -3
- fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +31 -22
- fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +2 -5
- fractal_server/app/runner/executors/slurm/ssh/executor.py +21 -27
- fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -3
- fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +1 -2
- fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +37 -47
- fractal_server/app/runner/executors/slurm/sudo/executor.py +25 -24
- fractal_server/app/runner/v2/__init__.py +4 -9
- fractal_server/app/runner/v2/_local/__init__.py +3 -0
- fractal_server/app/runner/v2/_local/_local_config.py +5 -4
- fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +4 -4
- fractal_server/app/runner/v2/_slurm_ssh/__init__.py +2 -0
- fractal_server/app/runner/v2/_slurm_sudo/__init__.py +4 -2
- fractal_server/app/runner/v2/deduplicate_list.py +1 -1
- fractal_server/app/runner/v2/runner.py +25 -10
- fractal_server/app/runner/v2/runner_functions.py +12 -11
- fractal_server/app/runner/v2/task_interface.py +15 -7
- fractal_server/app/schemas/_filter_validators.py +6 -3
- fractal_server/app/schemas/_validators.py +7 -5
- fractal_server/app/schemas/user.py +23 -18
- fractal_server/app/schemas/user_group.py +25 -11
- fractal_server/app/schemas/user_settings.py +31 -24
- fractal_server/app/schemas/v2/__init__.py +1 -0
- fractal_server/app/schemas/v2/accounting.py +18 -0
- fractal_server/app/schemas/v2/dataset.py +48 -35
- fractal_server/app/schemas/v2/dumps.py +16 -14
- fractal_server/app/schemas/v2/job.py +49 -29
- fractal_server/app/schemas/v2/manifest.py +32 -28
- fractal_server/app/schemas/v2/project.py +18 -8
- fractal_server/app/schemas/v2/task.py +86 -75
- fractal_server/app/schemas/v2/task_collection.py +41 -30
- fractal_server/app/schemas/v2/task_group.py +39 -20
- fractal_server/app/schemas/v2/workflow.py +24 -12
- fractal_server/app/schemas/v2/workflowtask.py +63 -61
- fractal_server/app/security/__init__.py +1 -1
- fractal_server/config.py +86 -73
- fractal_server/images/models.py +18 -12
- fractal_server/main.py +1 -1
- fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +57 -0
- fractal_server/tasks/v2/utils_background.py +2 -2
- fractal_server/tasks/v2/utils_database.py +1 -1
- {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/METADATA +9 -10
- {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/RECORD +83 -81
- fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -121
- fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -108
- fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -42
- fractal_server/app/runner/v2/_local_experimental/executor.py +0 -157
- {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/LICENSE +0 -0
- {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/WHEEL +0 -0
- {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
"""Add accounting tables
|
2
|
+
|
3
|
+
Revision ID: af1ef1c83c9b
|
4
|
+
Revises: 1eac13a26c83
|
5
|
+
Create Date: 2025-02-17 14:22:32.701581
|
6
|
+
|
7
|
+
"""
|
8
|
+
import sqlalchemy as sa
|
9
|
+
from alembic import op
|
10
|
+
from sqlalchemy.dialects import postgresql
|
11
|
+
|
12
|
+
# revision identifiers, used by Alembic.
|
13
|
+
revision = "af1ef1c83c9b"
|
14
|
+
down_revision = "1eac13a26c83"
|
15
|
+
branch_labels = None
|
16
|
+
depends_on = None
|
17
|
+
|
18
|
+
|
19
|
+
def upgrade() -> None:
|
20
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
21
|
+
op.create_table(
|
22
|
+
"accountingrecord",
|
23
|
+
sa.Column("id", sa.Integer(), nullable=False),
|
24
|
+
sa.Column("user_id", sa.Integer(), nullable=False),
|
25
|
+
sa.Column("timestamp", sa.DateTime(timezone=True), nullable=False),
|
26
|
+
sa.Column("num_tasks", sa.Integer(), nullable=False),
|
27
|
+
sa.Column("num_new_images", sa.Integer(), nullable=False),
|
28
|
+
sa.ForeignKeyConstraint(
|
29
|
+
["user_id"],
|
30
|
+
["user_oauth.id"],
|
31
|
+
name=op.f("fk_accountingrecord_user_id_user_oauth"),
|
32
|
+
),
|
33
|
+
sa.PrimaryKeyConstraint("id", name=op.f("pk_accountingrecord")),
|
34
|
+
)
|
35
|
+
op.create_table(
|
36
|
+
"accountingrecordslurm",
|
37
|
+
sa.Column("id", sa.Integer(), nullable=False),
|
38
|
+
sa.Column("user_id", sa.Integer(), nullable=False),
|
39
|
+
sa.Column("timestamp", sa.DateTime(timezone=True), nullable=False),
|
40
|
+
sa.Column(
|
41
|
+
"slurm_job_ids", postgresql.ARRAY(sa.Integer()), nullable=True
|
42
|
+
),
|
43
|
+
sa.ForeignKeyConstraint(
|
44
|
+
["user_id"],
|
45
|
+
["user_oauth.id"],
|
46
|
+
name=op.f("fk_accountingrecordslurm_user_id_user_oauth"),
|
47
|
+
),
|
48
|
+
sa.PrimaryKeyConstraint("id", name=op.f("pk_accountingrecordslurm")),
|
49
|
+
)
|
50
|
+
# ### end Alembic commands ###
|
51
|
+
|
52
|
+
|
53
|
+
def downgrade() -> None:
|
54
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
55
|
+
op.drop_table("accountingrecordslurm")
|
56
|
+
op.drop_table("accountingrecord")
|
57
|
+
# ### end Alembic commands ###
|
@@ -34,7 +34,7 @@ def fail_and_cleanup(
|
|
34
34
|
db: DBSyncSession,
|
35
35
|
):
|
36
36
|
logger = get_logger(logger_name)
|
37
|
-
logger.
|
37
|
+
logger.warning(
|
38
38
|
f"Task {task_group_activity.action} failed. "
|
39
39
|
f"Original error: {str(exception)}"
|
40
40
|
)
|
@@ -106,7 +106,7 @@ def _prepare_tasks_metadata(
|
|
106
106
|
] = f"{python_bin.as_posix()} {parallel_path.as_posix()}"
|
107
107
|
# Create object
|
108
108
|
task_obj = TaskCreateV2(
|
109
|
-
**_task.
|
109
|
+
**_task.model_dump(
|
110
110
|
exclude={
|
111
111
|
"executable_non_parallel",
|
112
112
|
"executable_parallel",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: fractal-server
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.13.1
|
4
4
|
Summary: Backend component of the Fractal analytics platform
|
5
5
|
Home-page: https://github.com/fractal-analytics-platform/fractal-server
|
6
6
|
License: BSD-3-Clause
|
@@ -13,22 +13,21 @@ Classifier: Programming Language :: Python :: 3.10
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
15
15
|
Requires-Dist: alembic (>=1.13.1,<2.0.0)
|
16
|
-
Requires-Dist: cloudpickle (>=3.
|
17
|
-
Requires-Dist:
|
18
|
-
Requires-Dist: cryptography (>=44.0.0,<44.1.0)
|
16
|
+
Requires-Dist: cloudpickle (>=3.1.0,<3.2.0)
|
17
|
+
Requires-Dist: cryptography (>=44.0.1,<44.1.0)
|
19
18
|
Requires-Dist: fabric (>=3.2.2,<3.3.0)
|
20
19
|
Requires-Dist: fastapi (>=0.115.0,<0.116.0)
|
21
20
|
Requires-Dist: fastapi-users[oauth] (>=14,<15)
|
22
|
-
Requires-Dist: gunicorn (>=
|
23
|
-
Requires-Dist: packaging (>=
|
24
|
-
Requires-Dist: psutil (==5.9.8)
|
21
|
+
Requires-Dist: gunicorn (>=23.0,<24.0)
|
22
|
+
Requires-Dist: packaging (>=24.0.0,<25.0.0)
|
25
23
|
Requires-Dist: psycopg[binary] (>=3.1.0,<4.0.0)
|
26
|
-
Requires-Dist: pydantic (>=
|
24
|
+
Requires-Dist: pydantic (>=2.10.0,<2.11.0)
|
25
|
+
Requires-Dist: pydantic-settings (>=2.7.0)
|
27
26
|
Requires-Dist: python-dotenv (>=1.0.0,<1.1.0)
|
28
27
|
Requires-Dist: sqlalchemy[asyncio] (>=2.0.23,<2.1)
|
29
|
-
Requires-Dist: sqlmodel (==0.0.
|
28
|
+
Requires-Dist: sqlmodel (==0.0.22)
|
30
29
|
Requires-Dist: uvicorn (>=0.29.0,<0.35.0)
|
31
|
-
Requires-Dist: uvicorn-worker (==0.
|
30
|
+
Requires-Dist: uvicorn-worker (==0.3.0)
|
32
31
|
Project-URL: Documentation, https://fractal-analytics-platform.github.io/fractal-server
|
33
32
|
Project-URL: Repository, https://github.com/fractal-analytics-platform/fractal-server
|
34
33
|
Project-URL: changelog, https://github.com/fractal-analytics-platform/fractal-server/blob/main/CHANGELOG.md
|
@@ -1,4 +1,4 @@
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
1
|
+
fractal_server/__init__.py,sha256=RVVgvOrf56lXdkkOitLzI3TL2D6aaRZrlU-iLjRWJ7w,23
|
2
2
|
fractal_server/__main__.py,sha256=igfS2XL3e8JycuhASl2vsYuIPma0MG0cfPPFRuQfh14,6906
|
3
3
|
fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
|
4
4
|
fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -6,74 +6,78 @@ fractal_server/app/db/__init__.py,sha256=wup2wcOkyOh8Vd0Xm76PZn_naxeMqaL4eF8DHHX
|
|
6
6
|
fractal_server/app/models/__init__.py,sha256=xJWiGAwpXmCpnFMC4c_HTqoUCzMOXrakoGLUH_uMvdA,415
|
7
7
|
fractal_server/app/models/linkusergroup.py,sha256=LWTUfhH2uAnn_4moK7QdRUIHWtpw-hPZuW-5jClv_OE,610
|
8
8
|
fractal_server/app/models/linkuserproject.py,sha256=hvaxh3Lkiy2uUCwB8gvn8RorCpvxSSdzWdCS_U1GL7g,315
|
9
|
-
fractal_server/app/models/security.py,sha256=
|
9
|
+
fractal_server/app/models/security.py,sha256=mMb_HiwWY74QZrs9xuyno0CVSmk4GYQWk5FxGixr8SU,3860
|
10
10
|
fractal_server/app/models/user_settings.py,sha256=Y-ZV-uZAFLZqXxy8c5_Qeh_F7zQuZDWOgLpU6Zs6iqU,1316
|
11
|
-
fractal_server/app/models/v2/__init__.py,sha256=
|
12
|
-
fractal_server/app/models/v2/
|
13
|
-
fractal_server/app/models/v2/
|
11
|
+
fractal_server/app/models/v2/__init__.py,sha256=TvY6VBvRG0XEfayCFNeaDxi0SZX_-rGPSvkoctl7wNM,666
|
12
|
+
fractal_server/app/models/v2/accounting.py,sha256=f2ALxfKKBNxFLJTtC2-YqRepVK253x68y7zkD2V_Nls,1115
|
13
|
+
fractal_server/app/models/v2/dataset.py,sha256=O5_6YfNeX6JM7PUcEZhbeV4JCvuAhFCQbOOuefpVnqc,1544
|
14
|
+
fractal_server/app/models/v2/job.py,sha256=L0P1mrztMqqb-6qdPEbuHXhCsf2mxVUct_ehcXrREGg,1844
|
14
15
|
fractal_server/app/models/v2/project.py,sha256=rAHoh5KfYwIaW7rTX0_O0jvWmxEvfo1BafvmcXuSSRk,786
|
15
|
-
fractal_server/app/models/v2/task.py,sha256=
|
16
|
-
fractal_server/app/models/v2/task_group.py,sha256=
|
16
|
+
fractal_server/app/models/v2/task.py,sha256=8KEROaadgccXRZIP7EriBp2j1FgzYkgiirOi5_fG79M,1494
|
17
|
+
fractal_server/app/models/v2/task_group.py,sha256=f-JiqAQAmXP2LOVKQM7Yq3qcEjI1KA-HFYsyLpBASGs,3499
|
17
18
|
fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO9VBlFCHiSps,1069
|
18
|
-
fractal_server/app/models/v2/workflowtask.py,sha256=
|
19
|
+
fractal_server/app/models/v2/workflowtask.py,sha256=919L2jCm9y57MXiezGBb28uiXpxyiSHwA_DkDF9OVjg,1226
|
19
20
|
fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
21
|
fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
-
fractal_server/app/routes/admin/v2/__init__.py,sha256=
|
22
|
-
fractal_server/app/routes/admin/v2/
|
22
|
+
fractal_server/app/routes/admin/v2/__init__.py,sha256=_5lqb6-M8-fZqE1HRMep6pAFYRUKMxrvbZOKs-RXWkw,933
|
23
|
+
fractal_server/app/routes/admin/v2/accounting.py,sha256=ueTGk9748d-gNorqCkkhddgGKzgpWVZQ4G0Loobl7eQ,3788
|
24
|
+
fractal_server/app/routes/admin/v2/impersonate.py,sha256=gc4lshfEPFR6W2asH7aKu6hqE6chzusdhAUVV9p51eU,1131
|
25
|
+
fractal_server/app/routes/admin/v2/job.py,sha256=4soc-5d99QEsir7U9AqpofgaGggSBwgMm7mXW5LBvSI,7439
|
23
26
|
fractal_server/app/routes/admin/v2/project.py,sha256=luy-yiGX1JYTdPm1hpIdDUUqPm8xHuipLy9k2X6zu74,1223
|
24
|
-
fractal_server/app/routes/admin/v2/task.py,sha256=
|
25
|
-
fractal_server/app/routes/admin/v2/task_group.py,sha256=
|
27
|
+
fractal_server/app/routes/admin/v2/task.py,sha256=h6O_DLYgp7KMExydPRO-1UsvsYj8S52E3CjslDNJZnA,4375
|
28
|
+
fractal_server/app/routes/admin/v2/task_group.py,sha256=XTjdqgABXZcx9EenaoqSmHh12BXSentUus3SV0oxBMs,7929
|
26
29
|
fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=0e0ZJ_k75TVHaT2o8Xk33DPDSgh-eBhZf-y4y7t-Adg,9429
|
27
30
|
fractal_server/app/routes/api/__init__.py,sha256=2IDheFi0OFdsUg7nbUiyahqybvpgXqeHUXIL2QtWrQQ,641
|
28
31
|
fractal_server/app/routes/api/v2/__init__.py,sha256=w4c9WzagaVV5d4TWBX5buu5ENk8jf3YftMQYmhavz9Q,2172
|
29
32
|
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=NJ6_1biN_hhIEK1w8Vj6XhLmdkQ5kMVd_MX5JC_nHLU,11524
|
30
|
-
fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=
|
33
|
+
fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=qdXCb6IP8-qPEAxGZKljtjIqNzIAyRaAsQSRi5VqFHM,6773
|
31
34
|
fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=uhNSs-jcS7ndIUFKiOC1yrDiViw3uvKEXi9UL04BMks,11642
|
32
|
-
fractal_server/app/routes/api/v2/dataset.py,sha256=
|
33
|
-
fractal_server/app/routes/api/v2/images.py,sha256=
|
35
|
+
fractal_server/app/routes/api/v2/dataset.py,sha256=tyZjoncjzWd3Bl3t1vBFNMIY1FVo0z23aagdFlNKX0Q,9465
|
36
|
+
fractal_server/app/routes/api/v2/images.py,sha256=32sSDSWri_A8uQHcdbVTPvGGEjj9vk5ILj8q0-2jLX8,8507
|
34
37
|
fractal_server/app/routes/api/v2/job.py,sha256=m89FTh9Px25oXCeWj2k2NdGWQaO2oxMh-6lZppcsJOY,5551
|
35
|
-
fractal_server/app/routes/api/v2/project.py,sha256=
|
36
|
-
fractal_server/app/routes/api/v2/status.py,sha256=
|
37
|
-
fractal_server/app/routes/api/v2/submit.py,sha256=
|
38
|
-
fractal_server/app/routes/api/v2/task.py,sha256=
|
39
|
-
fractal_server/app/routes/api/v2/task_collection.py,sha256=
|
38
|
+
fractal_server/app/routes/api/v2/project.py,sha256=3kMp1ValIVwY-qogfRNgWmSMk0jgsk1VJlY8MhwvH1Q,6665
|
39
|
+
fractal_server/app/routes/api/v2/status.py,sha256=Ls_TMPBE_pqOFsO1XBWf8NDSoQkle45XuI7clKwGouQ,6305
|
40
|
+
fractal_server/app/routes/api/v2/submit.py,sha256=K4OjcSg476JXIeeMUaYdTDk8Qpj5IO5UULvfErI7Y5Y,8624
|
41
|
+
fractal_server/app/routes/api/v2/task.py,sha256=z3_SxsXoKsbM9GGNJUdIiZisQwAJSBqvCc7thaJIOTU,7191
|
42
|
+
fractal_server/app/routes/api/v2/task_collection.py,sha256=IDNF6sjDuU37HIQ0TuQA-TZIuf7nfHAQXUUNmkrlhLM,12706
|
40
43
|
fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=cctW61-C2QYF2KXluS15lLhZJS_kt30Ca6UGLFO32z0,6207
|
41
|
-
fractal_server/app/routes/api/v2/task_group.py,sha256=
|
44
|
+
fractal_server/app/routes/api/v2/task_group.py,sha256=j3zDvVZizB7NWEgVgZU42JCXETkaVkk2ImJPr0jS7BQ,8164
|
42
45
|
fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=3o9bCC8ubMwffQPPaxQZy-CjH9IB2RkIReIecI6L2_w,9300
|
43
|
-
fractal_server/app/routes/api/v2/workflow.py,sha256=
|
44
|
-
fractal_server/app/routes/api/v2/workflow_import.py,sha256=
|
45
|
-
fractal_server/app/routes/api/v2/workflowtask.py,sha256=
|
46
|
+
fractal_server/app/routes/api/v2/workflow.py,sha256=Z71EI_WdLnaI0Z5OXy9RaAk_0xN9EHkhR5qieLtM8t0,11689
|
47
|
+
fractal_server/app/routes/api/v2/workflow_import.py,sha256=INmnhlMEBJp-vHPR0f940DANPmIidts3OfcooeM_aNA,11205
|
48
|
+
fractal_server/app/routes/api/v2/workflowtask.py,sha256=2Yxnis2O7X52e5DKa1GH-0-uPx2rKXSzPZKnEhi7cBY,11355
|
46
49
|
fractal_server/app/routes/auth/__init__.py,sha256=fao6CS0WiAjHDTvBzgBVV_bSXFpEAeDBF6Z6q7rRkPc,1658
|
47
|
-
fractal_server/app/routes/auth/_aux_auth.py,sha256=
|
48
|
-
fractal_server/app/routes/auth/current_user.py,sha256=
|
49
|
-
fractal_server/app/routes/auth/group.py,sha256=
|
50
|
+
fractal_server/app/routes/auth/_aux_auth.py,sha256=UZgauY0V6mSqjte_sYI1cBl2h8bcbLaeWzgpl1jdJlk,4883
|
51
|
+
fractal_server/app/routes/auth/current_user.py,sha256=FUegTahlxT3BdPVCQYir0-ogg2YAaZ1DYuLcE_5NC9Y,5906
|
52
|
+
fractal_server/app/routes/auth/group.py,sha256=EblxNVNTiPQj82eMaxNxf3OqoAbRLOExxCnm1-8C-k0,8364
|
50
53
|
fractal_server/app/routes/auth/login.py,sha256=tSu6OBLOieoBtMZB4JkBAdEgH2Y8KqPGSbwy7NIypIo,566
|
51
54
|
fractal_server/app/routes/auth/oauth.py,sha256=AnFHbjqL2AgBX3eksI931xD6RTtmbciHBEuGf9YJLjU,1895
|
52
55
|
fractal_server/app/routes/auth/register.py,sha256=DlHq79iOvGd_gt2v9uwtsqIKeO6i_GKaW59VIkllPqY,587
|
53
56
|
fractal_server/app/routes/auth/router.py,sha256=tzJrygXFZlmV_uWelVqTOJMEH-3Fr7ydwlgx1LxRjxY,527
|
54
|
-
fractal_server/app/routes/auth/users.py,sha256=
|
55
|
-
fractal_server/app/routes/aux/__init__.py,sha256=
|
57
|
+
fractal_server/app/routes/auth/users.py,sha256=Zr1Bsa7Hpricb_1uFwKPCtgt3PzGnP0TaMLMdpbQDNs,7825
|
58
|
+
fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
59
|
fractal_server/app/routes/aux/_job.py,sha256=XWyWpOObcV55YyK7uzGRlaslmPDCBZy4hiSZBpoa_bg,616
|
57
|
-
fractal_server/app/routes/aux/_runner.py,sha256=
|
58
|
-
fractal_server/app/routes/aux/validate_user_settings.py,sha256=
|
60
|
+
fractal_server/app/routes/aux/_runner.py,sha256=spNudutueHTBJPhm55RlOuYzb31DhyheSjl2rk6dloM,873
|
61
|
+
fractal_server/app/routes/aux/validate_user_settings.py,sha256=FLVi__8YFcm_6c_K5uMQo7raWWXQLBcZtx8yaPO4jaE,2301
|
59
62
|
fractal_server/app/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
60
63
|
fractal_server/app/runner/components.py,sha256=ZF8ct_Ky5k8IAcrmpYOZ-bc6OBgdELEighYVqFDEbZg,119
|
61
64
|
fractal_server/app/runner/compress_folder.py,sha256=HSc1tv7x2DBjBoXwugZlC79rm9GNBIWtQKK9yWn5ZBI,3991
|
62
65
|
fractal_server/app/runner/exceptions.py,sha256=_qZ_t8O4umAdJ1ikockiF5rDJuxnEskrGrLjZcnQl7A,4159
|
63
66
|
fractal_server/app/runner/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
67
|
+
fractal_server/app/runner/executors/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
|
64
68
|
fractal_server/app/runner/executors/slurm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
65
69
|
fractal_server/app/runner/executors/slurm/_batching.py,sha256=3mfeFuYm3UA4EXh4VWuqZTF-dcINECZgTHoPOaOszDo,8840
|
66
|
-
fractal_server/app/runner/executors/slurm/_slurm_config.py,sha256=
|
70
|
+
fractal_server/app/runner/executors/slurm/_slurm_config.py,sha256=8iZW8VdK0xvI9wZtXjRIlgnoI8hPmCqgcuX-IWIY18g,15866
|
67
71
|
fractal_server/app/runner/executors/slurm/remote.py,sha256=wLziIsGdSMiO-jIXM8x77JRK82g_2hx0iBKTiMghuIo,5852
|
68
|
-
fractal_server/app/runner/executors/slurm/ssh/__init__.py,sha256=
|
69
|
-
fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py,sha256=
|
70
|
-
fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py,sha256=
|
71
|
-
fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=
|
72
|
-
fractal_server/app/runner/executors/slurm/sudo/__init__.py,sha256=
|
73
|
-
fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py,sha256=
|
74
|
-
fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=
|
72
|
+
fractal_server/app/runner/executors/slurm/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
|
+
fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py,sha256=RsksZxMX41WCB53EfDj6Q34k61hv6raKJwCbmCs2OvM,3746
|
74
|
+
fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py,sha256=o9YZ-HslaMN1wbTYt6rNiOHA200Ptm27fKNOxTgjpxA,4399
|
75
|
+
fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=CKdmm-jlInZ0B5oZZalYKIO0_qoBRm_SOlGkY8wgfyI,53658
|
76
|
+
fractal_server/app/runner/executors/slurm/sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
|
+
fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py,sha256=ZlIjLU6NKyACGxBqtBw3-QAWVJKkYv6LICFZ2luJv9k,1912
|
78
|
+
fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=UiuONKeIwT7U7Ne68mOhlndb7MD2aHEuXzGd2zpdMrU,4062
|
75
79
|
fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py,sha256=g8wqUjSicN17UZVXlfaMomYZ-xOIbBu1oE7HdJTzfvw,5218
|
76
|
-
fractal_server/app/runner/executors/slurm/sudo/executor.py,sha256=
|
80
|
+
fractal_server/app/runner/executors/slurm/sudo/executor.py,sha256=3V0u3d5IMDoVSxkk76FVz7857iix1Sfi2VVi6aI2O5U,48559
|
77
81
|
fractal_server/app/runner/executors/slurm/utils_executors.py,sha256=naPyJI0I3lD-sYHbSXbMFGUBK4h_SggA5V91Z1Ch1Xg,1416
|
78
82
|
fractal_server/app/runner/extract_archive.py,sha256=tLpjDrX47OjTNhhoWvm6iNukg8KoieWyTb7ZfvE9eWU,2483
|
79
83
|
fractal_server/app/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
|
@@ -81,59 +85,56 @@ fractal_server/app/runner/run_subprocess.py,sha256=c3JbYXq3hX2aaflQU19qJ5Xs6J6oX
|
|
81
85
|
fractal_server/app/runner/set_start_and_last_task_index.py,sha256=-q4zVybAj8ek2XlbENKlfOAJ39hT_zoJoZkqzDqiAMY,1254
|
82
86
|
fractal_server/app/runner/shutdown.py,sha256=9pfSKHDNdIcm0eY-opgRTi7y0HmvfPmYiu9JR6Idark,2082
|
83
87
|
fractal_server/app/runner/task_files.py,sha256=sd_MpJ01C8c9QTO8GzGMidFGdlq_hXX_ARDRhd_YMnI,3762
|
84
|
-
fractal_server/app/runner/v2/__init__.py,sha256=
|
85
|
-
fractal_server/app/runner/v2/_local/__init__.py,sha256=
|
86
|
-
fractal_server/app/runner/v2/_local/_local_config.py,sha256=
|
88
|
+
fractal_server/app/runner/v2/__init__.py,sha256=Qa2HsdtFfFNCUsKPhDPwjoy5jRpDlIWeraLYsF0ytsY,14855
|
89
|
+
fractal_server/app/runner/v2/_local/__init__.py,sha256=URU4bQIFfTEJLJnp4iJLkyGDLKha1wkhskajNmLQfd4,5183
|
90
|
+
fractal_server/app/runner/v2/_local/_local_config.py,sha256=L54CYrkCyzwgUUra-YhnYR7fy2nyMl6GGu3-4hjoZ4U,3653
|
87
91
|
fractal_server/app/runner/v2/_local/_submit_setup.py,sha256=MucNOo8Er0F5ZIwH7CnTeXgnFMc6d3pKPkv563QNVi0,1630
|
88
92
|
fractal_server/app/runner/v2/_local/executor.py,sha256=QrJlD77G6q4WohoJQO7XXbvi2RlCUsNvMnPDEZIoAqA,3620
|
89
|
-
fractal_server/app/runner/v2/_local_experimental/__init__.py,sha256=d-9NkwoeUtvV7l_-7CUzmxgYQxMcyoK1-CrVcoyPgs8,4840
|
90
|
-
fractal_server/app/runner/v2/_local_experimental/_local_config.py,sha256=QiS5ODe-iGmUQdIT8QgpbyMc7-ZpIRv1V_f2q3qfPQ8,3211
|
91
|
-
fractal_server/app/runner/v2/_local_experimental/_submit_setup.py,sha256=we7r-sQf0CJ9gxbfbgHcYdC6pKjx8eXweljIjthxkv8,1212
|
92
|
-
fractal_server/app/runner/v2/_local_experimental/executor.py,sha256=plvEqqdcXOSohYsQoykYlyDwCING7OO5h-4XAZtwdPs,5503
|
93
93
|
fractal_server/app/runner/v2/_slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
94
|
-
fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py,sha256=
|
95
|
-
fractal_server/app/runner/v2/_slurm_ssh/__init__.py,sha256=
|
94
|
+
fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py,sha256=21Tl70L8oyo3H_r0vXW6KO9pq2IKEiV5ZkshsPsBjzI,6226
|
95
|
+
fractal_server/app/runner/v2/_slurm_ssh/__init__.py,sha256=qSRQrCSnPJJ-EwjdQP9sPPtn-Tm2e4zmgOJo2_bCtyU,3321
|
96
96
|
fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py,sha256=a5_FDPH_yxYmrjAjMRLgh_Y4DSG3mRslCLQodGM3-t4,2838
|
97
|
-
fractal_server/app/runner/v2/_slurm_sudo/__init__.py,sha256=
|
97
|
+
fractal_server/app/runner/v2/_slurm_sudo/__init__.py,sha256=F9YsldPrGeEYQ27jz6bn-Nf6u0bwOpmgFhZPXYlJ1fE,2968
|
98
98
|
fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py,sha256=a5_FDPH_yxYmrjAjMRLgh_Y4DSG3mRslCLQodGM3-t4,2838
|
99
|
-
fractal_server/app/runner/v2/deduplicate_list.py,sha256
|
99
|
+
fractal_server/app/runner/v2/deduplicate_list.py,sha256=IVTE4abBU1bUprFTkxrTfYKnvkNTanWQ-KWh_etiT08,645
|
100
100
|
fractal_server/app/runner/v2/handle_failed_job.py,sha256=-zFWw4d208bQEFUF_sAdH2LdHEARyg1FC8BENr1SjhU,2045
|
101
101
|
fractal_server/app/runner/v2/merge_outputs.py,sha256=D1L4Taieq9i71SPQyNc1kMokgHh-sV_MqF3bv7QMDBc,907
|
102
|
-
fractal_server/app/runner/v2/runner.py,sha256=
|
103
|
-
fractal_server/app/runner/v2/runner_functions.py,sha256=
|
102
|
+
fractal_server/app/runner/v2/runner.py,sha256=L1zvv5f4IuCW7DaJTxmznQO7LLIO8rdzpN_0WNhlDMs,12088
|
103
|
+
fractal_server/app/runner/v2/runner_functions.py,sha256=EnyHkMj7boM1MbS0DEGk2R_pJbVpspqt6BEHcSU7jBE,9548
|
104
104
|
fractal_server/app/runner/v2/runner_functions_low_level.py,sha256=1fWvQ6YZUUnDhO_mipXC5hnaT-zK-GHxg8ayoxZX82k,3648
|
105
|
-
fractal_server/app/runner/v2/task_interface.py,sha256=
|
105
|
+
fractal_server/app/runner/v2/task_interface.py,sha256=e1GGQSYd0MyBj1EZvEVzqv-HpVE4YffXOq82WLrCaOc,1866
|
106
106
|
fractal_server/app/runner/versions.py,sha256=dSaPRWqmFPHjg20kTCHmi_dmGNcCETflDtDLronNanU,852
|
107
107
|
fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
|
108
|
-
fractal_server/app/schemas/_filter_validators.py,sha256=
|
109
|
-
fractal_server/app/schemas/_validators.py,sha256=
|
110
|
-
fractal_server/app/schemas/user.py,sha256=
|
111
|
-
fractal_server/app/schemas/user_group.py,sha256=
|
112
|
-
fractal_server/app/schemas/user_settings.py,sha256=
|
113
|
-
fractal_server/app/schemas/v2/__init__.py,sha256=
|
114
|
-
fractal_server/app/schemas/v2/
|
115
|
-
fractal_server/app/schemas/v2/
|
116
|
-
fractal_server/app/schemas/v2/
|
117
|
-
fractal_server/app/schemas/v2/
|
118
|
-
fractal_server/app/schemas/v2/
|
108
|
+
fractal_server/app/schemas/_filter_validators.py,sha256=Gkf2USrkuxZx1TWeeMRmhgfmG60AAIDQfbaWslLsvJQ,1572
|
109
|
+
fractal_server/app/schemas/_validators.py,sha256=ap0VWJzOfPcq_tbH3sglZClkuinNvMjRq9fhTIdn-zk,3029
|
110
|
+
fractal_server/app/schemas/user.py,sha256=vLijVyPIQJdpFc36S6qK2XtSKMzfkhULN1nBsb9tV18,2407
|
111
|
+
fractal_server/app/schemas/user_group.py,sha256=Uao1igRYflBu7Dg6Zs0kaFU3zBFJzIwDLrkFfaJk6z8,2176
|
112
|
+
fractal_server/app/schemas/user_settings.py,sha256=4XeXQ3rnDS1UvLPd9hvh-WVSbzBGcMDjChfiZ_WGi-w,3134
|
113
|
+
fractal_server/app/schemas/v2/__init__.py,sha256=pjRUOJwZGzsDbBbxfnCgQgShs5V8SaHRqwIQDW3STpY,2676
|
114
|
+
fractal_server/app/schemas/v2/accounting.py,sha256=Wylt7uWTiDIFlHJOh4XEtYitk2FjFlmnodDrJDxcr0E,397
|
115
|
+
fractal_server/app/schemas/v2/dataset.py,sha256=FRJI1hWEjj7M_QhAq3mhWkmJ5lMKOtr1pXcUq-bH-Gk,5517
|
116
|
+
fractal_server/app/schemas/v2/dumps.py,sha256=2GUjoqeblUvrSoojBz5odoUUf53IABtbY_5GvFZoMVc,1782
|
117
|
+
fractal_server/app/schemas/v2/job.py,sha256=Dp_RRiC5uvJqq1fAJlBXztAFA-tS5FWuRnUbTnLtL6M,4226
|
118
|
+
fractal_server/app/schemas/v2/manifest.py,sha256=AhUkv3ZfoUffdcpHKOuUTmcZa-0G5Y53hp-O4UaTkG0,7133
|
119
|
+
fractal_server/app/schemas/v2/project.py,sha256=uqBreoS0UAkbVEJJS2HkSdjCCWfFIkv6N70TWk9HgxA,868
|
119
120
|
fractal_server/app/schemas/v2/status.py,sha256=SQaUpQkjFq5c5k5J4rOjNhuQaDOEg8lksPhkKmPU5VU,332
|
120
|
-
fractal_server/app/schemas/v2/task.py,sha256=
|
121
|
-
fractal_server/app/schemas/v2/task_collection.py,sha256=
|
122
|
-
fractal_server/app/schemas/v2/task_group.py,sha256=
|
123
|
-
fractal_server/app/schemas/v2/workflow.py,sha256
|
124
|
-
fractal_server/app/schemas/v2/workflowtask.py,sha256=
|
125
|
-
fractal_server/app/security/__init__.py,sha256=
|
121
|
+
fractal_server/app/schemas/v2/task.py,sha256=OUCNQQUULmWSOdPm8Dz8E0ivG1XOcvO4dxz-osSa9R0,7248
|
122
|
+
fractal_server/app/schemas/v2/task_collection.py,sha256=NFIcfTAhFN5LMxmyJCat7CKxUXq2CLEuWl5Hs0siZl8,6561
|
123
|
+
fractal_server/app/schemas/v2/task_group.py,sha256=vFF850kJRmmcxt2sn7nrhm-OWJHRhYu_XOQP5LNiXyU,3850
|
124
|
+
fractal_server/app/schemas/v2/workflow.py,sha256=qmKJZ9xZ6-sN41XdocZ7K6hum_pUfaMuKOJs_TlFCRQ,2211
|
125
|
+
fractal_server/app/schemas/v2/workflowtask.py,sha256=qMvwlnFCsnyD8uv8HJ4cFy2-QMm2ETUFlTIbxIFUWxk,8056
|
126
|
+
fractal_server/app/security/__init__.py,sha256=8dg7vBzLjU43p_eGoHuFBO97FtIDtNnbJJ5mzVSVRNI,14094
|
126
127
|
fractal_server/app/security/signup_email.py,sha256=CR1VbsGFNshxsWquLDZPbUAYnGzkCHeJChtncq63RBc,1434
|
127
128
|
fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
|
128
|
-
fractal_server/config.py,sha256=
|
129
|
+
fractal_server/config.py,sha256=16IxtLytZcUZCY1Bog0Vv9t20cK3vG0XyQ_y94DaOh8,28810
|
129
130
|
fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
|
130
131
|
fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
|
131
132
|
fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
|
132
133
|
fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTsyBpM,154
|
133
|
-
fractal_server/images/models.py,sha256=
|
134
|
+
fractal_server/images/models.py,sha256=jdGKMPi8WlO9Kvns4grIOU5LjujnvwIGjMFMC0wNy08,3501
|
134
135
|
fractal_server/images/tools.py,sha256=4kfPAFJJnvg7fM-cL0JMx97Dc1Npva_0ghitEji3JUU,3407
|
135
136
|
fractal_server/logger.py,sha256=5Z3rfsFwl8UysVljTOaaIvt8Pyp6CVH492ez3jE8WAw,5113
|
136
|
-
fractal_server/main.py,sha256=
|
137
|
+
fractal_server/main.py,sha256=FD9KzTTsXTQnTW0z3Hu7y0Nj_oAkBeZEInKDXFd4hjE,4561
|
137
138
|
fractal_server/migrations/env.py,sha256=nfyBpMIOT3kny6t-b-tUjyRjZ4k906bb1_wCQ7me1BI,1353
|
138
139
|
fractal_server/migrations/naming_convention.py,sha256=htbKrVdetx3pklowb_9Cdo5RqeF0fJ740DNecY5de_M,265
|
139
140
|
fractal_server/migrations/versions/034a469ec2eb_task_groups.py,sha256=vrPhC8hfFu1c4HmLHNZyCuqEfecFD8-bWc49bXMNes0,6199
|
@@ -157,6 +158,7 @@ fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py,sha256=0i
|
|
157
158
|
fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py,sha256=syONdZNf4-OnAcWIsbzXpYwpXPsXZ4SsmjwVvmVG0PU,2256
|
158
159
|
fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py,sha256=4l1AHGUsa0ONoJVZlr3fTXw_xbbQ8O7wlD92Az2aRfM,1849
|
159
160
|
fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py,sha256=ekDUML7ILpmdoqEclKbEUdyLi4uw9HSG_sTjG2hp_JE,867
|
161
|
+
fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py,sha256=BftudWuSGvKGBzIL5AMb3yWkgTAuaKPBGsYcOzp_gLQ,1899
|
160
162
|
fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py,sha256=9sLd0F7nO5chHHm7RZ4wBA-9bvWomS-av_odKwODADM,1551
|
161
163
|
fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py,sha256=HN3_Pk8G81SzdYjg4K1RZAyjKSlsZGvcYE2nWOUbwxQ,3861
|
162
164
|
fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py,sha256=6cHEZFuTXiQg9yu32Y3RH1XAl71av141WQ6UMbiITIg,949
|
@@ -189,16 +191,16 @@ fractal_server/tasks/v2/templates/3_pip_freeze.sh,sha256=JldREScEBI4cD_qjfX4UK7V
|
|
189
191
|
fractal_server/tasks/v2/templates/4_pip_show.sh,sha256=84NGHlg6JIbrQktgGKyfGsggPFzy6RBJuOmIpPUhsrw,1747
|
190
192
|
fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh,sha256=q-6ZUvA6w6FDVEoSd9O63LaJ9tKZc7qAFH72SGPrd_k,284
|
191
193
|
fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh,sha256=A2y8RngEjAcRhG-_owA6P7tAdrS_AszFuGXnaeMV8u0,1122
|
192
|
-
fractal_server/tasks/v2/utils_background.py,sha256=
|
193
|
-
fractal_server/tasks/v2/utils_database.py,sha256=
|
194
|
+
fractal_server/tasks/v2/utils_background.py,sha256=W_RvihI1aiYPJNsPo8z4wKuA_bPs0UT2huzLihRpjU4,4248
|
195
|
+
fractal_server/tasks/v2/utils_database.py,sha256=iLbwkxMxTCgpyKe1JQzdfIR3zBfxohgmLwSdGps1AUo,1274
|
194
196
|
fractal_server/tasks/v2/utils_package_names.py,sha256=RDg__xrvQs4ieeVzmVdMcEh95vGQYrv9Hfal-5EDBM8,2393
|
195
197
|
fractal_server/tasks/v2/utils_python_interpreter.py,sha256=5_wrlrTqXyo1YuLZvAW9hrSoh5MyLOzdPVUlUwM7uDQ,955
|
196
198
|
fractal_server/tasks/v2/utils_templates.py,sha256=07TZpJ0Mh_A4lXVXrrH2o1VLFFGwxeRumA6DdgMgCWk,2947
|
197
199
|
fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
|
198
200
|
fractal_server/utils.py,sha256=PMwrxWFxRTQRl1b9h-NRIbFGPKqpH_hXnkAT3NfZdpY,3571
|
199
201
|
fractal_server/zip_tools.py,sha256=GjDgo_sf6V_DDg6wWeBlZu5zypIxycn_l257p_YVKGc,4876
|
200
|
-
fractal_server-2.
|
201
|
-
fractal_server-2.
|
202
|
-
fractal_server-2.
|
203
|
-
fractal_server-2.
|
204
|
-
fractal_server-2.
|
202
|
+
fractal_server-2.13.1.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
203
|
+
fractal_server-2.13.1.dist-info/METADATA,sha256=xWwzGuagIVtTBtHUpvpmo3jk5NPwmDq71eZgGrKnYjI,4548
|
204
|
+
fractal_server-2.13.1.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
|
205
|
+
fractal_server-2.13.1.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
206
|
+
fractal_server-2.13.1.dist-info/RECORD,,
|
@@ -1,121 +0,0 @@
|
|
1
|
-
from concurrent.futures.process import BrokenProcessPool
|
2
|
-
from pathlib import Path
|
3
|
-
from typing import Optional
|
4
|
-
|
5
|
-
from ....models.v2 import DatasetV2
|
6
|
-
from ....models.v2 import WorkflowV2
|
7
|
-
from ...exceptions import JobExecutionError
|
8
|
-
from ...filenames import SHUTDOWN_FILENAME
|
9
|
-
from ...set_start_and_last_task_index import set_start_and_last_task_index
|
10
|
-
from ..runner import execute_tasks_v2
|
11
|
-
from ._submit_setup import _local_submit_setup
|
12
|
-
from .executor import FractalProcessPoolExecutor
|
13
|
-
from fractal_server.images.models import AttributeFiltersType
|
14
|
-
|
15
|
-
|
16
|
-
def process_workflow(
|
17
|
-
*,
|
18
|
-
workflow: WorkflowV2,
|
19
|
-
dataset: DatasetV2,
|
20
|
-
workflow_dir_local: Path,
|
21
|
-
workflow_dir_remote: Optional[Path] = None,
|
22
|
-
first_task_index: Optional[int] = None,
|
23
|
-
last_task_index: Optional[int] = None,
|
24
|
-
logger_name: str,
|
25
|
-
job_attribute_filters: AttributeFiltersType,
|
26
|
-
# Slurm-specific
|
27
|
-
user_cache_dir: Optional[str] = None,
|
28
|
-
slurm_user: Optional[str] = None,
|
29
|
-
slurm_account: Optional[str] = None,
|
30
|
-
worker_init: Optional[str] = None,
|
31
|
-
) -> None:
|
32
|
-
"""
|
33
|
-
Run a workflow
|
34
|
-
|
35
|
-
This function is responsible for running a workflow on some input data,
|
36
|
-
saving the output and taking care of any exception raised during the run.
|
37
|
-
|
38
|
-
NOTE: This is the `local_experimental` backend's public interface,
|
39
|
-
which also works as a reference implementation for other backends.
|
40
|
-
|
41
|
-
Args:
|
42
|
-
workflow:
|
43
|
-
The workflow to be run
|
44
|
-
dataset:
|
45
|
-
Initial dataset.
|
46
|
-
workflow_dir_local:
|
47
|
-
Working directory for this run.
|
48
|
-
workflow_dir_remote:
|
49
|
-
Working directory for this run, on the user side. This argument is
|
50
|
-
present for compatibility with the standard backend interface, but
|
51
|
-
for the `local` backend it cannot be different from
|
52
|
-
`workflow_dir_local`.
|
53
|
-
first_task_index:
|
54
|
-
Positional index of the first task to execute; if `None`, start
|
55
|
-
from `0`.
|
56
|
-
last_task_index:
|
57
|
-
Positional index of the last task to execute; if `None`, proceed
|
58
|
-
until the last task.
|
59
|
-
logger_name: Logger name
|
60
|
-
slurm_user:
|
61
|
-
Username to impersonate to run the workflow. This argument is
|
62
|
-
present for compatibility with the standard backend interface, but
|
63
|
-
is ignored in the `local` backend.
|
64
|
-
slurm_account:
|
65
|
-
SLURM account to use when running the workflow. This argument is
|
66
|
-
present for compatibility with the standard backend interface, but
|
67
|
-
is ignored in the `local` backend.
|
68
|
-
user_cache_dir:
|
69
|
-
Cache directory of the user who will run the workflow. This
|
70
|
-
argument is present for compatibility with the standard backend
|
71
|
-
interface, but is ignored in the `local` backend.
|
72
|
-
worker_init:
|
73
|
-
Any additional, usually backend specific, information to be passed
|
74
|
-
to the backend executor. This argument is present for compatibility
|
75
|
-
with the standard backend interface, but is ignored in the `local`
|
76
|
-
backend.
|
77
|
-
|
78
|
-
Raises:
|
79
|
-
TaskExecutionError: wrapper for errors raised during tasks' execution
|
80
|
-
(positive exit codes).
|
81
|
-
JobExecutionError: wrapper for errors raised by the tasks' executors
|
82
|
-
(negative exit codes).
|
83
|
-
"""
|
84
|
-
|
85
|
-
if workflow_dir_remote and (workflow_dir_remote != workflow_dir_local):
|
86
|
-
raise NotImplementedError(
|
87
|
-
"LocalExperimental backend does not support different directories "
|
88
|
-
f"{workflow_dir_local=} and {workflow_dir_remote=}"
|
89
|
-
)
|
90
|
-
|
91
|
-
# Set values of first_task_index and last_task_index
|
92
|
-
num_tasks = len(workflow.task_list)
|
93
|
-
first_task_index, last_task_index = set_start_and_last_task_index(
|
94
|
-
num_tasks,
|
95
|
-
first_task_index=first_task_index,
|
96
|
-
last_task_index=last_task_index,
|
97
|
-
)
|
98
|
-
|
99
|
-
with FractalProcessPoolExecutor(
|
100
|
-
shutdown_file=workflow_dir_local / SHUTDOWN_FILENAME
|
101
|
-
) as executor:
|
102
|
-
try:
|
103
|
-
execute_tasks_v2(
|
104
|
-
wf_task_list=workflow.task_list[
|
105
|
-
first_task_index : (last_task_index + 1)
|
106
|
-
],
|
107
|
-
dataset=dataset,
|
108
|
-
executor=executor,
|
109
|
-
workflow_dir_local=workflow_dir_local,
|
110
|
-
workflow_dir_remote=workflow_dir_local,
|
111
|
-
logger_name=logger_name,
|
112
|
-
submit_setup_call=_local_submit_setup,
|
113
|
-
job_attribute_filters=job_attribute_filters,
|
114
|
-
)
|
115
|
-
except BrokenProcessPool as e:
|
116
|
-
raise JobExecutionError(
|
117
|
-
info=(
|
118
|
-
"Job failed with BrokenProcessPool error, likely due to "
|
119
|
-
f"an executor shutdown.\nOriginal error:\n{e.args[0]}"
|
120
|
-
)
|
121
|
-
)
|
@@ -1,108 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Submodule to handle the local-backend configuration for a WorkflowTask
|
3
|
-
"""
|
4
|
-
import json
|
5
|
-
from pathlib import Path
|
6
|
-
from typing import Literal
|
7
|
-
from typing import Optional
|
8
|
-
|
9
|
-
from pydantic import BaseModel
|
10
|
-
from pydantic import Extra
|
11
|
-
from pydantic.error_wrappers import ValidationError
|
12
|
-
|
13
|
-
from .....config import get_settings
|
14
|
-
from .....syringe import Inject
|
15
|
-
from ....models.v2 import WorkflowTaskV2
|
16
|
-
|
17
|
-
|
18
|
-
class LocalBackendConfigError(ValueError):
|
19
|
-
"""
|
20
|
-
Local-backend configuration error
|
21
|
-
"""
|
22
|
-
|
23
|
-
pass
|
24
|
-
|
25
|
-
|
26
|
-
class LocalBackendConfig(BaseModel, extra=Extra.forbid):
|
27
|
-
"""
|
28
|
-
Specifications of the local-backend configuration
|
29
|
-
|
30
|
-
Attributes:
|
31
|
-
parallel_tasks_per_job:
|
32
|
-
Maximum number of tasks to be run in parallel as part of a call to
|
33
|
-
`FractalProcessPoolExecutor.map`; if `None`, then all tasks will
|
34
|
-
start at the same time.
|
35
|
-
"""
|
36
|
-
|
37
|
-
parallel_tasks_per_job: Optional[int]
|
38
|
-
|
39
|
-
|
40
|
-
def get_default_local_backend_config():
|
41
|
-
"""
|
42
|
-
Return a default `LocalBackendConfig` configuration object
|
43
|
-
"""
|
44
|
-
return LocalBackendConfig(parallel_tasks_per_job=None)
|
45
|
-
|
46
|
-
|
47
|
-
def get_local_backend_config(
|
48
|
-
wftask: WorkflowTaskV2,
|
49
|
-
which_type: Literal["non_parallel", "parallel"],
|
50
|
-
config_path: Optional[Path] = None,
|
51
|
-
) -> LocalBackendConfig:
|
52
|
-
"""
|
53
|
-
Prepare a `LocalBackendConfig` configuration object
|
54
|
-
|
55
|
-
The sources for `parallel_tasks_per_job` attributes, starting from the
|
56
|
-
highest-priority one, are
|
57
|
-
|
58
|
-
1. Properties in `wftask.meta_parallel` or `wftask.meta_non_parallel`
|
59
|
-
(depending on `which_type`);
|
60
|
-
2. The general content of the local-backend configuration file;
|
61
|
-
3. The default value (`None`).
|
62
|
-
|
63
|
-
Arguments:
|
64
|
-
wftask:
|
65
|
-
WorkflowTaskV2 for which the backend configuration should
|
66
|
-
be prepared.
|
67
|
-
config_path:
|
68
|
-
Path of local-backend configuration file; if `None`, use
|
69
|
-
`FRACTAL_LOCAL_CONFIG_FILE` variable from settings.
|
70
|
-
|
71
|
-
Returns:
|
72
|
-
A local-backend configuration object
|
73
|
-
"""
|
74
|
-
|
75
|
-
key = "parallel_tasks_per_job"
|
76
|
-
default_value = None
|
77
|
-
|
78
|
-
if which_type == "non_parallel":
|
79
|
-
wftask_meta = wftask.meta_non_parallel
|
80
|
-
elif which_type == "parallel":
|
81
|
-
wftask_meta = wftask.meta_parallel
|
82
|
-
else:
|
83
|
-
raise ValueError(
|
84
|
-
"`get_local_backend_config` received an invalid argument"
|
85
|
-
f" {which_type=}."
|
86
|
-
)
|
87
|
-
|
88
|
-
if wftask_meta and key in wftask_meta:
|
89
|
-
parallel_tasks_per_job = wftask_meta[key]
|
90
|
-
else:
|
91
|
-
if not config_path:
|
92
|
-
settings = Inject(get_settings)
|
93
|
-
config_path = settings.FRACTAL_LOCAL_CONFIG_FILE
|
94
|
-
if config_path is None:
|
95
|
-
parallel_tasks_per_job = default_value
|
96
|
-
else:
|
97
|
-
with config_path.open("r") as f:
|
98
|
-
env = json.load(f)
|
99
|
-
try:
|
100
|
-
_ = LocalBackendConfig(**env)
|
101
|
-
except ValidationError as e:
|
102
|
-
raise LocalBackendConfigError(
|
103
|
-
f"Error while loading {config_path=}. "
|
104
|
-
f"Original error:\n{str(e)}"
|
105
|
-
)
|
106
|
-
|
107
|
-
parallel_tasks_per_job = env.get(key, default_value)
|
108
|
-
return LocalBackendConfig(parallel_tasks_per_job=parallel_tasks_per_job)
|