fractal-server 2.13.0__py3-none-any.whl → 2.14.0__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 (127) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/__main__.py +3 -1
  3. fractal_server/app/models/linkusergroup.py +6 -2
  4. fractal_server/app/models/v2/__init__.py +11 -1
  5. fractal_server/app/models/v2/accounting.py +35 -0
  6. fractal_server/app/models/v2/dataset.py +1 -11
  7. fractal_server/app/models/v2/history.py +78 -0
  8. fractal_server/app/models/v2/job.py +10 -3
  9. fractal_server/app/models/v2/task_group.py +2 -2
  10. fractal_server/app/models/v2/workflow.py +1 -1
  11. fractal_server/app/models/v2/workflowtask.py +1 -1
  12. fractal_server/app/routes/admin/v2/__init__.py +4 -0
  13. fractal_server/app/routes/admin/v2/accounting.py +98 -0
  14. fractal_server/app/routes/admin/v2/impersonate.py +35 -0
  15. fractal_server/app/routes/admin/v2/job.py +5 -13
  16. fractal_server/app/routes/admin/v2/task.py +1 -1
  17. fractal_server/app/routes/admin/v2/task_group.py +4 -29
  18. fractal_server/app/routes/api/__init__.py +1 -1
  19. fractal_server/app/routes/api/v2/__init__.py +8 -2
  20. fractal_server/app/routes/api/v2/_aux_functions.py +66 -0
  21. fractal_server/app/routes/api/v2/_aux_functions_history.py +166 -0
  22. fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +3 -3
  23. fractal_server/app/routes/api/v2/dataset.py +0 -17
  24. fractal_server/app/routes/api/v2/history.py +544 -0
  25. fractal_server/app/routes/api/v2/images.py +31 -43
  26. fractal_server/app/routes/api/v2/job.py +30 -0
  27. fractal_server/app/routes/api/v2/project.py +1 -53
  28. fractal_server/app/routes/api/v2/{status.py → status_legacy.py} +6 -6
  29. fractal_server/app/routes/api/v2/submit.py +17 -14
  30. fractal_server/app/routes/api/v2/task.py +3 -10
  31. fractal_server/app/routes/api/v2/task_collection_custom.py +4 -9
  32. fractal_server/app/routes/api/v2/task_group.py +2 -22
  33. fractal_server/app/routes/api/v2/verify_image_types.py +61 -0
  34. fractal_server/app/routes/api/v2/workflow.py +28 -69
  35. fractal_server/app/routes/api/v2/workflowtask.py +53 -50
  36. fractal_server/app/routes/auth/group.py +0 -16
  37. fractal_server/app/routes/auth/oauth.py +5 -3
  38. fractal_server/app/routes/aux/__init__.py +0 -20
  39. fractal_server/app/routes/pagination.py +47 -0
  40. fractal_server/app/runner/components.py +0 -3
  41. fractal_server/app/runner/compress_folder.py +57 -29
  42. fractal_server/app/runner/exceptions.py +4 -0
  43. fractal_server/app/runner/executors/base_runner.py +157 -0
  44. fractal_server/app/runner/{v2/_local/_local_config.py → executors/local/get_local_config.py} +7 -9
  45. fractal_server/app/runner/executors/local/runner.py +248 -0
  46. fractal_server/app/runner/executors/{slurm → slurm_common}/_batching.py +1 -1
  47. fractal_server/app/runner/executors/{slurm → slurm_common}/_slurm_config.py +9 -7
  48. fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py +868 -0
  49. fractal_server/app/runner/{v2/_slurm_common → executors/slurm_common}/get_slurm_config.py +48 -17
  50. fractal_server/app/runner/executors/{slurm → slurm_common}/remote.py +36 -47
  51. fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py +134 -0
  52. fractal_server/app/runner/executors/slurm_ssh/runner.py +268 -0
  53. fractal_server/app/runner/executors/slurm_sudo/__init__.py +0 -0
  54. fractal_server/app/runner/executors/{slurm/sudo → slurm_sudo}/_subprocess_run_as_user.py +2 -83
  55. fractal_server/app/runner/executors/slurm_sudo/runner.py +193 -0
  56. fractal_server/app/runner/extract_archive.py +1 -3
  57. fractal_server/app/runner/task_files.py +134 -87
  58. fractal_server/app/runner/v2/__init__.py +0 -395
  59. fractal_server/app/runner/v2/_local.py +88 -0
  60. fractal_server/app/runner/v2/{_slurm_ssh/__init__.py → _slurm_ssh.py} +22 -19
  61. fractal_server/app/runner/v2/{_slurm_sudo/__init__.py → _slurm_sudo.py} +19 -15
  62. fractal_server/app/runner/v2/db_tools.py +119 -0
  63. fractal_server/app/runner/v2/runner.py +219 -98
  64. fractal_server/app/runner/v2/runner_functions.py +491 -189
  65. fractal_server/app/runner/v2/runner_functions_low_level.py +40 -43
  66. fractal_server/app/runner/v2/submit_workflow.py +358 -0
  67. fractal_server/app/runner/v2/task_interface.py +31 -0
  68. fractal_server/app/schemas/_validators.py +13 -24
  69. fractal_server/app/schemas/user.py +10 -7
  70. fractal_server/app/schemas/user_settings.py +9 -21
  71. fractal_server/app/schemas/v2/__init__.py +10 -1
  72. fractal_server/app/schemas/v2/accounting.py +18 -0
  73. fractal_server/app/schemas/v2/dataset.py +12 -94
  74. fractal_server/app/schemas/v2/dumps.py +26 -9
  75. fractal_server/app/schemas/v2/history.py +80 -0
  76. fractal_server/app/schemas/v2/job.py +15 -8
  77. fractal_server/app/schemas/v2/manifest.py +14 -7
  78. fractal_server/app/schemas/v2/project.py +9 -7
  79. fractal_server/app/schemas/v2/status_legacy.py +35 -0
  80. fractal_server/app/schemas/v2/task.py +72 -77
  81. fractal_server/app/schemas/v2/task_collection.py +14 -32
  82. fractal_server/app/schemas/v2/task_group.py +10 -9
  83. fractal_server/app/schemas/v2/workflow.py +10 -11
  84. fractal_server/app/schemas/v2/workflowtask.py +2 -21
  85. fractal_server/app/security/__init__.py +3 -3
  86. fractal_server/app/security/signup_email.py +2 -2
  87. fractal_server/config.py +91 -90
  88. fractal_server/images/tools.py +23 -0
  89. fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +50 -0
  90. fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +250 -0
  91. fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +57 -0
  92. fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +41 -0
  93. fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +36 -0
  94. fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +39 -0
  95. fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +120 -0
  96. fractal_server/ssh/_fabric.py +28 -14
  97. fractal_server/tasks/v2/local/collect.py +2 -2
  98. fractal_server/tasks/v2/ssh/collect.py +2 -2
  99. fractal_server/tasks/v2/templates/2_pip_install.sh +1 -1
  100. fractal_server/tasks/v2/templates/4_pip_show.sh +1 -1
  101. fractal_server/tasks/v2/utils_background.py +1 -20
  102. fractal_server/tasks/v2/utils_database.py +30 -17
  103. fractal_server/tasks/v2/utils_templates.py +6 -0
  104. {fractal_server-2.13.0.dist-info → fractal_server-2.14.0.dist-info}/METADATA +4 -4
  105. {fractal_server-2.13.0.dist-info → fractal_server-2.14.0.dist-info}/RECORD +114 -99
  106. {fractal_server-2.13.0.dist-info → fractal_server-2.14.0.dist-info}/WHEEL +1 -1
  107. fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -126
  108. fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -116
  109. fractal_server/app/runner/executors/slurm/ssh/executor.py +0 -1386
  110. fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -71
  111. fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -130
  112. fractal_server/app/runner/executors/slurm/sudo/executor.py +0 -1281
  113. fractal_server/app/runner/v2/_local/__init__.py +0 -129
  114. fractal_server/app/runner/v2/_local/_submit_setup.py +0 -52
  115. fractal_server/app/runner/v2/_local/executor.py +0 -100
  116. fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -83
  117. fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py +0 -83
  118. fractal_server/app/runner/v2/handle_failed_job.py +0 -59
  119. fractal_server/app/schemas/v2/status.py +0 -16
  120. /fractal_server/app/{runner/executors/slurm → history}/__init__.py +0 -0
  121. /fractal_server/app/runner/executors/{slurm/ssh → local}/__init__.py +0 -0
  122. /fractal_server/app/runner/executors/{slurm/sudo → slurm_common}/__init__.py +0 -0
  123. /fractal_server/app/runner/executors/{_job_states.py → slurm_common/_job_states.py} +0 -0
  124. /fractal_server/app/runner/executors/{slurm → slurm_common}/utils_executors.py +0 -0
  125. /fractal_server/app/runner/{v2/_slurm_common → executors/slurm_ssh}/__init__.py +0 -0
  126. {fractal_server-2.13.0.dist-info → fractal_server-2.14.0.dist-info}/LICENSE +0 -0
  127. {fractal_server-2.13.0.dist-info → fractal_server-2.14.0.dist-info}/entry_points.txt +0 -0
