fractal-server 2.16.5__py3-none-any.whl → 2.17.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 (143) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/__main__.py +178 -52
  3. fractal_server/app/db/__init__.py +9 -11
  4. fractal_server/app/models/security.py +30 -22
  5. fractal_server/app/models/user_settings.py +5 -4
  6. fractal_server/app/models/v2/__init__.py +4 -0
  7. fractal_server/app/models/v2/job.py +3 -4
  8. fractal_server/app/models/v2/profile.py +16 -0
  9. fractal_server/app/models/v2/project.py +5 -0
  10. fractal_server/app/models/v2/resource.py +130 -0
  11. fractal_server/app/models/v2/task_group.py +4 -0
  12. fractal_server/app/routes/admin/v2/__init__.py +4 -0
  13. fractal_server/app/routes/admin/v2/_aux_functions.py +55 -0
  14. fractal_server/app/routes/admin/v2/accounting.py +3 -3
  15. fractal_server/app/routes/admin/v2/impersonate.py +2 -2
  16. fractal_server/app/routes/admin/v2/job.py +51 -15
  17. fractal_server/app/routes/admin/v2/profile.py +100 -0
  18. fractal_server/app/routes/admin/v2/project.py +2 -2
  19. fractal_server/app/routes/admin/v2/resource.py +222 -0
  20. fractal_server/app/routes/admin/v2/task.py +59 -32
  21. fractal_server/app/routes/admin/v2/task_group.py +17 -12
  22. fractal_server/app/routes/admin/v2/task_group_lifecycle.py +52 -86
  23. fractal_server/app/routes/api/__init__.py +45 -8
  24. fractal_server/app/routes/api/v2/_aux_functions.py +17 -1
  25. fractal_server/app/routes/api/v2/_aux_functions_history.py +2 -2
  26. fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +3 -3
  27. fractal_server/app/routes/api/v2/_aux_functions_tasks.py +55 -19
  28. fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +21 -17
  29. fractal_server/app/routes/api/v2/dataset.py +10 -19
  30. fractal_server/app/routes/api/v2/history.py +8 -8
  31. fractal_server/app/routes/api/v2/images.py +5 -5
  32. fractal_server/app/routes/api/v2/job.py +8 -8
  33. fractal_server/app/routes/api/v2/pre_submission_checks.py +3 -3
  34. fractal_server/app/routes/api/v2/project.py +15 -7
  35. fractal_server/app/routes/api/v2/status_legacy.py +2 -2
  36. fractal_server/app/routes/api/v2/submit.py +49 -42
  37. fractal_server/app/routes/api/v2/task.py +26 -8
  38. fractal_server/app/routes/api/v2/task_collection.py +39 -50
  39. fractal_server/app/routes/api/v2/task_collection_custom.py +10 -6
  40. fractal_server/app/routes/api/v2/task_collection_pixi.py +34 -42
  41. fractal_server/app/routes/api/v2/task_group.py +19 -9
  42. fractal_server/app/routes/api/v2/task_group_lifecycle.py +43 -86
  43. fractal_server/app/routes/api/v2/task_version_update.py +3 -3
  44. fractal_server/app/routes/api/v2/workflow.py +9 -9
  45. fractal_server/app/routes/api/v2/workflow_import.py +29 -16
  46. fractal_server/app/routes/api/v2/workflowtask.py +5 -5
  47. fractal_server/app/routes/auth/__init__.py +34 -5
  48. fractal_server/app/routes/auth/_aux_auth.py +39 -20
  49. fractal_server/app/routes/auth/current_user.py +56 -67
  50. fractal_server/app/routes/auth/group.py +29 -46
  51. fractal_server/app/routes/auth/oauth.py +55 -38
  52. fractal_server/app/routes/auth/register.py +2 -2
  53. fractal_server/app/routes/auth/router.py +4 -2
  54. fractal_server/app/routes/auth/users.py +29 -53
  55. fractal_server/app/routes/aux/_runner.py +2 -1
  56. fractal_server/app/routes/aux/validate_user_profile.py +62 -0
  57. fractal_server/app/schemas/__init__.py +0 -1
  58. fractal_server/app/schemas/user.py +43 -13
  59. fractal_server/app/schemas/user_group.py +2 -1
  60. fractal_server/app/schemas/v2/__init__.py +12 -0
  61. fractal_server/app/schemas/v2/profile.py +78 -0
  62. fractal_server/app/schemas/v2/resource.py +137 -0
  63. fractal_server/app/schemas/v2/task_collection.py +11 -3
  64. fractal_server/app/schemas/v2/task_group.py +5 -0
  65. fractal_server/app/security/__init__.py +174 -75
  66. fractal_server/app/security/signup_email.py +52 -34
  67. fractal_server/config/__init__.py +27 -0
  68. fractal_server/config/_data.py +68 -0
  69. fractal_server/config/_database.py +59 -0
  70. fractal_server/config/_email.py +133 -0
  71. fractal_server/config/_main.py +78 -0
  72. fractal_server/config/_oauth.py +69 -0
  73. fractal_server/config/_settings_config.py +7 -0
  74. fractal_server/data_migrations/2_17_0.py +339 -0
  75. fractal_server/images/tools.py +3 -3
  76. fractal_server/logger.py +3 -3
  77. fractal_server/main.py +17 -23
  78. fractal_server/migrations/naming_convention.py +1 -1
  79. fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +195 -0
  80. fractal_server/runner/config/__init__.py +2 -0
  81. fractal_server/runner/config/_local.py +21 -0
  82. fractal_server/runner/config/_slurm.py +129 -0
  83. fractal_server/runner/config/slurm_mem_to_MB.py +63 -0
  84. fractal_server/runner/exceptions.py +4 -0
  85. fractal_server/runner/executors/base_runner.py +17 -7
  86. fractal_server/runner/executors/local/get_local_config.py +21 -86
  87. fractal_server/runner/executors/local/runner.py +48 -5
  88. fractal_server/runner/executors/slurm_common/_batching.py +2 -2
  89. fractal_server/runner/executors/slurm_common/base_slurm_runner.py +60 -26
  90. fractal_server/runner/executors/slurm_common/get_slurm_config.py +39 -55
  91. fractal_server/runner/executors/slurm_common/remote.py +1 -1
  92. fractal_server/runner/executors/slurm_common/slurm_config.py +214 -0
  93. fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +1 -1
  94. fractal_server/runner/executors/slurm_ssh/runner.py +12 -14
  95. fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +2 -2
  96. fractal_server/runner/executors/slurm_sudo/runner.py +12 -12
  97. fractal_server/runner/v2/_local.py +36 -21
  98. fractal_server/runner/v2/_slurm_ssh.py +41 -4
  99. fractal_server/runner/v2/_slurm_sudo.py +42 -12
  100. fractal_server/runner/v2/db_tools.py +1 -1
  101. fractal_server/runner/v2/runner.py +3 -11
  102. fractal_server/runner/v2/runner_functions.py +42 -28
  103. fractal_server/runner/v2/submit_workflow.py +88 -109
  104. fractal_server/runner/versions.py +8 -3
  105. fractal_server/ssh/_fabric.py +6 -6
  106. fractal_server/tasks/config/__init__.py +3 -0
  107. fractal_server/tasks/config/_pixi.py +127 -0
  108. fractal_server/tasks/config/_python.py +51 -0
  109. fractal_server/tasks/v2/local/_utils.py +7 -7
  110. fractal_server/tasks/v2/local/collect.py +13 -5
  111. fractal_server/tasks/v2/local/collect_pixi.py +26 -10
  112. fractal_server/tasks/v2/local/deactivate.py +7 -1
  113. fractal_server/tasks/v2/local/deactivate_pixi.py +5 -1
  114. fractal_server/tasks/v2/local/delete.py +5 -1
  115. fractal_server/tasks/v2/local/reactivate.py +13 -5
  116. fractal_server/tasks/v2/local/reactivate_pixi.py +27 -9
  117. fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +11 -10
  118. fractal_server/tasks/v2/ssh/_utils.py +6 -7
  119. fractal_server/tasks/v2/ssh/collect.py +19 -12
  120. fractal_server/tasks/v2/ssh/collect_pixi.py +34 -16
  121. fractal_server/tasks/v2/ssh/deactivate.py +12 -8
  122. fractal_server/tasks/v2/ssh/deactivate_pixi.py +14 -10
  123. fractal_server/tasks/v2/ssh/delete.py +12 -9
  124. fractal_server/tasks/v2/ssh/reactivate.py +18 -12
  125. fractal_server/tasks/v2/ssh/reactivate_pixi.py +36 -17
  126. fractal_server/tasks/v2/templates/4_pip_show.sh +4 -6
  127. fractal_server/tasks/v2/utils_database.py +2 -2
  128. fractal_server/tasks/v2/utils_pixi.py +3 -0
  129. fractal_server/tasks/v2/utils_python_interpreter.py +8 -16
  130. fractal_server/tasks/v2/utils_templates.py +7 -10
  131. fractal_server/utils.py +1 -1
  132. {fractal_server-2.16.5.dist-info → fractal_server-2.17.0.dist-info}/METADATA +8 -10
  133. {fractal_server-2.16.5.dist-info → fractal_server-2.17.0.dist-info}/RECORD +137 -118
  134. {fractal_server-2.16.5.dist-info → fractal_server-2.17.0.dist-info}/WHEEL +1 -1
  135. fractal_server/app/routes/aux/validate_user_settings.py +0 -73
  136. fractal_server/app/schemas/user_settings.py +0 -67
  137. fractal_server/app/user_settings.py +0 -42
  138. fractal_server/config.py +0 -906
  139. fractal_server/data_migrations/2_14_10.py +0 -48
  140. fractal_server/runner/executors/slurm_common/_slurm_config.py +0 -471
  141. /fractal_server/{runner → app}/shutdown.py +0 -0
  142. {fractal_server-2.16.5.dist-info → fractal_server-2.17.0.dist-info}/entry_points.txt +0 -0
  143. {fractal_server-2.16.5.dist-info → fractal_server-2.17.0.dist-info/licenses}/LICENSE +0 -0
