fractal-server 2.15.0a4__tar.gz → 2.15.0a5__tar.gz

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 (236) hide show
  1. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/PKG-INFO +1 -1
  2. fractal_server-2.15.0a5/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +22 -0
  4. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/task_collection.py +5 -13
  5. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/task_collection_pixi.py +7 -13
  6. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/task_group.py +3 -0
  7. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/config.py +29 -1
  8. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/collect_pixi.py +21 -0
  9. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/reactivate_pixi.py +21 -0
  10. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/collect_pixi.py +17 -0
  11. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +14 -0
  12. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/pixi_2_install.sh +10 -1
  13. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -4
  14. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/pyproject.toml +2 -2
  15. fractal_server-2.15.0a4/fractal_server/__init__.py +0 -1
  16. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/LICENSE +0 -0
  17. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/README.md +0 -0
  18. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/__main__.py +0 -0
  19. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/alembic.ini +0 -0
  20. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/__init__.py +0 -0
  21. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/db/__init__.py +0 -0
  22. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/__init__.py +0 -0
  23. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/linkusergroup.py +0 -0
  24. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/linkuserproject.py +0 -0
  25. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/security.py +0 -0
  26. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/user_settings.py +0 -0
  27. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/__init__.py +0 -0
  28. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/accounting.py +0 -0
  29. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/dataset.py +0 -0
  30. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/history.py +0 -0
  31. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/job.py +0 -0
  32. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/project.py +0 -0
  33. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/task.py +0 -0
  34. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/task_group.py +0 -0
  35. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/workflow.py +0 -0
  36. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/models/v2/workflowtask.py +0 -0
  37. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/__init__.py +0 -0
  38. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/__init__.py +0 -0
  39. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  40. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
  41. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  42. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/job.py +0 -0
  43. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/project.py +0 -0
  44. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/task.py +0 -0
  45. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  46. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  47. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/__init__.py +0 -0
  48. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  49. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  50. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  51. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  52. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
  53. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
  54. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  55. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/history.py +0 -0
  56. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/images.py +0 -0
  57. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/job.py +0 -0
  58. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -0
  59. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/project.py +0 -0
  60. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/status_legacy.py +0 -0
  61. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/submit.py +0 -0
  62. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/task.py +0 -0
  63. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  64. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  65. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/task_version_update.py +0 -0
  66. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  67. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  68. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  69. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/__init__.py +0 -0
  70. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  71. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/current_user.py +0 -0
  72. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/group.py +0 -0
  73. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/login.py +0 -0
  74. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/oauth.py +0 -0
  75. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/register.py +0 -0
  76. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/router.py +0 -0
  77. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/auth/users.py +0 -0
  78. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/aux/__init__.py +0 -0
  79. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/aux/_job.py +0 -0
  80. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/aux/_runner.py +0 -0
  81. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  82. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/routes/pagination.py +0 -0
  83. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/__init__.py +0 -0
  84. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/components.py +0 -0
  85. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/exceptions.py +0 -0
  86. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/__init__.py +0 -0
  87. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/base_runner.py +0 -0
  88. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/call_command_wrapper.py +0 -0
  89. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/local/__init__.py +0 -0
  90. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/local/get_local_config.py +0 -0
  91. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/local/runner.py +0 -0
  92. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/__init__.py +0 -0
  93. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/_batching.py +0 -0
  94. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/_job_states.py +0 -0
  95. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/_slurm_config.py +0 -0
  96. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py +0 -0
  97. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/get_slurm_config.py +0 -0
  98. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/remote.py +0 -0
  99. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
  100. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_ssh/__init__.py +0 -0
  101. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_ssh/run_subprocess.py +0 -0
  102. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_ssh/runner.py +0 -0
  103. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_ssh/tar_commands.py +0 -0
  104. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_sudo/__init__.py +0 -0
  105. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  106. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/executors/slurm_sudo/runner.py +0 -0
  107. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/filenames.py +0 -0
  108. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  109. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/shutdown.py +0 -0
  110. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/task_files.py +0 -0
  111. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/__init__.py +0 -0
  112. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/_local.py +0 -0
  113. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/_slurm_ssh.py +0 -0
  114. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/_slurm_sudo.py +0 -0
  115. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/db_tools.py +0 -0
  116. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  117. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  118. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/runner.py +0 -0
  119. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  120. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/submit_workflow.py +0 -0
  121. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/v2/task_interface.py +0 -0
  122. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/runner/versions.py +0 -0
  123. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/__init__.py +0 -0
  124. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/user.py +0 -0
  125. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/user_group.py +0 -0
  126. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/user_settings.py +0 -0
  127. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/__init__.py +0 -0
  128. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/accounting.py +0 -0
  129. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/dataset.py +0 -0
  130. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/dumps.py +0 -0
  131. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/history.py +0 -0
  132. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/job.py +0 -0
  133. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/manifest.py +0 -0
  134. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/project.py +0 -0
  135. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
  136. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/task.py +0 -0
  137. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  138. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/task_group.py +0 -0
  139. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/workflow.py +0 -0
  140. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  141. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/security/__init__.py +0 -0
  142. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/security/signup_email.py +0 -0
  143. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/app/user_settings.py +0 -0
  144. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/data_migrations/2_14_10.py +0 -0
  145. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/data_migrations/README.md +0 -0
  146. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/data_migrations/tools.py +0 -0
  147. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/exceptions.py +0 -0
  148. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/gunicorn_fractal.py +0 -0
  149. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/images/__init__.py +0 -0
  150. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/images/models.py +0 -0
  151. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/images/status_tools.py +0 -0
  152. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/images/tools.py +0 -0
  153. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/logger.py +0 -0
  154. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/main.py +0 -0
  155. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/env.py +0 -0
  156. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/naming_convention.py +0 -0
  157. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  158. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  159. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  160. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  161. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  162. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  163. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  164. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  165. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  166. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  167. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  168. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  169. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  170. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
  171. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  172. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  173. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  174. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  175. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
  176. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  177. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  178. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  179. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
  180. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  181. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  182. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  183. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  184. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
  185. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
  186. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  187. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  188. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  189. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  190. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  191. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  192. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  193. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
  194. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  195. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  196. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/py.typed +0 -0
  197. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/ssh/__init__.py +0 -0
  198. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/ssh/_fabric.py +0 -0
  199. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/string_tools.py +0 -0
  200. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/syringe.py +0 -0
  201. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/__init__.py +0 -0
  202. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/utils.py +0 -0
  203. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/__init__.py +0 -0
  204. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/__init__.py +0 -0
  205. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/_utils.py +0 -0
  206. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/collect.py +0 -0
  207. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  208. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/deactivate_pixi.py +0 -0
  209. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  210. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  211. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  212. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  213. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  214. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +0 -0
  215. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  216. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  217. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  218. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  219. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  220. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  221. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  222. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
  223. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/utils_background.py +0 -0
  224. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/utils_database.py +0 -0
  225. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  226. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/utils_pixi.py +0 -0
  227. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  228. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/tasks/v2/utils_templates.py +0 -0
  229. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/types/__init__.py +0 -0
  230. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/types/validators/__init__.py +0 -0
  231. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/types/validators/_common_validators.py +0 -0
  232. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/types/validators/_filter_validators.py +0 -0
  233. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
  234. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/urls.py +0 -0
  235. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/utils.py +0 -0
  236. {fractal_server-2.15.0a4 → fractal_server-2.15.0a5}/fractal_server/zip_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fractal-server