@@ -1,134 +1,142 @@
1
- fractal_server/__init__.py,sha256=9ob5spirSIHc6BZ8Gib1GW_SY2DX0L2EX7f1ZzmBmCE,23
2
- fractal_server/__main__.py,sha256=igfS2XL3e8JycuhASl2vsYuIPma0MG0cfPPFRuQfh14,6906
1
+ fractal_server/__init__.py,sha256=FWjUDSVq3R5OTeUURehTbaO4SiiBYgWolheShOibWmo,23
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
5
5
  fractal_server/app/db/__init__.py,sha256=wup2wcOkyOh8Vd0Xm76PZn_naxeMqaL4eF8DHHXTGlI,2889
6
+ fractal_server/app/history/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
7
  fractal_server/app/models/__init__.py,sha256=xJWiGAwpXmCpnFMC4c_HTqoUCzMOXrakoGLUH_uMvdA,415
7
- fractal_server/app/models/linkusergroup.py,sha256=LWTUfhH2uAnn_4moK7QdRUIHWtpw-hPZuW-5jClv_OE,610
8
+ fractal_server/app/models/linkusergroup.py,sha256=3KkkE4QIUAlTrBAZs_tVy0pGvAxUAq6yOEjflct_z2M,678
8
9
  fractal_server/app/models/linkuserproject.py,sha256=hvaxh3Lkiy2uUCwB8gvn8RorCpvxSSdzWdCS_U1GL7g,315
9
10
  fractal_server/app/models/security.py,sha256=mMb_HiwWY74QZrs9xuyno0CVSmk4GYQWk5FxGixr8SU,3860
10
11
  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=O5_6YfNeX6JM7PUcEZhbeV4JCvuAhFCQbOOuefpVnqc,1544
13
- fractal_server/app/models/v2/job.py,sha256=L0P1mrztMqqb-6qdPEbuHXhCsf2mxVUct_ehcXrREGg,1844
12
+ fractal_server/app/models/v2/__init__.py,sha256=vjHwek7-IXmaZZL9VF0nD30YL9ca4wNc8P4RXJK_kDc,832
13
+ fractal_server/app/models/v2/accounting.py,sha256=f2ALxfKKBNxFLJTtC2-YqRepVK253x68y7zkD2V_Nls,1115
14
+ fractal_server/app/models/v2/dataset.py,sha256=Xa3YLmqvSChBJoqlSsjmt-5x0zC-6rSx2eafFnMukfo,1240
15
+ fractal_server/app/models/v2/history.py,sha256=6yuYhsXgahHxv5FmDdv__aFndT228_rBFjTtkS-3Ohg,2082
16
+ fractal_server/app/models/v2/job.py,sha256=JWrEjX_E4iRFr5MbmtV_aY28J-5D469awLr0rfa5Kig,2052
14
17
  fractal_server/app/models/v2/project.py,sha256=rAHoh5KfYwIaW7rTX0_O0jvWmxEvfo1BafvmcXuSSRk,786
15
18
  fractal_server/app/models/v2/task.py,sha256=8KEROaadgccXRZIP7EriBp2j1FgzYkgiirOi5_fG79M,1494
16
- fractal_server/app/models/v2/task_group.py,sha256=f-JiqAQAmXP2LOVKQM7Yq3qcEjI1KA-HFYsyLpBASGs,3499
17
- fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO9VBlFCHiSps,1069
18
- fractal_server/app/models/v2/workflowtask.py,sha256=919L2jCm9y57MXiezGBb28uiXpxyiSHwA_DkDF9OVjg,1226
19
+ fractal_server/app/models/v2/task_group.py,sha256=yIzKAyJIFYYhG_K3AO-WGWYftygrk5D8H_WvAB7QnQk,3541
20
+ fractal_server/app/models/v2/workflow.py,sha256=tbZZ5IqsKQWiYdURjAS7n2oCpKK_g1ARQN2BOecry3k,1089
21
+ fractal_server/app/models/v2/workflowtask.py,sha256=zudfD3f4eUXZLq5NRZnIAlWCuAFk6w2E_G-uOcZkMco,1246
19
22
  fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
23
  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
24
+ fractal_server/app/routes/admin/v2/__init__.py,sha256=_5lqb6-M8-fZqE1HRMep6pAFYRUKMxrvbZOKs-RXWkw,933
25
+ fractal_server/app/routes/admin/v2/accounting.py,sha256=UDMPD9DMhMBcu4UsEOEtKMCGnkVMtmwBuRklek-_ShQ,3631
26
+ fractal_server/app/routes/admin/v2/impersonate.py,sha256=gc4lshfEPFR6W2asH7aKu6hqE6chzusdhAUVV9p51eU,1131
27
+ fractal_server/app/routes/admin/v2/job.py,sha256=4soc-5d99QEsir7U9AqpofgaGggSBwgMm7mXW5LBvSI,7439
23
28
  fractal_server/app/routes/admin/v2/project.py,sha256=luy-yiGX1JYTdPm1hpIdDUUqPm8xHuipLy9k2X6zu74,1223
24
- fractal_server/app/routes/admin/v2/task.py,sha256=h6O_DLYgp7KMExydPRO-1UsvsYj8S52E3CjslDNJZnA,4375
25
- fractal_server/app/routes/admin/v2/task_group.py,sha256=QD7Ui8bMJW698YAlhejWKj_ywjMwt8jymWppl2HnkLU,8126
29
+ fractal_server/app/routes/admin/v2/task.py,sha256=QOwgyDU9m7T_wLMwkdgfFaoMjNxcDg6zMVpngxhUvqk,4374
30
+ fractal_server/app/routes/admin/v2/task_group.py,sha256=LG41hAsllBL6kc-JLxRNG_IrI6frIKrIF3xD0GeeTiI,7173
26
31
  fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=0e0ZJ_k75TVHaT2o8Xk33DPDSgh-eBhZf-y4y7t-Adg,9429
27
- fractal_server/app/routes/api/__init__.py,sha256=2IDheFi0OFdsUg7nbUiyahqybvpgXqeHUXIL2QtWrQQ,641
28
- fractal_server/app/routes/api/v2/__init__.py,sha256=w4c9WzagaVV5d4TWBX5buu5ENk8jf3YftMQYmhavz9Q,2172
29
- 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
32
+ fractal_server/app/routes/api/__init__.py,sha256=B8l6PSAhR10iZqHEiyTat-_0tkeKdrCigIE6DJGP5b8,638
33
+ fractal_server/app/routes/api/v2/__init__.py,sha256=9o9zxTU2IJrC_JQ8GUMft3niiBZ39YLvODUeraiRRdQ,2465
34
+ fractal_server/app/routes/api/v2/_aux_functions.py,sha256=eE-TdEMI_UX3LBDUGwjG5NyUcihDVaHYlG15NlTJ9DI,12872
35
+ fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=ZlI6nwzB5r9AiY0C8TzJS_EQOTPKgkRYl3GpxFAu2bg,4430
36
+ fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=qdXCb6IP8-qPEAxGZKljtjIqNzIAyRaAsQSRi5VqFHM,6773
31
37
  fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=uhNSs-jcS7ndIUFKiOC1yrDiViw3uvKEXi9UL04BMks,11642
