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.
Files changed (87) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/app/models/security.py +9 -12
  3. fractal_server/app/models/v2/__init__.py +4 -0
  4. fractal_server/app/models/v2/accounting.py +35 -0
  5. fractal_server/app/models/v2/dataset.py +2 -2
  6. fractal_server/app/models/v2/job.py +11 -9
  7. fractal_server/app/models/v2/task.py +2 -3
  8. fractal_server/app/models/v2/task_group.py +6 -2
  9. fractal_server/app/models/v2/workflowtask.py +15 -8
  10. fractal_server/app/routes/admin/v2/__init__.py +4 -0
  11. fractal_server/app/routes/admin/v2/accounting.py +108 -0
  12. fractal_server/app/routes/admin/v2/impersonate.py +35 -0
  13. fractal_server/app/routes/admin/v2/job.py +5 -13
  14. fractal_server/app/routes/admin/v2/task.py +1 -1
  15. fractal_server/app/routes/admin/v2/task_group.py +5 -13
  16. fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +3 -3
  17. fractal_server/app/routes/api/v2/dataset.py +4 -4
  18. fractal_server/app/routes/api/v2/images.py +11 -11
  19. fractal_server/app/routes/api/v2/project.py +2 -2
  20. fractal_server/app/routes/api/v2/status.py +1 -1
  21. fractal_server/app/routes/api/v2/submit.py +9 -6
  22. fractal_server/app/routes/api/v2/task.py +4 -2
  23. fractal_server/app/routes/api/v2/task_collection.py +3 -2
  24. fractal_server/app/routes/api/v2/task_group.py +4 -7
  25. fractal_server/app/routes/api/v2/workflow.py +3 -3
  26. fractal_server/app/routes/api/v2/workflow_import.py +3 -3
  27. fractal_server/app/routes/api/v2/workflowtask.py +3 -1
  28. fractal_server/app/routes/auth/_aux_auth.py +4 -1
  29. fractal_server/app/routes/auth/current_user.py +3 -5
  30. fractal_server/app/routes/auth/group.py +1 -1
  31. fractal_server/app/routes/auth/users.py +2 -4
  32. fractal_server/app/routes/aux/__init__.py +0 -20
  33. fractal_server/app/routes/aux/_runner.py +1 -1
  34. fractal_server/app/routes/aux/validate_user_settings.py +1 -2
  35. fractal_server/app/runner/executors/_job_states.py +13 -0
  36. fractal_server/app/runner/executors/slurm/_slurm_config.py +26 -18
  37. fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -3
  38. fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +31 -22
  39. fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +2 -5
  40. fractal_server/app/runner/executors/slurm/ssh/executor.py +21 -27
  41. fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -3
  42. fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +1 -2
  43. fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +37 -47
  44. fractal_server/app/runner/executors/slurm/sudo/executor.py +25 -24
  45. fractal_server/app/runner/v2/__init__.py +4 -9
  46. fractal_server/app/runner/v2/_local/__init__.py +3 -0
  47. fractal_server/app/runner/v2/_local/_local_config.py +5 -4
  48. fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +4 -4
  49. fractal_server/app/runner/v2/_slurm_ssh/__init__.py +2 -0
  50. fractal_server/app/runner/v2/_slurm_sudo/__init__.py +4 -2
  51. fractal_server/app/runner/v2/deduplicate_list.py +1 -1
  52. fractal_server/app/runner/v2/runner.py +25 -10
  53. fractal_server/app/runner/v2/runner_functions.py +12 -11
  54. fractal_server/app/runner/v2/task_interface.py +15 -7
  55. fractal_server/app/schemas/_filter_validators.py +6 -3
  56. fractal_server/app/schemas/_validators.py +7 -5
  57. fractal_server/app/schemas/user.py +23 -18
  58. fractal_server/app/schemas/user_group.py +25 -11
  59. fractal_server/app/schemas/user_settings.py +31 -24
  60. fractal_server/app/schemas/v2/__init__.py +1 -0
  61. fractal_server/app/schemas/v2/accounting.py +18 -0
  62. fractal_server/app/schemas/v2/dataset.py +48 -35
  63. fractal_server/app/schemas/v2/dumps.py +16 -14
  64. fractal_server/app/schemas/v2/job.py +49 -29
  65. fractal_server/app/schemas/v2/manifest.py +32 -28
  66. fractal_server/app/schemas/v2/project.py +18 -8
  67. fractal_server/app/schemas/v2/task.py +86 -75
  68. fractal_server/app/schemas/v2/task_collection.py +41 -30
  69. fractal_server/app/schemas/v2/task_group.py +39 -20
  70. fractal_server/app/schemas/v2/workflow.py +24 -12
  71. fractal_server/app/schemas/v2/workflowtask.py +63 -61
  72. fractal_server/app/security/__init__.py +1 -1
  73. fractal_server/config.py +86 -73
  74. fractal_server/images/models.py +18 -12
  75. fractal_server/main.py +1 -1
  76. fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +57 -0
  77. fractal_server/tasks/v2/utils_background.py +2 -2
  78. fractal_server/tasks/v2/utils_database.py +1 -1
  79. {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/METADATA +9 -10
  80. {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/RECORD +83 -81
  81. fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -121
  82. fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -108
  83. fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -42
  84. fractal_server/app/runner/v2/_local_experimental/executor.py +0 -157
  85. {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/LICENSE +0 -0
  86. {fractal_server-2.12.1.dist-info → fractal_server-2.13.1.dist-info}/WHEEL +0 -0
  87. {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.error(
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.dict(
109
+ **_task.model_dump(
110
110
  exclude={
111
111
  "executable_non_parallel",
112
112
  "executable_parallel",
@@ -33,7 +33,7 @@ def create_db_tasks_and_update_task_group(
33
33
  """
34
34
  actual_task_list = [
35
35
  TaskV2(
36
- **task.dict(),
36
+ **task.model_dump(),
37
37
  type=_get_task_type(task),
38
38
  )
39
39
  for task in task_list
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fractal-server
3
- Version: 2.12.1
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.0.0,<3.1.0)
17
- Requires-Dist: clusterfutures (==0.5)
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 (>=21.2,<23.0)
23
- Requires-Dist: packaging (>=23.2.0,<24.0.0)
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 (>=1.10.8,<2)
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.21)
28
+ Requires-Dist: sqlmodel (==0.0.22)
30
29
  Requires-Dist: uvicorn (>=0.29.0,<0.35.0)
31
- Requires-Dist: uvicorn-worker (==0.2.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=xmnpQEc5CF2JQ6rKqQzxa_0Lpy_QA2cHgLGOu73fTGo,23
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=kLvarGwG1CxvtbpV2HkkOobzHU5Ia0PHyNzHghKSEx4,3751
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=63THGEZQlxWcosGCI74SEvJU7wOoOn1j1byTjf4NFOI,526
12
- fractal_server/app/models/v2/dataset.py,sha256=RuqTHXWEgs4A3OSk8Pq9DTq9Xr7w1IJNnyXhOzrDiR0,1509
13
- fractal_server/app/models/v2/job.py,sha256=BMmu5oXdZvN7jEIAMZvQMB3PQBcCYzxn6Qm6HdRWre4,1725
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=jebD28Pz8tGcsWCItxj6uKjcD8BMMnnU8dqYhvhEB6c,1520
16
- fractal_server/app/models/v2/task_group.py,sha256=Sd-fb7EN18eOxrS-RT4ekczLWp-tQcbX5C4LrcmjoIM,3443
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=sBnKiEx9KqhprUaZVY6R8lyfCdwRaX8obYm6bXdn6_E,1119
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=KYrw0COmmMuIMp7c6YcYRXah4tEYplCWeROnPK1VTeg,681
22
- fractal_server/app/routes/admin/v2/job.py,sha256=cbkFIRIIXaWmNsUFI7RAu8HpQ0mWn_bgoxtvWZxr-IA,7624
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=gShC2EAOYa0qTB69EXTDXz5Y375QoarOLv9T9vfntAE,4368
25
- fractal_server/app/routes/admin/v2/task_group.py,sha256=DncrOAB4q-v3BAmxg35m4EohleriW_FLGE5gpW_Or08,8120
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=c8eqPXdMhc3nIixX50B1Ka5n7LgbOZm2JbEs7lICQ04,6767
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=Y6uZz--YSEGgnPYu05rZ9sr1Ug08bNl2v1h3VeApBe8,9441
33
- fractal_server/app/routes/api/v2/images.py,sha256=LjAl0m4blWHda9rW_30MPYipEzU_JH6uhMf91X6CfWE,8478
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=eWYFJ7F2ZYQcpi-_n-rhPF-Q4gJhzYBsVGYFhHZZXAE,6653
36
- fractal_server/app/routes/api/v2/status.py,sha256=_cDZW-ESYw6zpf-lLFFqko5bLpKhqKrCM6yv1OfqxN4,6300
37
- fractal_server/app/routes/api/v2/submit.py,sha256=UMPhWwk4FqZmYtVEu6WLPkSr6a2R4wwgPPeVrx0zRME,8622
38
- fractal_server/app/routes/api/v2/task.py,sha256=K0ik33t7vL8BAK5S7fqyJDNdRK4stGqb_73bSa8tvPE,7159
39
- fractal_server/app/routes/api/v2/task_collection.py,sha256=9p8w9UnN6RFszC1ohy9Uo3I4HIMVdfD8fYGWuQqzxMU,12682
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=4o2N0z7jK7VUVlJZMM4GveCCc4JKxYJx9-PMmsYIlJQ,8256
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=P8KfngooIRHu3QyNIKMOngERztZRuBbQGVsT2ow2550,11671
44
- fractal_server/app/routes/api/v2/workflow_import.py,sha256=DHoHZvxndJQav6l_p5JJW9c9pSRlMEm7bv62h0M5evI,11187
45
- fractal_server/app/routes/api/v2/workflowtask.py,sha256=coYBy-21CbJNIkpmwC84BtPTw3r4DYBrBwaFWiM0dJA,11335
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=ifkNocTYatBSMYGwiR14qohmvR9SfMldceiEj6uJBrU,4783
48
- fractal_server/app/routes/auth/current_user.py,sha256=I3aVY5etWAJ_SH6t65Mj5TjvB2X8sAGuu1KG7FxLyPU,5883
49
- fractal_server/app/routes/auth/group.py,sha256=EBwR-eiTfHSZUbsbrhjKTWTiwPkGPLFYhuHi7ifDbfY,8358
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=kZv-Ls224WBFiuvVeM584LhYq_BLz6HQ9HpWbWQxRRM,7808
55
- fractal_server/app/routes/aux/__init__.py,sha256=LR4bR7RunHAK6jc9IR2bReQd-BdXADdnDccXI4uGeGY,731
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=FdCVla5DxGAZ__aB7Z8dEJzD_RIeh5tftjrPyqkr8N8,895
58
- fractal_server/app/routes/aux/validate_user_settings.py,sha256=Y8eubau0julkwVYB5nA83nDtxh_7RU9Iq0zAhb_dXLA,2351
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=Qa5UgcMZfYEj95dMA5GF3WgNx8zQ_XH6ufNYYmhI4rs,15684
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=Cjn1rYvljddi96tAwS-qqGkNfOcfPzjChdaEZEObCcM,65
69
- fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py,sha256=bKo5Ja0IGxJWpPWyh9dN0AG-PwzTDZzD5LyaEHB3YU4,3742
70
- fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py,sha256=rWPE_sZUNCMw5IWvZo9N1hlzoiasYoddS-wlBj4wMU4,4449
71
- fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=eX-HPmb6gDy2WLBn5llF-Pb6U10_gTtIE09wT7rHF7w,53862
72
- fractal_server/app/runner/executors/slurm/sudo/__init__.py,sha256=Cjn1rYvljddi96tAwS-qqGkNfOcfPzjChdaEZEObCcM,65
73
- fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py,sha256=wAgwpVcr6JIslKHOuS0FhRa_6T1KCManyRJqA-fifzw,1909
74
- fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=uRRyVHQtK9McHCB6OsjYfDnQsu2E8At9K_UYb_pe2pg,4682
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=Z5lcyXOr9LNz1yFEHlu7StAIpZdK2BkiUZbX6Fh7QVY,48513
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=1V4uocFaZQAQ1f01UEV8XjXo_9gNjiWgchsHfsm_TZM,15229
85
- fractal_server/app/runner/v2/_local/__init__.py,sha256=QnQ9jfqpzShzjp6H7rfVx9Sqp03J1JB6fCpwNx2MDOw,5119
86
- fractal_server/app/runner/v2/_local/_local_config.py,sha256=9oi209Dlp35ANfxb_DISqmMKKc6DPaMsmYVWbZLseME,3630
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=UdkoFF0HF_TdKbay-d9bjkxT2ltcOE5i8H_FoOu64HU,6202
95
- fractal_server/app/runner/v2/_slurm_ssh/__init__.py,sha256=wDW58jBPcmOUeBMcuaOqTz1ElEqiyQn9ar7zp2xCPX4,3274
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=8n2ezm74PEpijjLi92SO60GZ7AMixX1zWsAtx9qoqio,2913
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=-imwO7OB7ATADEnqVbTElUwoY0YIJCTf_SbWJNN9OZg,639
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=ll0-nglUytoxDnMwMRgjY2901UnFb37bkSsxWK1KLA0,11595
103
- fractal_server/app/runner/v2/runner_functions.py,sha256=BLREIcQaE6FSc2AEJyZuiYk6rGazEz_9gprUqUZDljs,9488
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=d6HPwPzrytUMVjExTU6fuCEwtvvWGRaSje0iXcRD45w,1728
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=0wJuZzMa-hJsMCEMxtBalW3lSk1Qey25uSVmS7GVcPM,1534
109
- fractal_server/app/schemas/_validators.py,sha256=wS09d8hX7mN91C8_BF9jfB8rgBbuAmmZ1BAmLKi3BU8,2974
110
- fractal_server/app/schemas/user.py,sha256=icjox9gK_invW44Nh_L4CvqfRa92qghyQhmevyg09nQ,2243
111
- fractal_server/app/schemas/user_group.py,sha256=t30Kd07PY43G_AqFDb8vjdInTeLeU9WvFZDx8fVLPSI,1750
112
- fractal_server/app/schemas/user_settings.py,sha256=re7ZFS8BLjR9MdIoZNRt2DNPc7znCgDpEYFKr8ZsAZg,2980
113
- fractal_server/app/schemas/v2/__init__.py,sha256=IT2a6fbRx3rt8h6jri_4gZWzTN9EVXewiWoIuBcZ-xA,2618
114
- fractal_server/app/schemas/v2/dataset.py,sha256=FKzQyMBAdFo9hnR4HzXQML7VbkM8YlKE4OLKjpo-Pdw,5085
115
- fractal_server/app/schemas/v2/dumps.py,sha256=Yiyma6pMnEk1c-Ekf0e-IWgM20_R4qWyHuoqfdc6brE,1635
116
- fractal_server/app/schemas/v2/job.py,sha256=qIisYTznE1mU6z65zxbOqSTOlkeFvncqbFLzyVyN12Y,3589
117
- fractal_server/app/schemas/v2/manifest.py,sha256=Uqtd7DbyOkf9bxBOKkU7Sv7nToBIFGUcfjY7rd5iO7c,6981
118
- fractal_server/app/schemas/v2/project.py,sha256=ABv9LSLVCq1QYthEhBvZOTn_4DFEC-7cH28tFGFdM7I,589
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=9W4xe-p19pbLpjsNJrYVIMpkrlwuCxGAJNO_gl0TfMc,6879
121
- fractal_server/app/schemas/v2/task_collection.py,sha256=9c_yyFcVBXdAZpQQniy1bROhYnQT7G1BflOpMY1joPE,6250
122
- fractal_server/app/schemas/v2/task_group.py,sha256=zZfvAH7c3MZC4_An09TMuOkNE_e1Z9XsYEnmN-axHdU,3217
123
- fractal_server/app/schemas/v2/workflow.py,sha256=-KWvXnbHBFA3pj5n7mfSyLKJQSqkJmoziIEe7mpLl3M,1875
124
- fractal_server/app/schemas/v2/workflowtask.py,sha256=xjFTmnKuHSetJvN-9k_GTMbPKwPg-J00zUkc_96QO7E,7726
125
- fractal_server/app/security/__init__.py,sha256=UyNjQc19cTNl-NwGyWwQs_-Yd22niHo86rIE-s-3czg,14087
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=kK6mf4uPNd95N-oKlkc6eSsjLkBQHv57jGYuGvZKmko,28495
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=t4zcUFmWxhAzGgy7kkxs9Ctq8SAhVs0v910UcXcHIUw,3349
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=yziIqi9AaecYYx9hVsaB5nzSpsgnOSSMvQOa0n30SBI,4555
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=tikXhggqxdU7EnKdx2co3UwinlDazEjfOPQOXtO58zs,4240
193
- fractal_server/tasks/v2/utils_database.py,sha256=g5m3sNPZKQ3AjflhPURDlAppQcIS5T1A8a1macdswBA,1268
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.12.1.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
201
- fractal_server-2.12.1.dist-info/METADATA,sha256=m7gJftwPSx3KP-HzIgYY_4a7m8zs-I8yGuQlW_HedKE,4570
202
- fractal_server-2.12.1.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
203
- fractal_server-2.12.1.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
204
- fractal_server-2.12.1.dist-info/RECORD,,
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)