@@ -1,96 +1,108 @@
1
- fractal_server/__init__.py,sha256=Hfv7cG0-XL4HXFzgAjO3EJo9hyAHfURKZqlS1xXyvho,23
2
- fractal_server/__main__.py,sha256=rkM8xjY1KeS3l63irB8yCrlVobR-73uDapC4wvrIlxI,6957
1
+ fractal_server/__init__.py,sha256=NqK1nP_JCkl2n_IYTQ8Uyd9FCwgEK9mdQAxy3uDI0ow,23
2
+ fractal_server/__main__.py,sha256=qLbUicU1Ulaob_Eo5pspi-IH2xAkLfifJTH9gYEhZss,11427
3
3
  fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
4
4
  fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- fractal_server/app/db/__init__.py,sha256=U2gwpNyy79iMsK1lg43LRl9z-MW8wiOaICJ7GGdA4yo,2814
5
+ fractal_server/app/db/__init__.py,sha256=sttX0mHVV0ESI1SJ1kcxUKiuEwqeP-BWsst0o_9Yo44,2810
6
6
  fractal_server/app/models/__init__.py,sha256=xJWiGAwpXmCpnFMC4c_HTqoUCzMOXrakoGLUH_uMvdA,415
7
7
  fractal_server/app/models/linkusergroup.py,sha256=3KkkE4QIUAlTrBAZs_tVy0pGvAxUAq6yOEjflct_z2M,678
8
8
  fractal_server/app/models/linkuserproject.py,sha256=hvaxh3Lkiy2uUCwB8gvn8RorCpvxSSdzWdCS_U1GL7g,315
9
- fractal_server/app/models/security.py,sha256=bwye5cLPUq4R2ArC2KKvUhi_XQtgliM7a-t5Ofnk_rw,3826
10
- fractal_server/app/models/user_settings.py,sha256=WdnrLOP2w8Nqh_3K-4-b-8a7XEC9ILrE6SfbYoTk-7Y,1279
11
- fractal_server/app/models/v2/__init__.py,sha256=vjHwek7-IXmaZZL9VF0nD30YL9ca4wNc8P4RXJK_kDc,832
9
+ fractal_server/app/models/security.py,sha256=VThWDEmzUP4SgLsAvd5WjJ1p2WVxBuc6D5TMQJaOyd8,3873
10
+ fractal_server/app/models/user_settings.py,sha256=u0GOK1JdqDmXzA8hK2JV93rZxY_rF-0oKMkArRolnN8,1201
11
+ fractal_server/app/models/v2/__init__.py,sha256=A668GF4z_UPar6kAOwC-o_qUo3CIRJ3SmBGYTs3Xc7k,923
12
12
  fractal_server/app/models/v2/accounting.py,sha256=i-2TsjqyuclxFQ21C-TeDoss7ZBTRuXdzIJfVr2UxwE,1081
13
13
  fractal_server/app/models/v2/dataset.py,sha256=P_zy4dPQAqrCALQ6737VkAFk1SvcgYjnslGUZhPI8sc,1226
14
14
  fractal_server/app/models/v2/history.py,sha256=CBN2WVg9vW5pHU1RP8TkB_nnJrwnuifCcxgnd53UtEE,2163
15
- fractal_server/app/models/v2/job.py,sha256=RsJY5B-HBOa2uMJYDefMbe8traBVIbwheAWk4H79EcU,2040
16
- fractal_server/app/models/v2/project.py,sha256=XLna1SSKdywdDS3qfcVaGtafyVKMZq6CiLvHOe-AjhU,754
15
+ fractal_server/app/models/v2/job.py,sha256=YYzt3ef2CU1WXFNjlltR3ft2kM9T0Hq8oskSipQSxuM,2042
16
+ fractal_server/app/models/v2/profile.py,sha256=QqOE7XGeq-ckQAbGhcgzDN5zFFaTNrtcuWgOXy9psR8,440
17
+ fractal_server/app/models/v2/project.py,sha256=oXNcuNVDeNYZ60fwAx-Y_vnkS3xd9pwFdoT2pZmnBNI,918
18
+ fractal_server/app/models/v2/resource.py,sha256=ReaBGtKb3e0_1PZOZncdGqrttkrC-bsgDCv3wPCGfOs,3512
17
19
  fractal_server/app/models/v2/task.py,sha256=iBIQB8POQE5MyKvLZhw7jZWlBhbrThzCDzRTcgiAczQ,1493
18
- fractal_server/app/models/v2/task_group.py,sha256=kMHvCROfQZ6Tl7iEOjM9sXQ0qvFSu6Kkg_5pKeP011Y,4590
20
+ fractal_server/app/models/v2/task_group.py,sha256=gHkuyIBw8hkoMCwHgo08SWVMc8T1MXC5xqoW2YNd5Sw,4753
19
21
  fractal_server/app/models/v2/workflow.py,sha256=gBjDXO-RytVT81aAlesImBhmVHrwNUrmsF_UsGa1qLM,1057
20
22
  fractal_server/app/models/v2/workflowtask.py,sha256=qkTc-hcFLpJUVsEUbnDq2BJL0qg9jagy2doZeusF1ek,1266
21
23
  fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
24
  fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- fractal_server/app/routes/admin/v2/__init__.py,sha256=_5lqb6-M8-fZqE1HRMep6pAFYRUKMxrvbZOKs-RXWkw,933
24
- fractal_server/app/routes/admin/v2/accounting.py,sha256=-eLzBirENvdhjhrCf6bs1pTriIui19DAr_k-zuJB7Y8,3593
25
- fractal_server/app/routes/admin/v2/impersonate.py,sha256=gc4lshfEPFR6W2asH7aKu6hqE6chzusdhAUVV9p51eU,1131
26
- fractal_server/app/routes/admin/v2/job.py,sha256=6NG93I-yQTlJZ1AIhMPwuizQcQvFlvI7kGJ8jG94Igg,8595
27
- fractal_server/app/routes/admin/v2/project.py,sha256=MA_LdoEuSuisSGRO43TapMuJ080y5iaUGSAUgKuuKOg,1188
28
- fractal_server/app/routes/admin/v2/task.py,sha256=e1UxsA6CWeYqvnHqxySE78ckRuE0EK60X02VMnkG2gg,4309
29
- fractal_server/app/routes/admin/v2/task_group.py,sha256=7-Axk5SG6Nw02p7pc6Q6_EtO9Ncy74pVXvt2GCG-Iuc,6043
30
- fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=frIW3aNQxK_xLRTCfet7249fxi3WF7uNjv6ApGrverY,11594
31
- fractal_server/app/routes/api/__init__.py,sha256=B8l6PSAhR10iZqHEiyTat-_0tkeKdrCigIE6DJGP5b8,638
25
+ fractal_server/app/routes/admin/v2/__init__.py,sha256=SzLurEzKBRWHcIFh2mpac2wrGAWJwv9WW-Ry2DiNkZY,1161
26
+ fractal_server/app/routes/admin/v2/_aux_functions.py,sha256=fqA5sUCFuD2iVANQt2WUUfVOEVz5egQA7inzUKYGCw0,1684
27
+ fractal_server/app/routes/admin/v2/accounting.py,sha256=DjgMqzdrL8hYMn19cZj2pkwtLKl3QfBwxd473kH4KaI,3584
28
+ fractal_server/app/routes/admin/v2/impersonate.py,sha256=ictDjuvBr3iLv3YtwkVRMNQRq5qtPAeAXbbC7STSsEg,1125
29
+ fractal_server/app/routes/admin/v2/job.py,sha256=CRt_a6tULsuzN5ojcClzVH3vd7OXT06jK81Qro9fuBk,10171
30
+ fractal_server/app/routes/admin/v2/profile.py,sha256=0Y_1Qv-BA6cHVrxPTDDBOpttpfuJN8g1FqFlG6JiOD8,3164
31
+ fractal_server/app/routes/admin/v2/project.py,sha256=rRq7ZDngr_29skASnte1xfycZCjK-WPdeTf7siBXiCU,1182
32
+ fractal_server/app/routes/admin/v2/resource.py,sha256=UWimApUcL9HPu8NN0ccDbReuKly3aCqff2SA-Y1iEzs,6349
33
+ fractal_server/app/routes/admin/v2/task.py,sha256=tHWCPZRpfvu7k8sQA-634CUC7QbgdJa2RHiMXQL8a58,5599
34
+ fractal_server/app/routes/admin/v2/task_group.py,sha256=EDY9oliXq_xYVJ2HgRuE4-5MbL85j-y4LbWwupZxy38,6249
35
+ fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=W7LjIBAheyjrn0fEz0SsWINqcZK5HMB5GRGMjPrc6a4,9994
36
+ fractal_server/app/routes/api/__init__.py,sha256=ewprevw6hZ0FWM-GPHoQZU0w-yfItqLeQT-Jr_Nbjnw,1658
32
37
  fractal_server/app/routes/api/v2/__init__.py,sha256=D3sRRsqkmZO6kBxUjg40q0aRDsnuXI4sOOfn0xF9JsM,2820