32
- fractal_server/app/routes/api/v2/dataset.py,sha256=tyZjoncjzWd3Bl3t1vBFNMIY1FVo0z23aagdFlNKX0Q,9465
33
- fractal_server/app/routes/api/v2/images.py,sha256=32sSDSWri_A8uQHcdbVTPvGGEjj9vk5ILj8q0-2jLX8,8507
34
- fractal_server/app/routes/api/v2/job.py,sha256=m89FTh9Px25oXCeWj2k2NdGWQaO2oxMh-6lZppcsJOY,5551
35
- fractal_server/app/routes/api/v2/project.py,sha256=3kMp1ValIVwY-qogfRNgWmSMk0jgsk1VJlY8MhwvH1Q,6665
36
- fractal_server/app/routes/api/v2/status.py,sha256=Ls_TMPBE_pqOFsO1XBWf8NDSoQkle45XuI7clKwGouQ,6305
37
- fractal_server/app/routes/api/v2/submit.py,sha256=a2Jo9kEvFCAD8L1mHPkk5aj_xPWfrXrT0o-wf758z1s,8599
38
- fractal_server/app/routes/api/v2/task.py,sha256=z3_SxsXoKsbM9GGNJUdIiZisQwAJSBqvCc7thaJIOTU,7191
38
+ fractal_server/app/routes/api/v2/dataset.py,sha256=h5AhE0sdhQ20ZlIbEJsFnHIOUW0S1VHFpoflpBkVScs,8936
39
+ fractal_server/app/routes/api/v2/history.py,sha256=pDztvwQFOh3JChtSk9GIG3H17yg4G5pk1mq14qXF4Ck,17793
40
+ fractal_server/app/routes/api/v2/images.py,sha256=BGpO94gVd8BTpCN6Mun2RXmjrPmfkIp73m8RN7uiGW4,8361
41
+ fractal_server/app/routes/api/v2/job.py,sha256=MU1sHIKk_89WrD0TD44d4ufzqnywot7On_W71KjyUbQ,6500
42
+ fractal_server/app/routes/api/v2/project.py,sha256=uAZgATiHcOvbnRX-vv1D3HoaEUvLUd7vzVmGcqOP8ZY,4602
43
+ fractal_server/app/routes/api/v2/status_legacy.py,sha256=Q5ZWQNfeZKL8Xgtou2Xr80iaF1uO-r4oSKgq5H42V_8,6349
44
+ fractal_server/app/routes/api/v2/submit.py,sha256=hCwwC6bXP7EyhgGyVLv1ClybRH1YytDVoPunOzpsf0s,8822
45
+ fractal_server/app/routes/api/v2/task.py,sha256=O7pquZhXIS4lRs5XqHvstiwe8BiCuS-B3ZKJI1g6EJU,6985
39
46
  fractal_server/app/routes/api/v2/task_collection.py,sha256=IDNF6sjDuU37HIQ0TuQA-TZIuf7nfHAQXUUNmkrlhLM,12706
40
- 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=LjX2X1sfqr3xlqhH8lfJmFG5ecpEzK_jCV548pU7s24,8268
47
+ fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=totsl0DOC2DFLw8vgqOFivvftpEk3KbFDeOHT0UVQUs,5997
48
+ fractal_server/app/routes/api/v2/task_group.py,sha256=62zcVTdheXM5V3WmFuqisIqgETjXmZaRpNMcDX5bXS0,7408
42
49
  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=Z71EI_WdLnaI0Z5OXy9RaAk_0xN9EHkhR5qieLtM8t0,11689
50
+ fractal_server/app/routes/api/v2/verify_image_types.py,sha256=RBi6-3Sp1wYm_obDPRcEBtLvRfsRknufbZyhGGHVo6I,1924
51
+ fractal_server/app/routes/api/v2/workflow.py,sha256=sW6Nm7dfzUY354hawyEkpQHy7rUvV2FCV8DPorH-TDU,10270
44
52
  fractal_server/app/routes/api/v2/workflow_import.py,sha256=INmnhlMEBJp-vHPR0f940DANPmIidts3OfcooeM_aNA,11205
45
- fractal_server/app/routes/api/v2/workflowtask.py,sha256=2Yxnis2O7X52e5DKa1GH-0-uPx2rKXSzPZKnEhi7cBY,11355
53
+ fractal_server/app/routes/api/v2/workflowtask.py,sha256=7_syX2EO7ibF6Xkm7HBPhsUYq6aYnKNeC5iSaafQhG4,11342
46
54
  fractal_server/app/routes/auth/__init__.py,sha256=fao6CS0WiAjHDTvBzgBVV_bSXFpEAeDBF6Z6q7rRkPc,1658
47
55
  fractal_server/app/routes/auth/_aux_auth.py,sha256=UZgauY0V6mSqjte_sYI1cBl2h8bcbLaeWzgpl1jdJlk,4883
48
56
  fractal_server/app/routes/auth/current_user.py,sha256=FUegTahlxT3BdPVCQYir0-ogg2YAaZ1DYuLcE_5NC9Y,5906
49
- fractal_server/app/routes/auth/group.py,sha256=EblxNVNTiPQj82eMaxNxf3OqoAbRLOExxCnm1-8C-k0,8364
57
+ fractal_server/app/routes/auth/group.py,sha256=P6naOD11Jud2IbdXKpHVjrdRo3IKAqnyXspT8k49k_w,7893
50
58
  fractal_server/app/routes/auth/login.py,sha256=tSu6OBLOieoBtMZB4JkBAdEgH2Y8KqPGSbwy7NIypIo,566
51
- fractal_server/app/routes/auth/oauth.py,sha256=AnFHbjqL2AgBX3eksI931xD6RTtmbciHBEuGf9YJLjU,1895
59
+ fractal_server/app/routes/auth/oauth.py,sha256=KCtJHSzemC4S8AfX9bLLdVhlF1nU4DOyox-sNQtcWew,1978
52
60
  fractal_server/app/routes/auth/register.py,sha256=DlHq79iOvGd_gt2v9uwtsqIKeO6i_GKaW59VIkllPqY,587
53
61
  fractal_server/app/routes/auth/router.py,sha256=tzJrygXFZlmV_uWelVqTOJMEH-3Fr7ydwlgx1LxRjxY,527
54
62
  fractal_server/app/routes/auth/users.py,sha256=Zr1Bsa7Hpricb_1uFwKPCtgt3PzGnP0TaMLMdpbQDNs,7825
55
- fractal_server/app/routes/aux/__init__.py,sha256=LR4bR7RunHAK6jc9IR2bReQd-BdXADdnDccXI4uGeGY,731
63
+ fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
64
  fractal_server/app/routes/aux/_job.py,sha256=XWyWpOObcV55YyK7uzGRlaslmPDCBZy4hiSZBpoa_bg,616
57
65
  fractal_server/app/routes/aux/_runner.py,sha256=spNudutueHTBJPhm55RlOuYzb31DhyheSjl2rk6dloM,873
58
66
  fractal_server/app/routes/aux/validate_user_settings.py,sha256=FLVi__8YFcm_6c_K5uMQo7raWWXQLBcZtx8yaPO4jaE,2301
67
+ fractal_server/app/routes/pagination.py,sha256=L8F5JqekF39qz-LpeScdlhb57MQnSRXjK4ZEtsZqYLk,1210
59
68
  fractal_server/app/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- fractal_server/app/runner/components.py,sha256=ZF8ct_Ky5k8IAcrmpYOZ-bc6OBgdELEighYVqFDEbZg,119