3
- Version: 2.15.0a4
3
+ Version: 2.15.0a5
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  License: BSD-3-Clause
6
6
  Author: Tommaso Comparin
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.15.0a5"
@@ -333,6 +333,28 @@ async def _verify_non_duplication_group_constraint(
333
333
  )
334
334
 
335
335
 
336
+ async def _verify_non_duplication_group_path(
337
+ path: str | None,
338
+ db: AsyncSession,
339
+ ) -> None:
340
+ """
341
+ Verify uniqueness of non-`None` `TaskGroupV2.path`
342
+ """
343
+ if path is None:
344
+ return
345
+ stm = select(TaskGroupV2.id).where(TaskGroupV2.path == path)
346
+ res = await db.execute(stm)
347
+ duplicate_ids = res.scalars().all()
348
+ if duplicate_ids:
349
+ raise HTTPException(
350
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
351
+ detail=(
352
+ f"Other TaskGroups already have {path=}: "
353
+ f"{sorted(duplicate_ids)}."
354
+ ),
355
+ )
356
+
357
+
336
358
  async def _add_warnings_to_workflow_tasks(
337
359
  wftask_list: list[WorkflowTaskV2], user_id: int, db: AsyncSession
338
360
  ) -> list[dict[str, Any]]:
@@ -13,7 +13,6 @@ from fastapi import UploadFile
13
13
  from pydantic import BaseModel