33
- fractal_server/app/routes/api/v2/_aux_functions.py,sha256=nPmSHRlFoTGDoP95J2KHnhtzxH5Ry2_h2fo9QHugo9c,14266
34
- fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=TOdUJNsHaAzG0FP0sCylyBUPtz5ml_68fEW4kR-cmkg,4441
35
- fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=bguVrV_8cleRGqmMBhaGlTZ2iKtwGrVSzN-6dDDf05g,8600
38
+ fractal_server/app/routes/api/v2/_aux_functions.py,sha256=0OC5ydaX-XpscMRAsqiE03w2UVcd0xZ_vGs2PahDf1Y,14821
39
+ fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=PXsqMQ3sfkABqAMI7v1_VAzUEDF_-kvaZyyhEicqsCw,4431
40
+ fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=5gNt35rYR8sHG2f1N8coQbOJacYIRJ5zUrmMEXcs2LQ,8585
36
41
  fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py,sha256=PKjV7r8YsPRXoNiVSnOK4KBYVV3l_Yb_ZPrqAkMkXrQ,1182
37
- fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=QlFrW2RGoYU-cllyOu2H_5ZAjA6neIa8pWZnq7g1UNc,12503
38
- fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py,sha256=8x1_q9FyCzItnPmdSdLQuwUTy4B9xCsXscp97_lJcpM,4635
39
- fractal_server/app/routes/api/v2/dataset.py,sha256=7hSqqE3sFjQjJOZf_QvYbMersjXXbS3YM3a1WDgv1rM,8893
40
- fractal_server/app/routes/api/v2/history.py,sha256=kEhD-TKkORenUUsfyODNBi1jOsGc82h_EWbRKyRkD5k,17102
41
- fractal_server/app/routes/api/v2/images.py,sha256=foA5ZNjMzZWlcYMgYuGSZsm1I-po-8NSYBIMz4ZbkPc,7867
42
- fractal_server/app/routes/api/v2/job.py,sha256=FyK4Aa9XoIcfD0ZpKM-4Bkj3ZcIc93UzDc8jF85uHps,6478
43
- fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=AEN6w2X5kCkSpZydudvuTPhl_VZUQ4zUav6D3NiF6r8,4935
44
- fractal_server/app/routes/api/v2/project.py,sha256=j7SHe38IKMYBW5dTDUgnWn0alxDUeCFL1eJmgoCxvcc,4568
45
- fractal_server/app/routes/api/v2/status_legacy.py,sha256=GG-AUdAngFL1QpE8Alo3xPxyKC4csG7DbomYlIfqTEs,6318
46
- fractal_server/app/routes/api/v2/submit.py,sha256=xcoAiLTtns9yGQmobVyqT8GkvwFN_VEn5sSvvSJ9SZ4,9171
47
- fractal_server/app/routes/api/v2/task.py,sha256=CAXWU4Xo0GdyMbUr4NfTIZvvJ5wjeKbmEQDHLoTwc-c,7028
48
- fractal_server/app/routes/api/v2/task_collection.py,sha256=5l0O5AgGWAZicpt-gGoPOp-krXn2v_6R9MvwbT3RV1w,12743
49
- fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=-jpAjyALdZrwzrWQV5-vqyjSCI1kXbbfnTMgzp9P_cs,6732
50
- fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=aHbfisZ8ulQ6p1OCerWY-nOERqGybTfRyQKPcj-R_FE,7522
51
- fractal_server/app/routes/api/v2/task_group.py,sha256=An8EAwZDNx53TVnGBhjgeW7RI_uk-bAlu-6NrqYuaWY,8068
52
- fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=DDwFy9TUchUkRTigPSlA6biZZY0wbb8NAZtdo_XYO7E,12289
53
- fractal_server/app/routes/api/v2/task_version_update.py,sha256=zBYlyqN0UvCfnkqcg945b5jNMRNjSUKJvBz6IPxC0qo,8236
54
- fractal_server/app/routes/api/v2/workflow.py,sha256=iTIasNP2I5ovhHafQ2P8JJuImAl41ucy5y64J7FiP3w,10701
55
- fractal_server/app/routes/api/v2/workflow_import.py,sha256=GUEl8HIFcDZ2XaA93t4W6PYC3ALX2XnJGBHH9Yr8q50,9028
56
- fractal_server/app/routes/api/v2/workflowtask.py,sha256=gwFvC-qU4yb-Q5ey30rOD4u3D0-4jlJzBTuq8udqpzc,7930
57
- fractal_server/app/routes/auth/__init__.py,sha256=fao6CS0WiAjHDTvBzgBVV_bSXFpEAeDBF6Z6q7rRkPc,1658
58
- fractal_server/app/routes/auth/_aux_auth.py,sha256=UZgauY0V6mSqjte_sYI1cBl2h8bcbLaeWzgpl1jdJlk,4883
59
- fractal_server/app/routes/auth/current_user.py,sha256=EjkwMxUA0l6FLbDJdertHGnuOoSS-HEysmm6l5FkAlY,5903
60
- fractal_server/app/routes/auth/group.py,sha256=gSyB9iuwCqT6CMDHyO8hYIQ1J341gs8SDrRdHppOMT0,7890
42
+ fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=63CFMe1QZKRPmmU1xk1qZ_R6A1VANCxAlUBTGDrE0GI,13674
43
+ fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py,sha256=492tLRUWTxsAZuhkZUt9PmJtKNLIhkAqKAa-LDtwG_Y,4893
44
+ fractal_server/app/routes/api/v2/dataset.py,sha256=HhRrReo_isFJFMaUhQfxEQkLj0_lXNfGblzwpLG81VU,8623
45
+ fractal_server/app/routes/api/v2/history.py,sha256=T-7GDLZ_x4cp9PMEozJoEFt4cGFYPDqv9-akYmN2JSU,17150
46
+ fractal_server/app/routes/api/v2/images.py,sha256=_R-F1qrsFv3PPukrwXSa-5swNS4kNghY0DTrxjLC_7E,7897
47
+ fractal_server/app/routes/api/v2/job.py,sha256=fyIYGcplsxzx91FxYWlImp1ATPk5IC8bfIcJkuZOhws,6526
48
+ fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=DEnlFj6PMNMy9DrnH6_pMW9evdKl6iTlAb0zlzBR1Qs,4953
49
+ fractal_server/app/routes/api/v2/project.py,sha256=PkRR1lQayBvY8uEOMherXpvv_YwIMwxWzVMjC5nFfm4,4857
50
+ fractal_server/app/routes/api/v2/status_legacy.py,sha256=vZA4AYMehXbNFgekl4j6p8idETC3IylQQL64CmFCr98,6330
51
+ fractal_server/app/routes/api/v2/submit.py,sha256=o0r58Dc6A1BHOUPp2OK7PKEHc4dIqnp3-kXBWnX8KsY,9373
52
+ fractal_server/app/routes/api/v2/task.py,sha256=HIQRA7lAW41P89eveCGmUI2HERMakxOw5is-F-j-fco,7519
53
+ fractal_server/app/routes/api/v2/task_collection.py,sha256=wgY5-sry8Dg9IbLyzjxur8iqoe9ALs2zNK0bmNtO8Co,12226
54
+ fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=WjByW-raK-HU1IR02JNc39XMjkRftXyUSHwHrgnZFBw,6924
55
+ fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=-HlgVzYxZb0Ysk6fkHbhkiVvVtQxmvli1kW03PTVaVo,7191
56
+ fractal_server/app/routes/api/v2/task_group.py,sha256=7eGVim9D6AE4synpxAYMijyHIC1HTSBojY08MiuqMBg,8349
57
+ fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=ZSn8Ibjwkp89v87OPBquULPc9xsdpBfRvV1PiQdiicw,10593
58
+ fractal_server/app/routes/api/v2/task_version_update.py,sha256=JO5xggiRqay4zNlbjlRa26ygMEue2klSFPyLrXS215k,8254
59
+ fractal_server/app/routes/api/v2/workflow.py,sha256=szb6t9OWOjr0CwboF0fJUyO5jUPj_HRpf5N0CDuHkqc,10755
60
+ fractal_server/app/routes/api/v2/workflow_import.py,sha256=cEs1bt5urKIbaC8PjnUwYAaPK3kGqupXpUdgwEXM0Ss,9445
61
+ fractal_server/app/routes/api/v2/workflowtask.py,sha256=-V7WjTfYb2L7i3_dQ0Am_ydqepdqs-j3BY67_5iZPfU,7960
62
+ fractal_server/app/routes/auth/__init__.py,sha256=Y-RQMwY5V25ZVgyYYoFIXvEDQgm6PGTDgxH755oa_NM,2358
63
+ fractal_server/app/routes/auth/_aux_auth.py,sha256=10eQlLWCsuwmkGiZB3eSR9JhnU4db67wsWRxu8arKqc,5435
64
+ fractal_server/app/routes/auth/current_user.py,sha256=xYun8dn9Ie3mzTczq1BC7HfIjPpj3x8QOtJ1H6Yb_GM,5585
65
+ fractal_server/app/routes/auth/group.py,sha256=JfQKmmafgVfsPmuVcA4wGs5qKwq9Xx4f-m4uwIyY3-Y,7291
61
66
  fractal_server/app/routes/auth/login.py,sha256=tSu6OBLOieoBtMZB4JkBAdEgH2Y8KqPGSbwy7NIypIo,566