61
- fractal_server/app/runner/compress_folder.py,sha256=HSc1tv7x2DBjBoXwugZlC79rm9GNBIWtQKK9yWn5ZBI,3991
62
- fractal_server/app/runner/exceptions.py,sha256=_qZ_t8O4umAdJ1ikockiF5rDJuxnEskrGrLjZcnQl7A,4159
69
+ fractal_server/app/runner/components.py,sha256=-Ii5l8d_V6f5DFOd-Zsr8VYmOsyqw0Hox9fEFQiuqxY,66
70
+ fractal_server/app/runner/compress_folder.py,sha256=DX-4IYlSXlMd0EmXDD8M8FxisfKLbooSTrdNtzYAQAM,4876
71
+ fractal_server/app/runner/exceptions.py,sha256=JC5ufHyeA1hYD_rkZUscI30DD8D903ncag7Z3AArmUY,4215
63
72
  fractal_server/app/runner/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- fractal_server/app/runner/executors/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
65
- fractal_server/app/runner/executors/slurm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- fractal_server/app/runner/executors/slurm/_batching.py,sha256=3mfeFuYm3UA4EXh4VWuqZTF-dcINECZgTHoPOaOszDo,8840
67
- fractal_server/app/runner/executors/slurm/_slurm_config.py,sha256=8iZW8VdK0xvI9wZtXjRIlgnoI8hPmCqgcuX-IWIY18g,15866
68
- fractal_server/app/runner/executors/slurm/remote.py,sha256=wLziIsGdSMiO-jIXM8x77JRK82g_2hx0iBKTiMghuIo,5852
69
- fractal_server/app/runner/executors/slurm/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py,sha256=RsksZxMX41WCB53EfDj6Q34k61hv6raKJwCbmCs2OvM,3746
71
- fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py,sha256=o9YZ-HslaMN1wbTYt6rNiOHA200Ptm27fKNOxTgjpxA,4399
72
- fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=CKdmm-jlInZ0B5oZZalYKIO0_qoBRm_SOlGkY8wgfyI,53658
73
- fractal_server/app/runner/executors/slurm/sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py,sha256=ZlIjLU6NKyACGxBqtBw3-QAWVJKkYv6LICFZ2luJv9k,1912
75
- fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=UiuONKeIwT7U7Ne68mOhlndb7MD2aHEuXzGd2zpdMrU,4062
76
- fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py,sha256=g8wqUjSicN17UZVXlfaMomYZ-xOIbBu1oE7HdJTzfvw,5218
77
- fractal_server/app/runner/executors/slurm/sudo/executor.py,sha256=3V0u3d5IMDoVSxkk76FVz7857iix1Sfi2VVi6aI2O5U,48559
78
- fractal_server/app/runner/executors/slurm/utils_executors.py,sha256=naPyJI0I3lD-sYHbSXbMFGUBK4h_SggA5V91Z1Ch1Xg,1416
79
- fractal_server/app/runner/extract_archive.py,sha256=tLpjDrX47OjTNhhoWvm6iNukg8KoieWyTb7ZfvE9eWU,2483
73
+ fractal_server/app/runner/executors/base_runner.py,sha256=4xxMpYycIeAOz5niaJj2xtVW_Cq-shCxP1qk4g-KwOM,5137
74
+ fractal_server/app/runner/executors/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ fractal_server/app/runner/executors/local/get_local_config.py,sha256=KiakXxOahaLgWvQJ1LVGYGXht6DMGR9x8Xu-TuT9aY4,3628
76
+ fractal_server/app/runner/executors/local/runner.py,sha256=AfJ2KDUBdLqkeJTdRzYCkfJh4LiGbdnsHROko_Pk9vA,9587
77
+ fractal_server/app/runner/executors/slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
+ fractal_server/app/runner/executors/slurm_common/_batching.py,sha256=ZY020JZlDS5mfpgpWTChQkyHU7iLE5kx2HVd57_C6XA,8850
79
+ fractal_server/app/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
80
+ fractal_server/app/runner/executors/slurm_common/_slurm_config.py,sha256=_feRRnVVnvQa3AsOQqfULfOgaoj2o6Ze0-fwXwic8p4,15795
81
+ fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py,sha256=kmou-asQJ7SHBR0VPPiQrMLP9gv_NZG3s9t2yoszGhY,33870
82
+ fractal_server/app/runner/executors/slurm_common/get_slurm_config.py,sha256=BW6fDpPyB0VH5leVxvwzkVH3r3hC7DuSyoWmRzHITWg,7305
83
+ fractal_server/app/runner/executors/slurm_common/remote.py,sha256=L5llMccL6ctdFpDQvynJl5KbxtATX2wzpq13_3ppw-I,5929
84
+ fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py,sha256=RoxHLKOn0_wGjnY0Sv0a9nDSiqxYZHKRoMkT3p9_G1E,3607
85
+ fractal_server/app/runner/executors/slurm_common/utils_executors.py,sha256=naPyJI0I3lD-sYHbSXbMFGUBK4h_SggA5V91Z1Ch1Xg,1416
86
+ fractal_server/app/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ fractal_server/app/runner/executors/slurm_ssh/runner.py,sha256=yKK_cjskHDiasn_QQ-k14GhplP3tNaK7Kp4yiVn44Y0,9437
88
+ fractal_server/app/runner/executors/slurm_sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=BlOz4NElv3v7rUYefyeki33uaJxcSDk6rPuVZx9ocdw,2776
90
+ fractal_server/app/runner/executors/slurm_sudo/runner.py,sha256=lPWkRT499mChP3dNLrdDjMT-nw7-LWv6g58kdF_sMRw,6290
91
+ fractal_server/app/runner/extract_archive.py,sha256=I7UGIHXXuFvlgVPsP7GMWPu2-DiS1EiyBs7a1bvgkxI,2458
80
92
  fractal_server/app/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
81
93
  fractal_server/app/runner/run_subprocess.py,sha256=c3JbYXq3hX2aaflQU19qJ5Xs6J6oXGNvnTEoAfv2bxc,959
82
94
  fractal_server/app/runner/set_start_and_last_task_index.py,sha256=-q4zVybAj8ek2XlbENKlfOAJ39hT_zoJoZkqzDqiAMY,1254
83
95
  fractal_server/app/runner/shutdown.py,sha256=9pfSKHDNdIcm0eY-opgRTi7y0HmvfPmYiu9JR6Idark,2082
84
- fractal_server/app/runner/task_files.py,sha256=sd_MpJ01C8c9QTO8GzGMidFGdlq_hXX_ARDRhd_YMnI,3762
85
- fractal_server/app/runner/v2/__init__.py,sha256=hA5WyFh1GI2p56D86tf-8BFE9Dcj8f4Ua-X0XTbJIfQ,14770
86
- fractal_server/app/runner/v2/_local/__init__.py,sha256=QnQ9jfqpzShzjp6H7rfVx9Sqp03J1JB6fCpwNx2MDOw,5119
87
- fractal_server/app/runner/v2/_local/_local_config.py,sha256=L54CYrkCyzwgUUra-YhnYR7fy2nyMl6GGu3-4hjoZ4U,3653
88
- fractal_server/app/runner/v2/_local/_submit_setup.py,sha256=MucNOo8Er0F5ZIwH7CnTeXgnFMc6d3pKPkv563QNVi0,1630
89
- fractal_server/app/runner/v2/_local/executor.py,sha256=QrJlD77G6q4WohoJQO7XXbvi2RlCUsNvMnPDEZIoAqA,3620
90
- fractal_server/app/runner/v2/_slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py,sha256=21Tl70L8oyo3H_r0vXW6KO9pq2IKEiV5ZkshsPsBjzI,6226
92
- fractal_server/app/runner/v2/_slurm_ssh/__init__.py,sha256=wDW58jBPcmOUeBMcuaOqTz1ElEqiyQn9ar7zp2xCPX4,3274
93
- fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py,sha256=a5_FDPH_yxYmrjAjMRLgh_Y4DSG3mRslCLQodGM3-t4,2838
94
- fractal_server/app/runner/v2/_slurm_sudo/__init__.py,sha256=16P_3nDRtXztBf0-JOZzNmpnp164kgzRTADaLX733NI,2921
95
- fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py,sha256=a5_FDPH_yxYmrjAjMRLgh_Y4DSG3mRslCLQodGM3-t4,2838
96
+ fractal_server/app/runner/task_files.py,sha256=27xFuPzSJc1Pw912CfSMPOhOIpvNwpkyLCnycqdo9lw,4365
97
+ fractal_server/app/runner/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
+ fractal_server/app/runner/v2/_local.py,sha256=Ggdxx_XOlMya3bgXn_vGd2WMNVmLQaO3w9ZPaxYlRQk,3088
99
+ fractal_server/app/runner/v2/_slurm_ssh.py,sha256=CEaJLajwdDjdpxY1_7aTLb9wqgzeOuxLlSewScMEx_Y,3322
100
+ fractal_server/app/runner/v2/_slurm_sudo.py,sha256=TVihkQKMX6YWEWxXJjQo0WEQOjVy7FVVLmbM3MCulR0,3037
101
+ fractal_server/app/runner/v2/db_tools.py,sha256=du5dKhMMFMErQXbGIgu9JvO_vtMensodyPsyDeqz1yQ,3324
96
102
  fractal_server/app/runner/v2/deduplicate_list.py,sha256=IVTE4abBU1bUprFTkxrTfYKnvkNTanWQ-KWh_etiT08,645