14
14
  from pydantic import model_validator
15
15
  from pydantic import ValidationError
16
- from sqlmodel import select
17
16
 
18
17
  from .....config import get_settings
19
18
  from .....logger import reset_logger_handlers
@@ -31,6 +30,7 @@ from ...aux.validate_user_settings import validate_user_settings
31
30
  from ._aux_functions_task_lifecycle import get_package_version_from_pypi
32
31
  from ._aux_functions_tasks import _get_valid_user_group_id
33
32
  from ._aux_functions_tasks import _verify_non_duplication_group_constraint
33
+ from ._aux_functions_tasks import _verify_non_duplication_group_path
34
34
  from ._aux_functions_tasks import _verify_non_duplication_user_constraint
35
35
  from fractal_server.app.models import UserOAuth
36
36
  from fractal_server.app.models.v2 import TaskGroupActivityV2
@@ -291,18 +291,10 @@ async def collect_tasks_pip(
291
291
  version=task_group_attrs["version"],
292
292
  db=db,
293
293
  )
294
-
295
- # Verify that task-group path is unique
296
- stm = select(TaskGroupV2).where(TaskGroupV2.path == task_group_path)
297
- res = await db.execute(stm)
298
- for conflicting_task_group in res.scalars().all():
299
- raise HTTPException(
300
- status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
301
- detail=(
302
- f"Another task-group already has path={task_group_path}.\n"
303
- f"{conflicting_task_group=}"
304
- ),
305
- )
294
+ await _verify_non_duplication_group_path(
295
+ path=task_group_attrs["path"],
296
+ db=db,
297
+ )
306
298
 
307
299
  # On-disk checks
308
300
 
@@ -9,7 +9,6 @@ from fastapi import HTTPException
9
9
  from fastapi import Response
10
10
  from fastapi import status
11
11
  from fastapi import UploadFile
12
- from sqlmodel import select
13
12
 
14
13
  from fractal_server.app.db import AsyncSession
15
14
  from fractal_server.app.db import get_async_db