62
- fractal_server/app/routes/auth/oauth.py,sha256=KCtJHSzemC4S8AfX9bLLdVhlF1nU4DOyox-sNQtcWew,1978
63
- fractal_server/app/routes/auth/register.py,sha256=DlHq79iOvGd_gt2v9uwtsqIKeO6i_GKaW59VIkllPqY,587
64
- fractal_server/app/routes/auth/router.py,sha256=tzJrygXFZlmV_uWelVqTOJMEH-3Fr7ydwlgx1LxRjxY,527
65
- fractal_server/app/routes/auth/users.py,sha256=ZZLqkjuBISU3GoUg3WJtrHvDEy7xEG7B5IumM3dHUQ4,7826
67
+ fractal_server/app/routes/auth/oauth.py,sha256=5BTEKb7Cb6ASVmgiPb5kVbHcBg0rF8Iqho0aJZd7PPQ,2730
68
+ fractal_server/app/routes/auth/register.py,sha256=Ola-lNdYYEOK8Wh0Q-TFKwIJ25e6UswlUojJ8QGBCfc,581
69
+ fractal_server/app/routes/auth/router.py,sha256=-E87A8h2UvcLucy5xjzKiWbXHVKcqxUmmZGeV_utEzA,598
70
+ fractal_server/app/routes/auth/users.py,sha256=xUvzH_hIwOOSU5QiJyJmU1NRZHkTcypjTgSbuTm8A5I,7060
66
71
  fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
72
  fractal_server/app/routes/aux/_job.py,sha256=nqqdcW5B7fL_PbvHf57_TcifjUfcMgl04tKNvG2sV1U,628
68
- fractal_server/app/routes/aux/_runner.py,sha256=9wgW--pAitRwR0zEsOrADtI9zi_DYT7W-cvEfKjKYQE,875
69
- fractal_server/app/routes/aux/validate_user_settings.py,sha256=J6VjuC-qIzHsYiLextCi5lX8Q2z3g2_JOSpIFiuMJSc,2303
73
+ fractal_server/app/routes/aux/_runner.py,sha256=SDzI7glEfkW_XecWFuRQitbSWSvAPegI-J5c7i5d0_w,957
74
+ fractal_server/app/routes/aux/validate_user_profile.py,sha256=fGqJDdAFkbQoEIjqZ5F9-SDY_4os63R2EUMqODC7eBg,1969
70
75
  fractal_server/app/routes/pagination.py,sha256=IGy8Ll5lYr6ENYE18h3huH5s0GMX1DCs5VdCi6j1cdk,1174
71
- fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
72
- fractal_server/app/schemas/user.py,sha256=t9nbyYjGCSOsxm9K97PDG3-9o27CsaFfhWb_L5nrjqA,1910
73
- fractal_server/app/schemas/user_group.py,sha256=x3-kqbo0q2wTP7QI0iZ7PU_9Dr957UYrFMKqS7BXLhE,1425
74
- fractal_server/app/schemas/user_settings.py,sha256=NpdC0Me0fgwwdfJuTSlFLCnLUjiWWzrJlPn_UPLjXnw,1862
75
- fractal_server/app/schemas/v2/__init__.py,sha256=GqV6kJ0nKDq2vsSA4uph-nb5pmuaq013LUCcm9LbpLE,3097
76
+ fractal_server/app/schemas/__init__.py,sha256=VIWJCaqokte3OljDLX00o-EC2d12rFoPb5HOLKQI94Y,86
77
+ fractal_server/app/schemas/user.py,sha256=MGggiWGqQV97426IzoaKNIkqHUMEuadW7BbJgom6tB8,2898
78
+ fractal_server/app/schemas/user_group.py,sha256=uTTOVGoy89SxVDpJumjqOEWxqXWR41MNOTBDCyNxEDA,1478
79
+ fractal_server/app/schemas/v2/__init__.py,sha256=XQex5ojpELgO0xvq2l-Y8oV85ZgM3GBj6lrGGctPb1g,3729
76
80
  fractal_server/app/schemas/v2/accounting.py,sha256=C_ekrYQwhi7PtrxxB07oVAG2y1NLigXjYwyp4E38fao,396
77
81
  fractal_server/app/schemas/v2/dataset.py,sha256=NKCjBwGBC7mPiSlXktZAcleJsvlLY6KfNKw7Wx4Zfqk,1728
78
82
  fractal_server/app/schemas/v2/dumps.py,sha256=LCYiNF_FNYiA6HYp5GyFao3IKRX0RpzgNpiX56IwgCE,2293
79
83
  fractal_server/app/schemas/v2/history.py,sha256=pZiMKfh6nMWbTp5MUtrnGySPKbeRFf5tM1VLFaTgGcw,1784
80
84
  fractal_server/app/schemas/v2/job.py,sha256=BuiNzAX2Kl-b7LJnAiqCGDC9h6bGEjKvsHQIgf5mjHQ,3330
81
85
  fractal_server/app/schemas/v2/manifest.py,sha256=QUpXMDB8WkB1F4UK-yYmm3O8bXoHwDGURnqwn6ayO_I,6674
86
+ fractal_server/app/schemas/v2/profile.py,sha256=tqjG3kgoBsNl0It0icZQ0mIab2POmV_K8fsL21-WR8U,2082
82
87
  fractal_server/app/schemas/v2/project.py,sha256=7UC0aZLgtmkaAiPykeUj-9OZXhMkoyi3V-475UW_EQs,654
88
+ fractal_server/app/schemas/v2/resource.py,sha256=4iXzZJeHVLcXYY08-okoJM_4gqpzhG4KglRPBm24Jwc,3718
83
89
  fractal_server/app/schemas/v2/status_legacy.py,sha256=eQT1zGxbkzSwd0EqclsOdZ60n1x6J3DB1CZ3m4LYyxc,955
84
90
  fractal_server/app/schemas/v2/task.py,sha256=IJv8loB4kx9FBkaIHoiMsswQyq02FxvyAnHK1u074fU,4364
85
- fractal_server/app/schemas/v2/task_collection.py,sha256=BzHQXq2_zLZTbigWauOR5Zi-mlsqCIF2NEF_z12Nqxg,4480
86
- fractal_server/app/schemas/v2/task_group.py,sha256=DzgcUvn3rZvttk6Zrbyr3Kw8YYYF-rPiGkGzV_fdzSQ,3415
91
+ fractal_server/app/schemas/v2/task_collection.py,sha256=S4fBQ3cbL4YmyL6ZTZYDbIBm6o8D-v5CuYQy4ng3nWU,4581
92
+ fractal_server/app/schemas/v2/task_group.py,sha256=4hNZUXnWYSozpLXR3JqBvGzfZBG2TbjqydckHHu2Aq0,3506
87
93
  fractal_server/app/schemas/v2/workflow.py,sha256=L-dW6SzCH_VNoH6ENip44lTgGGqVYHHBk_3PtM-Ooy8,1772
88
94
  fractal_server/app/schemas/v2/workflowtask.py,sha256=6eweAMyziwaoMT-7R1fVJYunIeZKzT0-7fAVgPO_FEc,3639