97
- fractal_server/app/runner/v2/handle_failed_job.py,sha256=-zFWw4d208bQEFUF_sAdH2LdHEARyg1FC8BENr1SjhU,2045
98
103
  fractal_server/app/runner/v2/merge_outputs.py,sha256=D1L4Taieq9i71SPQyNc1kMokgHh-sV_MqF3bv7QMDBc,907
99
- fractal_server/app/runner/v2/runner.py,sha256=EzmoF_7K6n1w1vo2hM12h2EppWW6WyrpT_MmCBbFlCw,11778
100
- fractal_server/app/runner/v2/runner_functions.py,sha256=BLREIcQaE6FSc2AEJyZuiYk6rGazEz_9gprUqUZDljs,9488
101
- fractal_server/app/runner/v2/runner_functions_low_level.py,sha256=1fWvQ6YZUUnDhO_mipXC5hnaT-zK-GHxg8ayoxZX82k,3648
102
- fractal_server/app/runner/v2/task_interface.py,sha256=e1GGQSYd0MyBj1EZvEVzqv-HpVE4YffXOq82WLrCaOc,1866
104
+ fractal_server/app/runner/v2/runner.py,sha256=UmUhAOOcwAT-8b28o5bWn5S9APtr5EbEvulxWJPo6r4,16269
105
+ fractal_server/app/runner/v2/runner_functions.py,sha256=AzsE7VF6NMz_5qc0htQkfow5_2rr-wkx50vFJTndj8I,19250
106
+ fractal_server/app/runner/v2/runner_functions_low_level.py,sha256=_h_OOffq3d7V0uHa8Uvs0mj31y1GSZBUXjDDF3WjVjY,3620
107
+ fractal_server/app/runner/v2/submit_workflow.py,sha256=QywUGIoHAHnrWgfnyX8W9kVqKY-RvVyNLpzrbsXZOZ4,13075
108
+ fractal_server/app/runner/v2/task_interface.py,sha256=IXdQTI8rXFgXv1Ez0js4CjKFf3QwO2GCHRTuwiFtiTQ,2891
103
109
  fractal_server/app/runner/versions.py,sha256=dSaPRWqmFPHjg20kTCHmi_dmGNcCETflDtDLronNanU,852
104
110
  fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
105
111
  fractal_server/app/schemas/_filter_validators.py,sha256=Gkf2USrkuxZx1TWeeMRmhgfmG60AAIDQfbaWslLsvJQ,1572
106
- fractal_server/app/schemas/_validators.py,sha256=ap0VWJzOfPcq_tbH3sglZClkuinNvMjRq9fhTIdn-zk,3029
107
- fractal_server/app/schemas/user.py,sha256=vLijVyPIQJdpFc36S6qK2XtSKMzfkhULN1nBsb9tV18,2407
112
+ fractal_server/app/schemas/_validators.py,sha256=ZzTlTTzRATzf9Snx4Xp67aDmG77GaM2ewssFtlxQaaY,2680
113
+ fractal_server/app/schemas/user.py,sha256=oCftAKeHdFFowpLyh1G-RiylR8cIO7fTn0PkT5xjs0E,2494
108
114
  fractal_server/app/schemas/user_group.py,sha256=Uao1igRYflBu7Dg6Zs0kaFU3zBFJzIwDLrkFfaJk6z8,2176
109
- fractal_server/app/schemas/user_settings.py,sha256=4XeXQ3rnDS1UvLPd9hvh-WVSbzBGcMDjChfiZ_WGi-w,3134
110
- fractal_server/app/schemas/v2/__init__.py,sha256=IT2a6fbRx3rt8h6jri_4gZWzTN9EVXewiWoIuBcZ-xA,2618
111
- fractal_server/app/schemas/v2/dataset.py,sha256=FRJI1hWEjj7M_QhAq3mhWkmJ5lMKOtr1pXcUq-bH-Gk,5517
112
- fractal_server/app/schemas/v2/dumps.py,sha256=2GUjoqeblUvrSoojBz5odoUUf53IABtbY_5GvFZoMVc,1782
113
- fractal_server/app/schemas/v2/job.py,sha256=Dp_RRiC5uvJqq1fAJlBXztAFA-tS5FWuRnUbTnLtL6M,4226
114
- fractal_server/app/schemas/v2/manifest.py,sha256=AhUkv3ZfoUffdcpHKOuUTmcZa-0G5Y53hp-O4UaTkG0,7133
115
- fractal_server/app/schemas/v2/project.py,sha256=uqBreoS0UAkbVEJJS2HkSdjCCWfFIkv6N70TWk9HgxA,868
116
- fractal_server/app/schemas/v2/status.py,sha256=SQaUpQkjFq5c5k5J4rOjNhuQaDOEg8lksPhkKmPU5VU,332
117
- fractal_server/app/schemas/v2/task.py,sha256=OUCNQQUULmWSOdPm8Dz8E0ivG1XOcvO4dxz-osSa9R0,7248
118
- fractal_server/app/schemas/v2/task_collection.py,sha256=NFIcfTAhFN5LMxmyJCat7CKxUXq2CLEuWl5Hs0siZl8,6561
119
- fractal_server/app/schemas/v2/task_group.py,sha256=vFF850kJRmmcxt2sn7nrhm-OWJHRhYu_XOQP5LNiXyU,3850
120
- fractal_server/app/schemas/v2/workflow.py,sha256=qmKJZ9xZ6-sN41XdocZ7K6hum_pUfaMuKOJs_TlFCRQ,2211
121
- fractal_server/app/schemas/v2/workflowtask.py,sha256=qMvwlnFCsnyD8uv8HJ4cFy2-QMm2ETUFlTIbxIFUWxk,8056
122
- fractal_server/app/security/__init__.py,sha256=8dg7vBzLjU43p_eGoHuFBO97FtIDtNnbJJ5mzVSVRNI,14094
123
- fractal_server/app/security/signup_email.py,sha256=CR1VbsGFNshxsWquLDZPbUAYnGzkCHeJChtncq63RBc,1434
115
+ fractal_server/app/schemas/user_settings.py,sha256=z7hx54yTrWfjo98oX_1lkeRh1UGrC1dSRH6yIOpnCsY,2772
116
+ fractal_server/app/schemas/v2/__init__.py,sha256=wXS4ZEzobWx5dh-XLjMZWpd-JMwWFPODUeUVoMQGRv4,3099
117
+ fractal_server/app/schemas/v2/accounting.py,sha256=Wylt7uWTiDIFlHJOh4XEtYitk2FjFlmnodDrJDxcr0E,397
118
+ fractal_server/app/schemas/v2/dataset.py,sha256=xNWdOW8hhL5Wx-iwyUPrZfWcC8fFuGDgdOHvZLbGVME,2782
119
+ fractal_server/app/schemas/v2/dumps.py,sha256=uc9itXekO5IFfR6UucpQ5BX9NZZ8erE4hRR6S6aXlOc,2284
120
+ fractal_server/app/schemas/v2/history.py,sha256=Y3rc96DOPGQGZWJtBYVHiBjMQEhFtMq4WGkV4vs1oDE,1675
121
+ fractal_server/app/schemas/v2/job.py,sha256=OXPB4oPiMVWYgZu0lGzM_LGACvhWBavsW7c3MmivdDM,4556
122
+ fractal_server/app/schemas/v2/manifest.py,sha256=8mmB0QwxEgAeGgwKD_fT-o-wFy7lb6HxNXbp17IJqNY,7281
123
+ fractal_server/app/schemas/v2/project.py,sha256=ulgCmUnX0w-0jrSjVYIT7sxeK95CSNGh2msXydhsgYI,885
124
+ fractal_server/app/schemas/v2/status_legacy.py,sha256=vc6C3Xri8222bb9OmsghMz05CNuEalO-t2s_nKo341s,954
125
+ fractal_server/app/schemas/v2/task.py,sha256=8vc8c3ZL6dJo9kyCrfKozgO_pF37BBLvD5XYIXynlEc,6551
126
+ fractal_server/app/schemas/v2/task_collection.py,sha256=dLu4sy-su5k5vDJqCZdJMW8mLT5TX2SV60l_RAvKhwY,5930
127
+ fractal_server/app/schemas/v2/task_group.py,sha256=A3SFHNHLKPJyrnDz-wbnQvycetafKltp6UsH1u-euwA,3850
128
+ fractal_server/app/schemas/v2/workflow.py,sha256=ZpM43zTMyLRnEUtkbr_J5DYP00NwjItaC8gweB7GGAA,2172
129
+ fractal_server/app/schemas/v2/workflowtask.py,sha256=rVbmNihDAJL_Sckbt1hBK2JEcb-8Xpxn3McvaomZLmQ,7429
130
+ fractal_server/app/security/__init__.py,sha256=e2cveg5hQpieGD3bSPd5GTOMthvJ-HXH3buSb9WVfEU,14096
131
+ fractal_server/app/security/signup_email.py,sha256=Xd6QYxcdmg0PHpDwmUE8XQmPcOj3Xjy5oROcIMhmltM,1472
124
132
  fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