@@ -22,6 +21,9 @@ from fractal_server.app.routes.api.v2._aux_functions_tasks import (
22
21
  from fractal_server.app.routes.api.v2._aux_functions_tasks import (
23
22
  _verify_non_duplication_group_constraint,
24
23
  )
24
+ from fractal_server.app.routes.api.v2._aux_functions_tasks import (
25
+ _verify_non_duplication_group_path,
26
+ )
25
27
  from fractal_server.app.routes.api.v2._aux_functions_tasks import (
26
28
  _verify_non_duplication_user_constraint,
27
29
  )
@@ -156,18 +158,10 @@ async def collect_task_pixi(
156
158
  version=task_group_attrs["version"],
157
159
  db=db,
158
160
  )
159
-
160
- # NOTE: to be removed with issue #2634
161
- stm = select(TaskGroupV2).where(TaskGroupV2.path == task_group_path)
162
- res = await db.execute(stm)
163
- for conflicting_task_group in res.scalars().all():
164
- raise HTTPException(
165
- status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
166
- detail=(
167
- f"Another task-group already has path={task_group_path}.\n"
168
- f"{conflicting_task_group=}"
169
- ),
170
- )
161
+ await _verify_non_duplication_group_path(
162
+ path=task_group_attrs["path"],
163
+ db=db,
164
+ )
171
165
 
172
166
  if settings.FRACTAL_RUNNER_BACKEND != "slurm_ssh":
173
167
  if Path(task_group_path).exists():
@@ -12,6 +12,7 @@ from pydantic.types import AwareDatetime
12
12
  from sqlmodel import or_
13
13
  from sqlmodel import select
14
14
 
15
+ from ._aux_functions_task_lifecycle import check_no_ongoing_activity
15
16
  from ._aux_functions_tasks import _get_task_group_full_access
16
17
  from ._aux_functions_tasks import _get_task_group_read_access
17
18
  from ._aux_functions_tasks import _verify_non_duplication_group_constraint
@@ -216,6 +217,8 @@ async def delete_task_group(
216
217
  db=db,
217
218
  )
218
219
 
220
+ await check_no_ongoing_activity(task_group_id=task_group_id, db=db)
221
+
219
222
  stm = select(WorkflowTaskV2).where(
220
223
  WorkflowTaskV2.task_id.in_({task.id for task in task_group.task_list})
221
224
  )
@@ -65,8 +65,36 @@ class MailSettings(BaseModel):
65
65
 
66
66
 
67
67
  class PixiSettings(BaseModel):
68
- default_version: str
68
+ """
69
+ Configuration for Pixi task collection
70
+
71
+ See https://pixi.sh/latest/reference/cli/pixi/install/#config-options for
72
+ `pixi install` concurrency options.
73
+ See https://docs.rs/tokio/latest/tokio/#cpu-bound-tasks-and-blocking-code
74
+ for `tokio` configuration.
75
+
76
+ versions:
77
+ Available `pixi` versions and their `PIXI_HOME` folders.
78
+ default_version:
79
+ Default `pixi` version to use for task collection - must be one
80
+ of `versions` keys.
81
+ PIXI_CONCURRENT_SOLVES:
82
+ Value of `--concurrent-solves` for `pixi install`.
83
+ PIXI_CONCURRENT_DOWNLOADS:
84
+ Value of `--concurrent-downloads for `pixi install`.
85
+ TOKIO_WORKER_THREADS:
86
+ From tokio docs, "The core threads are where all asynchronous code
87
+ runs, and Tokio will by default spawn one for each CPU core. You can
88
+ use the environment variable TOKIO_WORKER_THREADS to override the
89
+ default value."
90
+ """
91
+
69
92
  versions: DictStrStr
93
+ default_version: str
94
+
95
+ PIXI_CONCURRENT_SOLVES: int = 4
96
+ PIXI_CONCURRENT_DOWNLOADS: int = 4
97
+ TOKIO_WORKER_THREADS: int = 2
70
98
 
71
99
  @model_validator(mode="after")
72
100
  def check_pixi_settings(self):
@@ -27,6 +27,7 @@ from fractal_server.tasks.v2.utils_background import (
27
27
  from fractal_server.tasks.v2.utils_background import get_current_log
28
28
  from fractal_server.tasks.v2.utils_background import prepare_tasks_metadata
29
29
  from fractal_server.tasks.v2.utils_templates import SCRIPTS_SUBFOLDER
30
+ from fractal_server.utils import execute_command_sync
30
31
  from fractal_server.utils import get_timestamp
31
32
 
32
33
 
@@ -98,6 +99,18 @@ def collect_local_pixi(
98
99
  ),
99
100
  ("__SOURCE_DIR_NAME__", SOURCE_DIR_NAME),
100
101
  ("__FROZEN_OPTION__", ""),
102
+ (
103
+ "__TOKIO_WORKER_THREADS__",
104
+ str(settings.pixi.TOKIO_WORKER_THREADS),
105
+ ),
106
+ (
107
+ "__PIXI_CONCURRENT_SOLVES__",
108
+ str(settings.pixi.PIXI_CONCURRENT_SOLVES),
109
+ ),
110
+ (
111
+ "__PIXI_CONCURRENT_DOWNLOADS__",
112
+ str(settings.pixi.PIXI_CONCURRENT_DOWNLOADS),
113
+ ),
101
114
  },
102
115
  script_dir=Path(
103
116
  task_group.path, SCRIPTS_SUBFOLDER
@@ -146,6 +159,14 @@ def collect_local_pixi(
146
159
  "project_python_wrapper"
147
160
  ]
148
161
 
162
+ # Make task folder 755
163
+ source_dir = Path(task_group.path, SOURCE_DIR_NAME).as_posix()
164
+ command = f"chmod 755 {source_dir} -R"
165
+ execute_command_sync(
166
+ command=command,
167
+ logger_name=LOGGER_NAME,
168
+ )
169
+
149
170
  # Read and validate manifest
150
171
  # NOTE: we are only supporting the manifest path being relative
151
172
  # to the top-level folder
@@ -18,6 +18,7 @@ from fractal_server.tasks.utils import get_log_path
18
18
  from fractal_server.tasks.v2.local._utils import _customize_and_run_template
19
19
  from fractal_server.tasks.v2.utils_background import get_current_log
20
20
  from fractal_server.tasks.v2.utils_templates import SCRIPTS_SUBFOLDER
21
+ from fractal_server.utils import execute_command_sync
21
22
  from fractal_server.utils import get_timestamp
22
23
 
23
24
 
@@ -89,6 +90,18 @@ def reactivate_local_pixi(
89
90
  ),
90
91
  ("__SOURCE_DIR_NAME__", SOURCE_DIR_NAME),
91
92
  ("__FROZEN_OPTION__", "--frozen"),
93
+ (
94
+ "__TOKIO_WORKER_THREADS__",
95
+ str(settings.pixi.TOKIO_WORKER_THREADS),
96
+ ),
97
+ (
98
+ "__PIXI_CONCURRENT_SOLVES__",
99
+ str(settings.pixi.PIXI_CONCURRENT_SOLVES),
100
+ ),
101
+ (
102
+ "__PIXI_CONCURRENT_DOWNLOADS__",
103
+ str(settings.pixi.PIXI_CONCURRENT_DOWNLOADS),
104
+ ),
92
105
  },
93
106
  script_dir=Path(
94
107
  task_group.path, SCRIPTS_SUBFOLDER
@@ -130,6 +143,14 @@ def reactivate_local_pixi(
130
143
  activity.log = get_current_log(log_file_path)
131
144
  activity = add_commit_refresh(obj=activity, db=db)
132
145
 
146
+ # Make task folder 755
147
+ source_dir = Path(task_group.path, SOURCE_DIR_NAME).as_posix()
148
+ command = f"chmod 755 {source_dir} -R"
149
+ execute_command_sync(
150
+ command=command,
151
+ logger_name=LOGGER_NAME,
152
+ )
153
+
133
154
  activity.log = get_current_log(log_file_path)
134
155
  activity.status = TaskGroupActivityStatusV2.OK
135
156
  activity.timestamp_ended = get_timestamp()
@@ -147,6 +147,18 @@ def collect_ssh_pixi(
147
147
  ),
148
148
  ("__SOURCE_DIR_NAME__", SOURCE_DIR_NAME),
149
149
  ("__FROZEN_OPTION__", ""),
150
+ (
151
+ "__TOKIO_WORKER_THREADS__",
152
+ str(settings.pixi.TOKIO_WORKER_THREADS),
153
+ ),
154
+ (
155
+ "__PIXI_CONCURRENT_SOLVES__",
156
+ str(settings.pixi.PIXI_CONCURRENT_SOLVES),
157
+ ),
158
+ (
159
+ "__PIXI_CONCURRENT_DOWNLOADS__",
160
+ str(settings.pixi.PIXI_CONCURRENT_DOWNLOADS),
161
+ ),
150
162
  }
151
163
 
152
164
  logger.info("installing - START")
@@ -203,6 +215,11 @@ def collect_ssh_pixi(
203
215
  "project_python_wrapper"
204
216
  ]
205
217
 
218
+ source_dir = Path(
219
+ task_group.path, SOURCE_DIR_NAME
220
+ ).as_posix()
221
+ fractal_ssh.run_command(cmd=f"chmod 755 {source_dir} -R")
222
+
206
223
  # Read and validate remote manifest file
207
224
  manifest_path_remote = (
208
225
  f"{package_root_remote}/__FRACTAL_MANIFEST__.json"
@@ -114,6 +114,18 @@ def reactivate_ssh_pixi(
114
114
  ),
115
115
  ("__SOURCE_DIR_NAME__", SOURCE_DIR_NAME),
116
116
  ("__FROZEN_OPTION__", "--frozen"),
117
+ (
118
+ "__TOKIO_WORKER_THREADS__",
119
+ str(settings.pixi.TOKIO_WORKER_THREADS),
120
+ ),
121
+ (
122
+ "__PIXI_CONCURRENT_SOLVES__",
123
+ str(settings.pixi.PIXI_CONCURRENT_SOLVES),
124
+ ),
125
+ (
126
+ "__PIXI_CONCURRENT_DOWNLOADS__",
127
+ str(settings.pixi.PIXI_CONCURRENT_DOWNLOADS),
128
+ ),
117
129
  }
118
130
 
119
131
  logger.info("installing - START")
@@ -181,6 +193,8 @@ def reactivate_ssh_pixi(
181
193
  activity.log = get_current_log(log_file_path)
182
194
  activity = add_commit_refresh(obj=activity, db=db)
183
195
 
196
+ fractal_ssh.run_command(cmd=f"chmod 755 {source_dir} -R")
197
+
184
198
  # Finalize (write metadata to DB)
185
199
  activity.status = TaskGroupActivityStatusV2.OK
186
200
  activity.timestamp_ended = get_timestamp()
@@ -10,6 +10,9 @@ PIXI_HOME="__PIXI_HOME__"
10
10
  PACKAGE_DIR="__PACKAGE_DIR__"
11
11
  SOURCE_DIR_NAME="__SOURCE_DIR_NAME__"
12
12
  FROZEN_OPTION="__FROZEN_OPTION__"
13
+ TOKIO_WORKER_THREADS="__TOKIO_WORKER_THREADS__"
14
+ PIXI_CONCURRENT_SOLVES="__PIXI_CONCURRENT_SOLVES__"
15
+ PIXI_CONCURRENT_DOWNLOADS="__PIXI_CONCURRENT_DOWNLOADS__"
13
16
 
14
17
  # Strip trailing `/` from `PACKAGE_DIR`
15
18
  PIXI_HOME=${PIXI_HOME%/}
@@ -24,16 +27,22 @@ PYPROJECT_TOML="${SOURCE_DIR}/pyproject.toml"
24
27
  export PIXI_HOME="${PIXI_HOME}"
25
28
  export PIXI_CACHE_DIR="${PIXI_HOME}/cache"
26
29
  export RATTLER_AUTH_FILE="${PIXI_HOME}/credentials.json"
30
+ export TOKIO_WORKER_THREADS="${TOKIO_WORKER_THREADS}"
27
31
 
28
32
  TIME_START=$(date +%s)
29
33
 
34
+ echo "Hostname: $(hostname)"
35
+
30
36
  cd "${PACKAGE_DIR}"
31
37
  write_log "Changed working directory to ${PACKAGE_DIR}"
32
38
 
33
39
  # -----------------------------------------------------------------------------
34
40
 
35
41
  write_log "START '${PIXI_EXECUTABLE} install ${FROZEN_OPTION} --manifest-path ${PYPROJECT_TOML}'"
36
- ${PIXI_EXECUTABLE} install ${FROZEN_OPTION} --manifest-path "${PYPROJECT_TOML}"
42
+ ${PIXI_EXECUTABLE} install \
43
+ --concurrent-solves "${PIXI_CONCURRENT_SOLVES}" \
44
+ --concurrent-downloads "${PIXI_CONCURRENT_DOWNLOADS}" \
45
+ ${FROZEN_OPTION} --manifest-path "${PYPROJECT_TOML}"
37
46
  write_log "END '${PIXI_EXECUTABLE} install ${FROZEN_OPTION} --manifest-path ${PYPROJECT_TOML}'"
38
47
  echo
39
48
 
@@ -70,10 +70,6 @@ write_log "Disk usage: ${ENV_DISK_USAGE}"
70
70
  write_log "Number of files: ${ENV_FILE_NUMBER}"
71
71
  echo
72
72
 
73
- write_log "START chmod 755 ${SOURCE_DIR} -R"
74
- chmod 755 "${SOURCE_DIR}" -R
75
- write_log "END chmod 755 ${SOURCE_DIR} -R"
76
-
77
73
  TIME_END=$(date +%s)
78
74
  write_log "Elapsed: $((TIME_END - TIME_START)) seconds"
79
75
  write_log "All ok, exit."
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.15.0a4"
3
+ version = "2.15.0a5"
4
4
  description = "Backend component of the Fractal analytics platform"
5
5
  authors = [
6
6
  { name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it" },
@@ -94,7 +94,7 @@ filterwarnings = [
94
94
  markers = ["container", "ssh"]
95
95
 
96
96
  [tool.bumpver]
97
- current_version = "2.15.0a4"
97
+ current_version = "2.15.0a5"
98
98
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
99
99
  commit_message = "bump version {old_version} -> {new_version}"
100
100
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.15.0a4"