89
- fractal_server/app/security/__init__.py,sha256=oJ8RVglpOvWPQY4RokiE2YA72Nqo42dZEjywWTt8xr8,14032
90
- fractal_server/app/security/signup_email.py,sha256=Xd6QYxcdmg0PHpDwmUE8XQmPcOj3Xjy5oROcIMhmltM,1472
91
- fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
92
- fractal_server/config.py,sha256=UxGXo0X0AdVRvWKGJbDkiuqC7yoAM6vF2dWp2GUkQBo,30888
93
- fractal_server/data_migrations/2_14_10.py,sha256=jzMg2c1zNO8C_Nho_9_EZJD6kR1-gkFNpNrMR5Hr8hM,1598
95
+ fractal_server/app/security/__init__.py,sha256=k-La8Da89C1hSUGsiidrWo6Az4u6dbe5PzN1Ctt1t34,18394
96
+ fractal_server/app/security/signup_email.py,sha256=kphjq6TAygvPpYpg95QJWefyqmzdVrGz7fyRMctUJWE,1982
97
+ fractal_server/app/shutdown.py,sha256=ViSNJyXWU_iWPSDOOMGNh_iQdUFrdPh_jvf8vVKLpAo,1950
98
+ fractal_server/config/__init__.py,sha256=ZCmroNB50sUxJiFtkW0a4fFtmfyPnL4LWhtKY5FbQfg,737
99
+ fractal_server/config/_data.py,sha256=9Jyt83yrSsr_0_9ANWDAXz88_jjyFlcB5VWJGXq8aUY,2311
100
+ fractal_server/config/_database.py,sha256=k1z__MrslQjmel34yFvge0sroPUs1vBtT_OSlPY8pN8,1690
101
+ fractal_server/config/_email.py,sha256=j1QmZCyspNbD1xxkypc9Kv299tU3vTO1AqDFJ8-LZzQ,4201
102
+ fractal_server/config/_main.py,sha256=9v64gJsvY1oGP70_AoJMnyMIeRo7FcIg6T8NDV-p9as,1992
103
+ fractal_server/config/_oauth.py,sha256=7J4FphGVFfVmtQycCkas6scEJQJGZUGEzQ-t2PZiqSo,1934
104
+ fractal_server/config/_settings_config.py,sha256=tsyXQOnn9QKCFJD6hRo_dJXlQQyl70DbqgHMJoZ1xnY,144
105
+ fractal_server/data_migrations/2_17_0.py,sha256=DGxrQ5JSiJW5tzpfydCjYKjX7FsiF3y_k34b0mo_RaY,11757
94
106
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
95
107
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
96
108
  fractal_server/exceptions.py,sha256=7ftpWwNsTQmNonWCynhH5ErUh1haPPhIaVPrNHla7-o,53
@@ -98,11 +110,11 @@ fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_
98
110
  fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTsyBpM,154
99
111
  fractal_server/images/models.py,sha256=6WchcIzLLLwdkLNRfg71Dl4Y-9UFLPyrrzh1lWgjuP0,1245
100
112
  fractal_server/images/status_tools.py,sha256=KICcThwHniHNkDftzJmK_n2gQK2IeTKlR_PFAesf204,4912
101
- fractal_server/images/tools.py,sha256=nhkp_7bBI6pmJpqbg1s7xjoZKW5S4aNInkym5ntvJYA,4169
102
- fractal_server/logger.py,sha256=QIeVn3QpZsiIL2jDdrKotr-MLyDcZYgiPiTluFU46lE,5317
103
- fractal_server/main.py,sha256=bq-G4HDpLz-y97x4LCh9c0ZA8AQhFRpeJqwQiPfXQMM,4556
113
+ fractal_server/images/tools.py,sha256=37jVIU6RiAGbiyucNDlKe9J3yN3Y47NOvv-RJor9Jm0,4154
114
+ fractal_server/logger.py,sha256=2_IN0WcIzLEX20HFUUkwyZGSIi0yLbE0JamkzXREDZw,5302
115
+ fractal_server/main.py,sha256=4HJO8EiGJp0Iw0p3xEm_zhwjnT4joFG1KuGccIIndjo,4419
104
116
  fractal_server/migrations/env.py,sha256=nfyBpMIOT3kny6t-b-tUjyRjZ4k906bb1_wCQ7me1BI,1353
105
- fractal_server/migrations/naming_convention.py,sha256=htbKrVdetx3pklowb_9Cdo5RqeF0fJ740DNecY5de_M,265
117
+ fractal_server/migrations/naming_convention.py,sha256=bSEMiMZeArmWKrUk-12lhnOw1pAFMg6LEl7yucohPqc,263
106
118
  fractal_server/migrations/versions/034a469ec2eb_task_groups.py,sha256=vrPhC8hfFu1c4HmLHNZyCuqEfecFD8-bWc49bXMNes0,6199
107
119
  fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py,sha256=-BSS9AFTPcu3gYC-sYbawSy4MWQQx8TfMb5BW5EBKmQ,1450
108
120
  fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py,sha256=FxnIvfktnSjy2nBKDIow24on1nMkLw1THhO84FtNZSo,1055
@@ -119,6 +131,7 @@ fractal_server/migrations/versions/5bf02391cfef_v2.py,sha256=axhNkr_H6R4rRbY7oGY
119
131
  fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=Q-DsMzG3IcUV2Ol1dhJWosDvKERamBE6QvA2zzS5zpQ,1632
120
132
  fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py,sha256=mbWuCkTpRAdGbRhW7lhXs_e5S6O37UAcCN6JfoY5H8A,1353
121
133
  fractal_server/migrations/versions/791ce783d3d8_add_indices.py,sha256=gNE6AgJgeJZY99Fbd336Z9see3gRMQvuNBC0xDk_5sw,1154
134
+ fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py,sha256=U7t_8n58taRkd9sxCXOshrTr9M5AhlsQne8SGKa5Jt4,6377
122
135
  fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py,sha256=NSCuhANChsg76vBkShBl-9tQ4VEHubOjtAv1etHhlvY,2684
123
136
  fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py,sha256=68y9-fpSuKx6KPtM_9n8Ho0I1qwa8IoG-yJqXUYQrGg,1111
124
137
  fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py,sha256=6pgODDtyAxevZvAJBj9IJ41inhV1RpwbpZr_qfPPu1A,1115
@@ -149,95 +162,101 @@ fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py,sha256=TDWC
149
162
  fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
163
  fractal_server/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
164
  fractal_server/runner/components.py,sha256=-Ii5l8d_V6f5DFOd-Zsr8VYmOsyqw0Hox9fEFQiuqxY,66
152
- fractal_server/runner/exceptions.py,sha256=lzYefT6IpA2ajcQUzm9kT9pTxRl5UGIJKyLs6v1JczA,1731
165
+ fractal_server/runner/config/__init__.py,sha256=a-vSrvWBeMVnxTtYoy-f5Ibt_mM8MM3F7jqnPvvjHSY,108
166
+ fractal_server/runner/config/_local.py,sha256=_t3s56MAfg5jI8ZOiRSdbvCJLqvQK6kjyAzJ_Fh0KqY,603
167
+ fractal_server/runner/config/_slurm.py,sha256=g8zv-r2aP3vfkY-orKRGO6JbC6yxprR4yOwtpP3uKcg,3633
168
+ fractal_server/runner/config/slurm_mem_to_MB.py,sha256=twtBHIyY3SITe9q1uvH5rQx0QbY_AzexgYB9gaMkVok,2004
169
+ fractal_server/runner/exceptions.py,sha256=N8DLn7tuV8zMSdr8xdJN0aIdytPveSCeQ1Y5IoxXW-8,1778
153
170
  fractal_server/runner/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- fractal_server/runner/executors/base_runner.py,sha256=8Fy5_EG-Y_DBZrRlulkk-3hCDYYSVNuEXYtb-VGZrMM,6065
171
+ fractal_server/runner/executors/base_runner.py,sha256=Zd3sgXnxbyMdvuqUZd0rRRWng_wDlPUuQQLsfkXRLYw,6543
155
172
  fractal_server/runner/executors/call_command_wrapper.py,sha256=n6c9haKyIudBlz9-d3GQb19rewBR54qLG8jlrma6okk,1415
156
173
  fractal_server/runner/executors/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
- fractal_server/runner/executors/local/get_local_config.py,sha256=KBYOkcuwpSYl-ZIAwPBxpn59QSyFF8eJ-fLKVIhwwzA,3594
158
- fractal_server/runner/executors/local/runner.py,sha256=G5zLGrw4KkNR__XIX0QGoBzLPHEF7PULeWpuWyg00UY,10810
174
+ fractal_server/runner/executors/local/get_local_config.py,sha256=HdgDOT3G-wmyG6czH-VsPEQ_g9Rw2IDaGHMOyWDJt1c,1693
175
+ fractal_server/runner/executors/local/runner.py,sha256=cwQyPfSXyvLTigU4hfyQuCTps8QGMhBDN1L9uyhqk4c,12196
159
176
  fractal_server/runner/executors/slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
- fractal_server/runner/executors/slurm_common/_batching.py,sha256=gbHZIxt90GjUwhB9_UInwVqpX-KdxRQMDeXzUagdL3U,8816
177
+ fractal_server/runner/executors/slurm_common/_batching.py,sha256=la_FXt4ErYU63vkmk2SGZcSOqq-Jzp_L9tZfzBY7rlU,8806
161
178
  fractal_server/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