125
- fractal_server/config.py,sha256=qNhfBYRAGFjT7rcg_LPLQXexzxWydJr4kHyrWaWoMew,28753
133
+ fractal_server/config.py,sha256=83dHIuZMdMiu4LAtzVGBe_iD1nWEYOiKmeC-HHZ0nhw,28534
126
134
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
127
135
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
128
136
  fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
129
137
  fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTsyBpM,154
130
138
  fractal_server/images/models.py,sha256=jdGKMPi8WlO9Kvns4grIOU5LjujnvwIGjMFMC0wNy08,3501
131
- fractal_server/images/tools.py,sha256=4kfPAFJJnvg7fM-cL0JMx97Dc1Npva_0ghitEji3JUU,3407
139
+ fractal_server/images/tools.py,sha256=-zFDzRv6cbbRo21OrD0eZY5qWcoMX8dxgEnfyI3tOcg,4140
132
140
  fractal_server/logger.py,sha256=5Z3rfsFwl8UysVljTOaaIvt8Pyp6CVH492ez3jE8WAw,5113
133
141
  fractal_server/main.py,sha256=FD9KzTTsXTQnTW0z3Hu7y0Nj_oAkBeZEInKDXFd4hjE,4561
134
142
  fractal_server/migrations/env.py,sha256=nfyBpMIOT3kny6t-b-tUjyRjZ4k906bb1_wCQ7me1BI,1353
@@ -138,6 +146,7 @@ fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_
138
146
  fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py,sha256=Q1Gj1cJ0UrdLBJ5AXfFK9QpxTtmcv-4Z3NEGDnxOme4,961
139
147
  fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py,sha256=ok8dl4IkI-dfsyE_NZ8IndjQrnQ_g6CDZo4PwozpIwE,1605
140
148
  fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py,sha256=lANgTox0rz459_yo1Rw7fGCT1qw5sUCUXTLUMc_Bzf8,911
149
+ fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py,sha256=vePkVm1iUHiPNKLQ3KR7BBLdHruqBdl87j_tUCbMbEA,1414
141
150
  fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py,sha256=-wHe-fOffmYeAm0JXVl_lxZ7hhDkaEVqxgxpHkb_uL8,954
142
151
  fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py,sha256=Mob8McGYAcmgvrseyyYOa54E6Gsgr-4SiGdC-r9O4_A,1157
143
152
  fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py,sha256=5ROUgcoZOdjf8kMt6cxuvPhzHmV6xaCxvZEbhUEyZM4,3271
@@ -152,19 +161,25 @@ fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_
152
161
  fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py,sha256=eKTZm3EgUgapXBxO0RuHkEfTKic-TZG3ADaMpGLuc0k,1057
153
162
  fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py,sha256=0im6TxDr53sKKcjiPgeH4ftVRGnRXZSh2lPbRQ1Ir9w,883
154
163
  fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py,sha256=syONdZNf4-OnAcWIsbzXpYwpXPsXZ4SsmjwVvmVG0PU,2256
164
+ fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py,sha256=F0IdXk8vclViOGKe2SOHO3MsQsqe7SsZRSqz9cXhhrE,7928
155
165
  fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py,sha256=4l1AHGUsa0ONoJVZlr3fTXw_xbbQ8O7wlD92Az2aRfM,1849
156
166
  fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py,sha256=ekDUML7ILpmdoqEclKbEUdyLi4uw9HSG_sTjG2hp_JE,867
167
+ fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py,sha256=BftudWuSGvKGBzIL5AMb3yWkgTAuaKPBGsYcOzp_gLQ,1899
157
168
  fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py,sha256=9sLd0F7nO5chHHm7RZ4wBA-9bvWomS-av_odKwODADM,1551
169
+ fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py,sha256=Y1cPwmFOZ4mx3v2XZM6adgu8u0L0VD_R4ADURyMb2ro,1102
158
170
  fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py,sha256=HN3_Pk8G81SzdYjg4K1RZAyjKSlsZGvcYE2nWOUbwxQ,3861
159
171
  fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py,sha256=6cHEZFuTXiQg9yu32Y3RH1XAl71av141WQ6UMbiITIg,949
160
172
  fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py,sha256=yGWSA2HIHUybcVy66xBITk08opV2DFYSCIIrulaUZhI,901
161
173
  fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py,sha256=NumyjvciIjgShLZcmpDvh3ggJxnc-W1kc7vofrpcNOs,2906
162
174
  fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py,sha256=lOggSvzGWqQvnxxFuSM6W50Ui49R918A-uBuiZJ0pNM,963
175
+ fractal_server/migrations/versions/e81103413827_add_job_type_filters.py,sha256=t4ImlKNHx5JMgBL2sTpLWunv1gwY8OCFOKd3G338mdE,890
163
176
  fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py,sha256=jilQW3QIqYQ4Q6hCnUiG7UtNMpA41ujqrB3tPFiPM1Q,1221
177
+ fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py,sha256=jLHcVq9z0Ou20u-mwPf6EICDKY4dwFAzBgbRRx9_xDw,1007
164
178
  fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py,sha256=9BwqUS9Gf7UW_KjrzHbtViC880qhD452KAytkHWWZyk,746
179
+ fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py,sha256=TDWCaIoM0Q4SpRWmR9zr_rdp3lJXhCfBPTMhtrP5xYE,3950
165
180
  fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