162
- fractal_server/runner/executors/slurm_common/_slurm_config.py,sha256=Su8uQB_DSG8kZbto4s1Tyc4uLCGY64wKb4RCoUEJ6Uc,15717
163
- fractal_server/runner/executors/slurm_common/base_slurm_runner.py,sha256=6aYiabn0r1J_FAhW-7id7LFby9REVaoVoMTNBdRcDac,39976
164
- fractal_server/runner/executors/slurm_common/get_slurm_config.py,sha256=KhQQJrGQZLX5u8fsMcIx7FN8jUKSGEeG68yO7Ay_LXg,7454
165
- fractal_server/runner/executors/slurm_common/remote.py,sha256=LHK2Ram8X8q6jNSCxnnwKUwmSJMsyQyRem_VjH53qdw,3811
166
- fractal_server/runner/executors/slurm_common/slurm_job_task_models.py,sha256=DWOspO6k5C5FUVdE8t_qeb2G-xgD7h2yyFcpasjrtmE,3516
179
+ fractal_server/runner/executors/slurm_common/base_slurm_runner.py,sha256=jnUuoHDwNu1UL0FWu61PjY8GLgK20PvVBpJRwRCKJP8,40969
180
+ fractal_server/runner/executors/slurm_common/get_slurm_config.py,sha256=kQQtc4o5Ya3gLMB6x9xuuyDX6jKpa0bSqkHeiAz7lTM,7071
181
+ fractal_server/runner/executors/slurm_common/remote.py,sha256=2ByWIHFKL1bW6CS04ijrJvX4jH8CpX2Pp-QhAncc-Hs,3806
182
+ fractal_server/runner/executors/slurm_common/slurm_config.py,sha256=hnZWxgXZsawubPNRHPXMHe1eD8cT44z1BTuKaYqPLTU,7895
183
+ fractal_server/runner/executors/slurm_common/slurm_job_task_models.py,sha256=wOVtACSFLulc0gUwXlj_SXJHIQmgHpseohw-SahT1DM,3517
167
184
  fractal_server/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
185
  fractal_server/runner/executors/slurm_ssh/run_subprocess.py,sha256=SyW6t4egvbiARph2YkFjc88Hj94fCamZVi50L7ph8VM,996
169
- fractal_server/runner/executors/slurm_ssh/runner.py,sha256=3YEE3_CKQWqrgINA7LLn5Xnq510clskTP2KDSTc2orw,10098
186
+ fractal_server/runner/executors/slurm_ssh/runner.py,sha256=1ehjRxcbChvk9mZgqCUCQY69Xpn8JyYH-Db6cQ7Xrt4,10203
170
187
  fractal_server/runner/executors/slurm_ssh/tar_commands.py,sha256=yqBjWTLmh_FzhCllt_KfbuCUGvRhsHLVWlPOZlRWLzY,1762
171
188
  fractal_server/runner/executors/slurm_sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
- fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=W-FxnVcHxMGpv4zGgJVttVQoweyGgR4uBxO22QIZkp0,2576
173
- fractal_server/runner/executors/slurm_sudo/runner.py,sha256=YDR4z5KuMTxjW0UcK6N5ntDqasrG8lVs3KVu3SGs6F8,5858
189
+ fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=9pN0N409M24TXIyhuWJb-Tj0Ztaud68xtQ7wfAibmfk,2566
190
+ fractal_server/runner/executors/slurm_sudo/runner.py,sha256=a_9c29735U3xqiWGv8WsyBN8SX9SgkGTY1mepNUUh64,5916
174
191
  fractal_server/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
175
192
  fractal_server/runner/set_start_and_last_task_index.py,sha256=NsioSzfEpGyo9ZKrV5KsbxeI7d5V3tE678Y3IAo5rHM,1218
176
- fractal_server/runner/shutdown.py,sha256=ViSNJyXWU_iWPSDOOMGNh_iQdUFrdPh_jvf8vVKLpAo,1950
177
193
  fractal_server/runner/task_files.py,sha256=MvOrklZrN8iLj3oPx7G-iaEFj2N_mkTOnxIBX-okH1E,4037
178
194
  fractal_server/runner/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
- fractal_server/runner/v2/_local.py,sha256=F6gTF1r36O5MxXQ2tUkifYk9GHyPbeUB5N4TSu0tsBw,3067
180
- fractal_server/runner/v2/_slurm_ssh.py,sha256=Pu4WO9uBMUOmAo1XsG-rLm9_gyIy4o6lP_gpC660qJs,2871
181
- fractal_server/runner/v2/_slurm_sudo.py,sha256=B94KZIi_8cENUc97m0nN8GL_b3LWwO0287qZeFkNh8o,2971
182
- fractal_server/runner/v2/db_tools.py,sha256=ozp4RFLB3LNI0rM0q0udi6ja8-5vooH_dVqrbmTPNDg,3323
195
+ fractal_server/runner/v2/_local.py,sha256=js1W8_9QQad_kbvMM8ytjfWX_BEoq8OER9BLdxH0JRs,3759
196
+ fractal_server/runner/v2/_slurm_ssh.py,sha256=F7Zcs9NpmXDktTX_fQQke99Ov06Hi4XUUDsDKZwOmOI,4437
197
+ fractal_server/runner/v2/_slurm_sudo.py,sha256=f34B6KWtn1Wwm7Y-D95Ecub0vKpA03zYL7jZAF53tfI,4344
198
+ fractal_server/runner/v2/db_tools.py,sha256=kLB0sGYNuCMPPoP4XDSClPIf7x5lSseTKUjzGk6gAfc,3318
183
199
  fractal_server/runner/v2/deduplicate_list.py,sha256=vidkd7K6u3w0A4zVgsGZkc9mwoP6ihTYJZQUhBNorfE,667
184
200
  fractal_server/runner/v2/merge_outputs.py,sha256=0ahaSwdMFAoEhxVaEaO9nSJuKIcWg9pDZ356ktSHcC0,897
185
- fractal_server/runner/v2/runner.py,sha256=wGfvHhO61Rqik8ZNDxoSQC4b_5UnVBgQmwZmZoPmBvE,19545
186
- fractal_server/runner/v2/runner_functions.py,sha256=k5PIeaNsUTWGDpf23kZwvh4PPkTZvDJP9p-by2zTHpY,19018
187
- fractal_server/runner/v2/submit_workflow.py,sha256=I_Etm4_u5fmyb4gtajlVu4QS2RPehA2ZM5A77gUUNjU,12348
201
+ fractal_server/runner/v2/runner.py,sha256=1vj6m_ir6RrYNr3Ew98h5hnEAms_TaHPhee52swQ_gA,19404
202
+ fractal_server/runner/v2/runner_functions.py,sha256=w_i74LCt_9f07w511wslTFhoDUtoE1R-IKcglEGWPIc,19618
203
+ fractal_server/runner/v2/submit_workflow.py,sha256=s3mo5pLZH5x8V01IZjoJXcbpCl9geZwvISEr5StSBeI,11458
188
204
  fractal_server/runner/v2/task_interface.py,sha256=ftPPpOU16rbJD8q-QV7o_3ey8W7MQTFuWJiYUr4OmF4,2532
189
- fractal_server/runner/versions.py,sha256=4BW-8Et8RVgILgpFoUJLWkEnZz53pv8hv_2ucG480ns,398
205
+ fractal_server/runner/versions.py,sha256=uz59Dxj7BphnFnr-p0kyaZRH0h4w5Xkd0UJNVGtt4ds,474
190
206
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
191
- fractal_server/ssh/_fabric.py,sha256=320heQ14BBwj7QmNeopmiRWW83XqFOqn2TpmnkwDwvE,26113
207
+ fractal_server/ssh/_fabric.py,sha256=Xv1SrdqwxLAWlZXjYG0-KlM0QHPe5NX6Gu0yAIrygik,26083
192
208
  fractal_server/string_tools.py,sha256=UJFi8rhlI6QXxX5twycLjsvOQ6x4uG7L3JdxEVDhC5A,2592
193
209
  fractal_server/syringe.py,sha256=3YJeIALH-wibuJ9R5VMNYUWh7x1-MkWT0SqGcWG5MY8,2795
194
210
  fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
211
+ fractal_server/tasks/config/__init__.py,sha256=f1kARvKJPdM3b0HmJhIyMRxi8RCgPajUfS7RBhNfLKY,152
212
+ fractal_server/tasks/config/_pixi.py,sha256=KVf0xYAf6hAnOKSrTmg_GYJ5VaA19kEMAydRJNHjeiA,3773
213
+ fractal_server/tasks/config/_python.py,sha256=uEBm4Z9Ah-7A7pXBcSTBhFgefSuJPwN8WrWQHoNdp9M,1353
195
214
  fractal_server/tasks/utils.py,sha256=V7dj8o2AnoHhGSTYlqJHcRFhCIpmOrMOUhtiE_DvRVA,291
196
215
  fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
197
216
  fractal_server/tasks/v2/local/__init__.py,sha256=2dJqJIwn9UEANg8lPFprxVLk3ug-4xYIb5pvIsqPb5s,353