181
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
167
- fractal_server/ssh/_fabric.py,sha256=lNy4IX1I4We6VoWa4Bz4fUPuApLMSoejpyE6I3jDZeM,22869
182
+ fractal_server/ssh/_fabric.py,sha256=jF7Nny0r3_PL1WjM1Zlw1I73Uqerx-mTaDWQlOaOpa0,23324
168
183
  fractal_server/string_tools.py,sha256=niViRrrZAOo0y6pEFI9L_eUYS1PoOiQZUBtngiLc2_k,1877
169
184
  fractal_server/syringe.py,sha256=3qSMW3YaMKKnLdgnooAINOPxnCOxP7y2jeAQYB21Gdo,2786
170
185
  fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
@@ -172,30 +187,30 @@ fractal_server/tasks/utils.py,sha256=V7dj8o2AnoHhGSTYlqJHcRFhCIpmOrMOUhtiE_DvRVA
172
187
  fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
188
  fractal_server/tasks/v2/local/__init__.py,sha256=9RVItnS7OyLsJOuJjWMCicaky4ASUPQEYD4SzDs0hOE,141
174
189
  fractal_server/tasks/v2/local/_utils.py,sha256=EvhmVwYjqaNyDCUMEsTWYOUXLgEwR1xr6bu32apCEI8,2491
175
- fractal_server/tasks/v2/local/collect.py,sha256=gtntegkilH-zdZpMQaSWYA3DuUqKRAlsoYhs-iJLEKc,12194
190
+ fractal_server/tasks/v2/local/collect.py,sha256=-ScW8Vm0cguwEDQarNAaZFtai0jFFVBrIaVgo2G9KCE,12204
176
191
  fractal_server/tasks/v2/local/deactivate.py,sha256=94s_RDND8aR5Y8RxFrRx61rZBMPGqOmFnBFLVKK1HVY,10038
177
192
  fractal_server/tasks/v2/local/reactivate.py,sha256=eBgFgq5xVKNr4DIDX7QU8xXerhwMrPaHDJ1wTth7aQc,6191
178
193
  fractal_server/tasks/v2/ssh/__init__.py,sha256=aSQbVi6Ummt9QzcSLWNmSqYjfdxrn9ROmqgH6bDpI7k,135
179
194
  fractal_server/tasks/v2/ssh/_utils.py,sha256=LjaEYVUJDChilu3YuhxuGWYRNnVJ_zqNE9SDHdRTIHY,2824
180
- fractal_server/tasks/v2/ssh/collect.py,sha256=-wqqGMapjD1hQz1vphwXmZaD4qzziMetc6lV6fckDO4,13552
195
+ fractal_server/tasks/v2/ssh/collect.py,sha256=gGFdKTawfi3xyUuslyB-QoNNtc7SXx23a7K7wNH8HhM,13562
181
196
  fractal_server/tasks/v2/ssh/deactivate.py,sha256=EAVH2HtyvmIFXqUwsGYhlJcAcVh_MvIOaKDY8AyBODw,11400
182
197
  fractal_server/tasks/v2/ssh/reactivate.py,sha256=8Rnbbny7TjMEAHhboqfgxBVZZK5UNNmh4Ud-0y3jaVM,7970
183
198
  fractal_server/tasks/v2/templates/1_create_venv.sh,sha256=PK0jdHKtQpda1zULebBaVPORt4t6V17wa4N1ohcj5ac,548
184
- fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=Gpk2io8u9YaflFUlQu2NgkDQw5AA4m4AOVG1sB4yrHQ,1822
199
+ fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=Md2LPt3BJ7IfN0USF2uivl4rP8OwbzJOUepGAr_Cicg,1836
185
200
  fractal_server/tasks/v2/templates/3_pip_freeze.sh,sha256=JldREScEBI4cD_qjfX4UK7V4aI-FnX9ZvVNxgpSOBFc,168
186
- fractal_server/tasks/v2/templates/4_pip_show.sh,sha256=84NGHlg6JIbrQktgGKyfGsggPFzy6RBJuOmIpPUhsrw,1747
201
+ fractal_server/tasks/v2/templates/4_pip_show.sh,sha256=qm1vPy6AkKhWDjCJGXS8LqCLYO3KsAyRK325ZsFcF6U,1747
187
202
  fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh,sha256=q-6ZUvA6w6FDVEoSd9O63LaJ9tKZc7qAFH72SGPrd_k,284
188
203
  fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh,sha256=A2y8RngEjAcRhG-_owA6P7tAdrS_AszFuGXnaeMV8u0,1122
189
- fractal_server/tasks/v2/utils_background.py,sha256=6wM7Z6zedsR8oVGwrJ-HN2Hj1b7BgmaSBdvuB_r9hI8,4246
190
- fractal_server/tasks/v2/utils_database.py,sha256=iLbwkxMxTCgpyKe1JQzdfIR3zBfxohgmLwSdGps1AUo,1274
204
+ fractal_server/tasks/v2/utils_background.py,sha256=FKJvtz1YuFLXV1TuoSeebWA0uDWsQIUxpFqWtKSJigc,3423
205
+ fractal_server/tasks/v2/utils_database.py,sha256=yi7793Uue32O59OBVUgomO42oUrVKdSKXoShBUNDdK0,1807
191
206
  fractal_server/tasks/v2/utils_package_names.py,sha256=RDg__xrvQs4ieeVzmVdMcEh95vGQYrv9Hfal-5EDBM8,2393
192
207
  fractal_server/tasks/v2/utils_python_interpreter.py,sha256=5_wrlrTqXyo1YuLZvAW9hrSoh5MyLOzdPVUlUwM7uDQ,955
193
- fractal_server/tasks/v2/utils_templates.py,sha256=07TZpJ0Mh_A4lXVXrrH2o1VLFFGwxeRumA6DdgMgCWk,2947
208
+ fractal_server/tasks/v2/utils_templates.py,sha256=Kc_nSzdlV6KIsO0CQSPs1w70zLyENPqJeTQEFiz4bOg,3124
194
209
  fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
195
210
  fractal_server/utils.py,sha256=PMwrxWFxRTQRl1b9h-NRIbFGPKqpH_hXnkAT3NfZdpY,3571
196
211
  fractal_server/zip_tools.py,sha256=GjDgo_sf6V_DDg6wWeBlZu5zypIxycn_l257p_YVKGc,4876