198
- fractal_server/tasks/v2/local/_utils.py,sha256=vhi0LKWXeU4-2xVYe1G52-wzfl11fxgkM9SDFGo-NlM,3485
199
- fractal_server/tasks/v2/local/collect.py,sha256=mO1gDIQH5VbpvFQL4H37RhFRlQ1h7dInqy9RASiiBx4,11896
200
- fractal_server/tasks/v2/local/collect_pixi.py,sha256=Ej4ovQeFZMTN-ZQNjMZDwRxSWivEWAS233CIZlEzWDc,10897
201
- fractal_server/tasks/v2/local/deactivate.py,sha256=0gIOk8Cych-QCMwKPcw29tTly3pBzmWtqsJS8JseNyo,9730
202
- fractal_server/tasks/v2/local/deactivate_pixi.py,sha256=x9YCILEP1EjCrZccAcj5C5i0NBzqSXQc2L-r3hfOL6s,3493
203
- fractal_server/tasks/v2/local/delete.py,sha256=TbNcg0IhbJNXzXsO2Vgv6Dq4jWmFUVtSuDBMotfzK4k,2821
204
- fractal_server/tasks/v2/local/reactivate.py,sha256=Q43DOadNeFyyfgNP67lUqaXmZsS6onv67XwxH_-5ANA,5756
205
- fractal_server/tasks/v2/local/reactivate_pixi.py,sha256=IuxDRaj8i6Rc582TIbc9HVKQ9pOvR4IepyXSaJx2PfQ,7565
217
+ fractal_server/tasks/v2/local/_utils.py,sha256=MXrvGOJ3oSlZFtoWFX3eJhtvabq1SmacPWNxlrL-Pu8,3469
218
+ fractal_server/tasks/v2/local/collect.py,sha256=2dvR90b57gCz8F_bmNoMLtnvlrW1ZLBzAjVzP4tjCKU,12162
219
+ fractal_server/tasks/v2/local/collect_pixi.py,sha256=BTWwu07LZQB0zTvCpHJkyEHgUl8XlF1qSN5NsOC5MVo,11489
220
+ fractal_server/tasks/v2/local/deactivate.py,sha256=cPJbB-zoHjmxL5goaNAUItkW0o_fg-YAd2YuXu_n8Rg,9925
221
+ fractal_server/tasks/v2/local/deactivate_pixi.py,sha256=h1XdAwihACywC9qak5K2tlfz4y32zZJOA-OEkIVy67U,3627
222
+ fractal_server/tasks/v2/local/delete.py,sha256=rmAjZ5i8x0jAIqOjG7eH9XFtUZkeo172S2WyZRFIVq0,2960
223
+ fractal_server/tasks/v2/local/reactivate.py,sha256=ZQTaqPquevpwdchUJIp59Lw01vErA3T2XN8g1jMBNAE,6013
224
+ fractal_server/tasks/v2/local/reactivate_pixi.py,sha256=R0D3bUwrAo3uyDNZRYsQ65NMl7-nhqd1GefBAh9Hk5c,8159
206
225
  fractal_server/tasks/v2/ssh/__init__.py,sha256=dPK6BtEZVh1GiFP05j1RKTEnZvjJez8o2KkMC2hWXaw,339
207
- fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py,sha256=24BX64KbnBr4Wd3k9KmSNz4WHzvLf9AF7Hh1-FDlC9w,7472
208
- fractal_server/tasks/v2/ssh/_utils.py,sha256=AjbH4o6-ENe-ZiHvE_pGe_yw8e2lapGMYtLX7VuBkA8,6111
209
- fractal_server/tasks/v2/ssh/collect.py,sha256=WesUBtNaax9ST7CtgqAD2qd-ZII4t1JFPzRzltEOuM8,14333
210
- fractal_server/tasks/v2/ssh/collect_pixi.py,sha256=i7_xqAy9kkF19AHHGSAmvs-QUEQIkPJvVxXUiau1WhU,15210
211
- fractal_server/tasks/v2/ssh/deactivate.py,sha256=7gJ2mOah0wKwUnK0S9QpaXg08_WE95P0rC-oExAGhLE,12438
212
- fractal_server/tasks/v2/ssh/deactivate_pixi.py,sha256=K0yK_NPUqhFMj6cp6G_0Kfn0Yo7oQux4kT5dFPulnos,4748
213
- fractal_server/tasks/v2/ssh/delete.py,sha256=9DCe5QXZ14pY8NRb_FCqpIr31r5Gboz6bnFrS8Oa044,4277
214
- fractal_server/tasks/v2/ssh/reactivate.py,sha256=NJIgMNFKaXMhbvK0iZOsMwMtsms6Boj9f8N4L01X9Bo,8271
215
- fractal_server/tasks/v2/ssh/reactivate_pixi.py,sha256=yRoq7xTCpKgx8Fxc5RTpEwQI-L0-9Tjq7vnX_v3v7JE,11210
226
+ fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py,sha256=3iixFaS5Uqhh28qAv_yBSW4YvffqIhE0LK0gQee9qjI,7448
227
+ fractal_server/tasks/v2/ssh/_utils.py,sha256=nqw_xn3C_cD7blGyP2ySjsMIuUzZHEHBjK0NeuXf6FI,6071
228
+ fractal_server/tasks/v2/ssh/collect.py,sha256=n3OT7EdA0BwtFpKfVFHabRZtdNUZQ8LaGWd_p3tqmfY,14568
229
+ fractal_server/tasks/v2/ssh/collect_pixi.py,sha256=BpcuyjJ_VReHIahtuuQNTXtaSSHnSjHqmUXDQmLCfTw,15871
230
+ fractal_server/tasks/v2/ssh/deactivate.py,sha256=VoXOyT5e-GVr593hDsDR7vJcIN_TIONSI4rkE2ZwxVo,12585
231
+ fractal_server/tasks/v2/ssh/deactivate_pixi.py,sha256=PCMygjFyqbBWbwnjplmmedANwzobzkbS5w28tRdpr4o,4863
232
+ fractal_server/tasks/v2/ssh/delete.py,sha256=f7j9RR0h0c1rUGeKjI-HhwIq6SGfhzE9kIqWcmrVbWA,4387
233
+ fractal_server/tasks/v2/ssh/reactivate.py,sha256=ScVwW5K7c0PKcb0YbK25pADAF_T5uw2yX32KafsL7Ow,8488
234
+ fractal_server/tasks/v2/ssh/reactivate_pixi.py,sha256=TAY_77QtUHcb5jz33PDbzgYundVSx_C4tJFTbVH_70A,11886
216
235
  fractal_server/tasks/v2/templates/1_create_venv.sh,sha256=PK0jdHKtQpda1zULebBaVPORt4t6V17wa4N1ohcj5ac,548
217
236
  fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=vN9DX-eucJjB-XCuQuZmkuATGBzL4FlDQJTQdVewJG8,2155
218
237
  fractal_server/tasks/v2/templates/3_pip_freeze.sh,sha256=JldREScEBI4cD_qjfX4UK7V4aI-FnX9ZvVNxgpSOBFc,168
219
- fractal_server/tasks/v2/templates/4_pip_show.sh,sha256=qm1vPy6AkKhWDjCJGXS8LqCLYO3KsAyRK325ZsFcF6U,1747
238
+ fractal_server/tasks/v2/templates/4_pip_show.sh,sha256=k6yO4cuTe4U6NpHdjpbjgOVNOC_WKpjZYM9CZCPVzhI,1684
220
239
  fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh,sha256=q-6ZUvA6w6FDVEoSd9O63LaJ9tKZc7qAFH72SGPrd_k,284
221
240
  fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh,sha256=jHoALPagSCD1_HuqrxEYibWAJNOUxQGm-A2oE3f_LPE,982
222
241
  fractal_server/tasks/v2/templates/pixi_1_extract.sh,sha256=Jdy5OyKo2jxe_qIDB9Zi4a0FL0cMBysxvBPHlUrARQM,1099
223
242
  fractal_server/tasks/v2/templates/pixi_2_install.sh,sha256=h6-M101Q1AdAfZNZyPfSUc8AlZ-uS84Hae4vJdDSglY,1601
224
243
  fractal_server/tasks/v2/templates/pixi_3_post_install.sh,sha256=99J8KXkNeQk9utuEtUxfAZS6VCThC32X7I7HAp2gdTU,2501
225
244
  fractal_server/tasks/v2/utils_background.py,sha256=jjWxNbHPuvAkXNIQ9Bqs67X72xHSRqmY8_BCoj0HM3E,4840
226
- fractal_server/tasks/v2/utils_database.py,sha256=yi7793Uue32O59OBVUgomO42oUrVKdSKXoShBUNDdK0,1807
245
+ fractal_server/tasks/v2/utils_database.py,sha256=C1td6m6ab1NdXVoT6stvVdrY_3FNck8OkRZZhn9h8ZA,1797
227
246
  fractal_server/tasks/v2/utils_package_names.py,sha256=RDg__xrvQs4ieeVzmVdMcEh95vGQYrv9Hfal-5EDBM8,2393