197
- fractal_server-2.13.0.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
198
- fractal_server-2.13.0.dist-info/METADATA,sha256=YY5WVT35OWNC2Ilx_EIBFAIfd7KXo5xZjDEVfe04R-E,4548
199
- fractal_server-2.13.0.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
200
- fractal_server-2.13.0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
201
- fractal_server-2.13.0.dist-info/RECORD,,
212
+ fractal_server-2.14.0.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
213
+ fractal_server-2.14.0.dist-info/METADATA,sha256=rbNZVkwzYDYoAd4gozu4v5w4oOdWKv75wCav4EKOWCI,4560
214
+ fractal_server-2.14.0.dist-info/WHEEL,sha256=7dDg4QLnNKTvwIDR9Ac8jJaAmBC_owJrckbC0jjThyA,88
215
+ fractal_server-2.14.0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
216
+ fractal_server-2.14.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.0.0
2
+ Generator: poetry-core 2.1.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,126 +0,0 @@
1
- import os
2
- import threading
3
- import time
4
- import traceback
5
- from itertools import count
6
-
7
- from ......logger import set_logger
8
- from fractal_server.app.runner.exceptions import JobExecutionError
9
-
10
- logger = set_logger(__name__)
11
-
12
-
13
- class FractalSlurmSSHWaitThread(threading.Thread):
14
- """
15
- Thread that monitors a pool of SLURM jobs
16
-
17
- This class is a custom re-implementation of the waiting thread class from:
18
-
19
- > clusterfutures <https://github.com/sampsyo/clusterfutures>
20
- > Original Copyright
21
- > Copyright 2021 Adrian Sampson <asampson@cs.washington.edu>
22
- > License: MIT
23
-
24
- Attributes:
25
- shutdown_file:
26
- shutdown_callback:
27
- slurm_poll_interval:
28
- jobs_finished_callback:
29
- active_job_ids:
30
- shutdown:
31
- lock:
32
- """
33
-
34
- shutdown_file: str
35
- shutdown_callback: callable
36
- slurm_poll_interval = 30
37
- jobs_finished_callback: callable
38
- active_job_ids: list[str]
39
- shutdown: bool
40
- _lock: threading.Lock
41
-
42
- def __init__(self, callback: callable, interval=1):
43
- """
44
- Init method
45
-
46
- This method is executed on the main thread.
47
- """
48
- threading.Thread.__init__(self, daemon=True)
49
- self.callback = callback
50
- self.interval = interval
51
- self._lock = threading.Lock()
52
- self.shutdown = False
53
- self.active_job_ids = []
54
-
55
- def wait(self, *, job_id: str):
56
- """
57
- Add a a new job to the set of jobs being waited for.
58
-
59
- This method is executed on the main thread.
60
- """
61
- if self.shutdown:
62
- error_msg = "Cannot call `wait` method after executor shutdown."
63
- logger.warning(error_msg)
64
- raise JobExecutionError(info=error_msg)
65
- with self._lock:
66
- self.active_job_ids.append(job_id)
67
-
68
- def check_shutdown(self):
69
- """
70
- Check whether the shutdown file exists
71
-
72
- This method is executed on the waiting thread.
73
- """
74
- if os.path.exists(self.shutdown_file):
75
- logger.info(
76
- f"Detected executor-shutdown file {self.shutdown_file}"
77
- )
78
- self.shutdown = True
79
-
80
- def check_jobs(self):
81
- """
82
- Check whether some jobs are over, and call callback.
83
-
84
- This method is executed on the waiting thread.
85
- """
86
- try:
87
- if self.active_job_ids == []:
88
- return
89
- finished_jobs = self.jobs_finished_callback(self.active_job_ids)
90
- if finished_jobs == set(self.active_job_ids):
91
- self.callback(self.active_job_ids)
92
- self.active_job_ids = []
93
-
94
- except Exception:
95
- # If anything goes wrong, print an exception without re-raising
96
- traceback.print_exc()
97
-
98
- def run(self):
99
- """
100
- Run forever (until a shutdown takes place) and trigger callback
101
-
102
- This method is executed on the waiting thread.
103
-
104
- Note that `shutdown_callback` only takes care of cleaning up the
105
- FractalSlurmExecutor variables, and then the `return` here is enough
106
- to fully clean up the `FractalFileWaitThread` object.
107
- """
108
-
109
- # FIXME SSH: are those try/except below needed?
110
-
111
- skip = max(self.slurm_poll_interval // self.interval, 1)
112
- for ind in count():
113
- self.check_shutdown()
114
- if self.shutdown:
115
- try:
116
- self.shutdown_callback()
117
- except Exception: # nosec
118
- pass
119
- return
120
- if ind % skip == 0:
121
- with self._lock:
122
- try:
123
- self.check_jobs()
124
- except Exception: # nosec
125
- pass
126
- time.sleep(self.interval)
@@ -1,116 +0,0 @@
1
- import uuid
2
- from pathlib import Path
3
- from typing import Optional
4
-
5
- from fractal_server.app.runner.executors.slurm._slurm_config import (
6
- SlurmConfig,
7
- )
8
-
9
-
10
- class SlurmJob:
11
- """
12
- Collect information related to a FractalSlurmSSHExecutor job
13
-
14
- This includes three groups of attributes:
15
-
16
- 1. Attributes related to the (possibly multi-task) SLURM job, e.g.
17
- submission-file path.
18
- 2. Attributes related to single tasks, e.g. the paths of their input/output
19
- pickle files.
20
- 3. SLURM configuration options, encoded in a SlurmConfig object.
21
-
22
- Note: A SlurmJob object is generally defined as a multi-task job. Jobs
23
- coming from the `map` method must have `single_task_submission=False` (even
24
- if `num_tasks_tot=1`), while jobs coming from `submit` must have it set to
25
- `True`.
26
-
27
- Attributes:
28
- num_tasks_tot:
29
- Total number of tasks to be executed as part of this SLURM job.
30
- single_task_submission:
31
- This must be `True` for jobs submitted as part of the `submit`
32
- method, and `False` for jobs coming from the `map` method.
33
- slurm_file_prefix:
34
- Prefix for SLURM-job related files (submission script and SLURM
35
- stdout/stderr); this is also needed in the
36
- `_copy_files_from_remote_to_local` method.
37
- wftask_file_prefixes:
38
- Prefix for files that are created as part of the functions
39
- submitted for execution on the `FractalSlurmSSHExecutor`; this is
40
- needed in the `_copy_files_from_remote_to_local` method, and also
41
- to construct the names of per-task input/output pickle files.
42
- wftask_subfolder_name:
43
- Name of the per-task subfolder (e.g. `7_task_name`).
44
- slurm_script:
45
- Path of SLURM submission script.
46
- slurm_stdout:
47
- Path of SLURM stdout file; if this includes `"%j"`, then this
48
- string will be replaced by the SLURM job ID upon `sbatch`
49
- submission.
50
- slurm_stderr:
51
- Path of SLURM stderr file; see `slurm_stdout` concerning `"%j"`.
52
- workerids:
53
- IDs that enter in the per-task input/output pickle files (one per
54
- task).
55
- input_pickle_files:
56
- Input pickle files (one per task).
57
- output_pickle_files:
58
- Output pickle files (one per task).
59
- slurm_config:
60
- `SlurmConfig` object.
61
- """
62
-
63
- # Job-related attributes
64
- num_tasks_tot: int
65
- single_task_submission: bool
66
- slurm_file_prefix: str
67
- slurm_script_local: Path
68
- slurm_script_remote: Path
69
- slurm_stdout_local: Path
70
- slurm_stdout_remote: Path
71
- slurm_stderr_local: Path
72
- slurm_stderr_remote: Path
73
-
74
- # Per-task attributes
75
- wftask_subfolder_name: str
76
- workerids: tuple[str, ...]
77
- wftask_file_prefixes: tuple[str, ...]
78
- input_pickle_files_local: tuple[Path, ...]
79
- input_pickle_files_remote: tuple[Path, ...]
80
- output_pickle_files_local: tuple[Path, ...]
81
- output_pickle_files_remote: tuple[Path, ...]
82
-
83
- # Slurm configuration
84
- slurm_config: SlurmConfig
85
-
86
- def __init__(
87
- self,
88
- num_tasks_tot: int,
89
- slurm_config: SlurmConfig,
90
- slurm_file_prefix: Optional[str] = None,
91
- wftask_file_prefixes: Optional[tuple[str, ...]] = None,
92
- single_task_submission: bool = False,
93
- ):
94
- if single_task_submission and num_tasks_tot > 1:
95
- raise ValueError(
96
- "Trying to initialize SlurmJob with"
97
- f"{single_task_submission=} and {num_tasks_tot=}."
98
- )
99
- self.num_tasks_tot = num_tasks_tot
100
- self.single_task_submission = single_task_submission
101
- self.slurm_file_prefix = slurm_file_prefix or "default_slurm_prefix"
102
- if wftask_file_prefixes is None:
103
- self.wftask_file_prefixes = tuple(
104
- "default_wftask_prefix" for i in range(self.num_tasks_tot)
105
- )
106
- else:
107
- self.wftask_file_prefixes = wftask_file_prefixes
108
- self.workerids = tuple(uuid.uuid4() for i in range(self.num_tasks_tot))
109
- self.slurm_config = slurm_config
110
-
111
- def get_clean_output_pickle_files(self) -> tuple[str, ...]:
112
- """
113
- Transform all pathlib.Path objects in self.output_pickle_files to
114
- strings
115
- """
116
- return tuple(str(f.as_posix()) for f in self.output_pickle_files_local)