228
- fractal_server/tasks/v2/utils_pixi.py,sha256=tqCnxMdxs7KGWncWvk0alrdvDbX-w77P3fAot68Bqh4,3257
229
- fractal_server/tasks/v2/utils_python_interpreter.py,sha256=kF86UClk6HxghRLDYY4rKOXwnWGUYQfrNsVNxOmOGxM,964
230
- fractal_server/tasks/v2/utils_templates.py,sha256=BU2F2Hn0At-QjtUc6-BmU9CAsL3ljqvVv7cGxrsFluc,3541
247
+ fractal_server/tasks/v2/utils_pixi.py,sha256=4q0inbOfJ-TWe7wFIq-f7W7-iKyd98tgNQpEkR-TE6E,3441
248
+ fractal_server/tasks/v2/utils_python_interpreter.py,sha256=36AvrMoydr9w6Rm_7hKl5QK8zYI0KIm4Pv8WHANWwjE,658
249
+ fractal_server/tasks/v2/utils_templates.py,sha256=L5GblhIKJwyzUbCORj1et5mh-7mG19nT5kmIpxOEj90,3489
231
250
  fractal_server/types/__init__.py,sha256=aA_8J1xXzuiLqpwO_Qf18-qzaRcYkHzevhH_T-diXWM,2026
232
251
  fractal_server/types/validators/__init__.py,sha256=5uj6KJ9MelFZgyoq3MzXLhgWCl0yiriS7XKmb0gathg,392
233
252
  fractal_server/types/validators/_common_validators.py,sha256=MpxyaP2kwgbyCTOaVRjYnJ74Lfi0f2X0q3rjX9w3vTk,1170
234
253
  fractal_server/types/validators/_filter_validators.py,sha256=irmjzycmiR6F4fmWUeA45Pdh7AeLufwVjNItskDsknk,831
235
254
  fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=HL7NgV8d56XbcD6gG5PVFUPMHjDm5Q-d7cXhVLdFAGU,387
236
255
  fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
237
- fractal_server/utils.py,sha256=Vn35lApt1T1J8nc09sAVqd10Cy0sa3dLipcljI-hkuk,2185
256
+ fractal_server/utils.py,sha256=SYVVUuXe_nWyrJLsy7QA-KJscwc5PHEXjvsW4TK7XQI,2180
238
257
  fractal_server/zip_tools.py,sha256=H0w7wS5yE4ebj7hw1_77YQ959dl2c-L0WX6J_ro1TY4,4884
239
- fractal_server-2.16.5.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
240
- fractal_server-2.16.5.dist-info/METADATA,sha256=gPfqUHwJy1CdFX2rB3KoegmVJbFJ6JGbCSf52xVeleA,4335
241
- fractal_server-2.16.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
242
- fractal_server-2.16.5.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
243
- fractal_server-2.16.5.dist-info/RECORD,,
258
+ fractal_server-2.17.0.dist-info/METADATA,sha256=R41Og9ExXXTidgDTZ3cHzGwQahiFMD2k6r1p0BYkHhE,4224
259
+ fractal_server-2.17.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
260
+ fractal_server-2.17.0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
261
+ fractal_server-2.17.0.dist-info/licenses/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
262
+ fractal_server-2.17.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,73 +0,0 @@
1
- from fastapi import HTTPException
2
- from fastapi import status
3
- from pydantic import ValidationError
4
-
5
- from fractal_server.app.db import AsyncSession
6
- from fractal_server.app.models import UserOAuth
7
- from fractal_server.app.models import UserSettings
8
- from fractal_server.app.user_settings import SlurmSshUserSettings
9
- from fractal_server.app.user_settings import SlurmSudoUserSettings
10
- from fractal_server.logger import set_logger
11
-
12
- logger = set_logger(__name__)
13
-
14
-
15
- def verify_user_has_settings(user: UserOAuth) -> None:
16
- """
17
- Check that the `user.user_settings_id` foreign-key is set.
18
-
19
- NOTE: This check will become useless when we make the foreign-key column
20
- required, but for the moment (as of v2.6.0) we have to keep it in place.
21
-
22
- Arguments:
23
- user: The user to be checked.
24
- """
25
- if user.user_settings_id is None:
26
- raise HTTPException(
27
- status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
28
- detail=f"Error: user '{user.email}' has no settings.",
29
- )
30
-
31
-
32
- async def validate_user_settings(
33
- *, user: UserOAuth, backend: str, db: AsyncSession
34
- ) -> UserSettings:
35
- """
36
- Get a UserSettings object and validate it based on a given Fractal backend.
37
-
38
- Arguments:
39
- user: The user whose settings we should validate.
40
- backend: The value of `FRACTAL_RUNNER_BACKEND`
41
- db: An async DB session
42
-
43
- Returns:
44
- `UserSetting` object associated to `user`, if valid.
45
- """
46
-
47
- verify_user_has_settings(user)
48
-
49
- user_settings = await db.get(UserSettings, user.user_settings_id)
50
-
51
- if backend == "slurm_ssh":
52
- UserSettingsValidationModel = SlurmSshUserSettings
53
- elif backend == "slurm":
54
- UserSettingsValidationModel = SlurmSudoUserSettings
55
- else:
56
- # For other backends, we don't validate anything
57
- return user_settings
58
-
59
- try:
60
- UserSettingsValidationModel(**user_settings.model_dump())
61
- except ValidationError as e:
62
- error_msg = (
63
- "User settings are not valid for "
64
- f"FRACTAL_RUNNER_BACKEND='{backend}'. "
65
- f"Original error: {str(e)}"
66
- )
67
- logger.warning(error_msg)
68
- raise HTTPException(
69
- status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
70
- detail=error_msg,
71
- )
72
-
73
- return user_settings
@@ -1,67 +0,0 @@
1
- from pydantic import BaseModel
2
- from pydantic import ConfigDict
3
- from pydantic import field_validator
4
-
5
- from fractal_server.string_tools import validate_cmd
6
- from fractal_server.types import AbsolutePathStr
7
- from fractal_server.types import ListUniqueNonEmptyString
8
- from fractal_server.types import NonEmptyStr
9
-
10
- __all__ = (
11
- "UserSettingsRead",
12
- "UserSettingsReadStrict",
13
- "UserSettingsUpdate",
14
- "UserSettingsUpdateStrict",
15
- )
16
-
17
-
18
- class UserSettingsRead(BaseModel):
19
- """
20
- Schema reserved for superusers
21
- """
22
-
23
- id: int
24
- ssh_host: str | None = None
25
- ssh_username: str | None = None
26
- ssh_private_key_path: str | None = None
27
- ssh_tasks_dir: str | None = None
28
- ssh_jobs_dir: str | None = None
29
- slurm_user: str | None = None
30
- slurm_accounts: list[str]
31
- project_dir: str | None = None
32
-
33
-
34
- class UserSettingsReadStrict(BaseModel):
35
- slurm_user: str | None = None
36
- slurm_accounts: list[str]
37
- ssh_username: str | None = None
38
- project_dir: str | None = None
39
-
40
-
41
- class UserSettingsUpdate(BaseModel):
42
- """
43
- Schema reserved for superusers
44
- """
45
-
46
- model_config = ConfigDict(extra="forbid")
47
-
48
- ssh_host: NonEmptyStr | None = None
49
- ssh_username: NonEmptyStr | None = None
50
- ssh_private_key_path: AbsolutePathStr | None = None
51
- ssh_tasks_dir: AbsolutePathStr | None = None
52
- ssh_jobs_dir: AbsolutePathStr | None = None
53
- slurm_user: NonEmptyStr | None = None
54
- slurm_accounts: ListUniqueNonEmptyString | None = None
55
- project_dir: AbsolutePathStr | None = None
56
-
57
- @field_validator("project_dir", mode="after")
58
- @classmethod
59
- def validate_project_dir(cls, value):
60
- if value is not None:
61
- validate_cmd(value)
62
- return value
63
-
64
-
65
- class UserSettingsUpdateStrict(BaseModel):
66
- model_config = ConfigDict(extra="forbid")
67
- slurm_accounts: ListUniqueNonEmptyString | None = None
@@ -1,42 +0,0 @@
1
- # TODO: move this file to the appropriate path
2
- from pydantic import BaseModel
3
-
4
-
5
- class SlurmSshUserSettings(BaseModel):
6
- """
7
- Subset of user settings which must be present for task collection and job
8
- execution when using the Slurm-SSH runner.
9
-
10
- Attributes:
11
- ssh_host: SSH-reachable host where a SLURM client is available.
12
- ssh_username: User on `ssh_host`.
13
- ssh_private_key_path: Path of private SSH key for `ssh_username`.
14
- ssh_tasks_dir: Task-venvs base folder on `ssh_host`.
15
- ssh_jobs_dir: Jobs base folder on `ssh_host`.
16
- slurm_accounts:
17
- List of SLURM accounts, to be used upon Fractal job submission.
18
- """
19
-
20
- ssh_host: str
21
- ssh_username: str
22
- ssh_private_key_path: str
23
- ssh_tasks_dir: str
24
- ssh_jobs_dir: str
25
- slurm_accounts: list[str]
26
-
27
-
28
- class SlurmSudoUserSettings(BaseModel):
29
- """
30
- Subset of user settings which must be present for task collection and job
31
- execution when using the Slurm-sudo runner.
32
-
33
- Attributes:
34
- slurm_user: User to be impersonated via `sudo -u`.
35
- project_dir: Folder where `slurm_user` can write.
36
- slurm_accounts:
37
- List of SLURM accounts, to be used upon Fractal job submission.
38
- """
39
-
40
- slurm_user: str
41
- project_dir: str
42
- slurm_accounts: list[str]