fractal-server 2.14.0a32__tar.gz → 2.14.0a34__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 (216) hide show
  1. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/PKG-INFO +1 -1
  2. fractal_server-2.14.0a34/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/local/runner.py +95 -35
  4. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py +283 -237
  5. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_ssh/runner.py +60 -0
  6. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_sudo/runner.py +13 -1
  7. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/runner_functions.py +12 -1
  8. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/ssh/_fabric.py +24 -12
  9. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/pyproject.toml +2 -2
  10. fractal_server-2.14.0a32/fractal_server/__init__.py +0 -1
  11. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/LICENSE +0 -0
  12. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/README.md +0 -0
  13. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/__main__.py +0 -0
  14. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/alembic.ini +0 -0
  15. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/__init__.py +0 -0
  16. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/db/__init__.py +0 -0
  17. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/history/__init__.py +0 -0
  18. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/__init__.py +0 -0
  19. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/linkusergroup.py +0 -0
  20. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/linkuserproject.py +0 -0
  21. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/security.py +0 -0
  22. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/user_settings.py +0 -0
  23. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/__init__.py +0 -0
  24. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/accounting.py +0 -0
  25. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/dataset.py +0 -0
  26. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/history.py +0 -0
  27. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/job.py +0 -0
  28. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/project.py +0 -0
  29. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/task.py +0 -0
  30. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/task_group.py +0 -0
  31. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/workflow.py +0 -0
  32. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/models/v2/workflowtask.py +0 -0
  33. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/__init__.py +0 -0
  34. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/__init__.py +0 -0
  35. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  36. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
  37. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  38. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/job.py +0 -0
  39. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/project.py +0 -0
  40. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/task.py +0 -0
  41. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  42. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  43. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/__init__.py +0 -0
  44. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  45. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  46. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  47. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  48. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  49. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  50. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/history.py +0 -0
  51. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/images.py +0 -0
  52. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/job.py +0 -0
  53. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/project.py +0 -0
  54. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/status_legacy.py +0 -0
  55. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/submit.py +0 -0
  56. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/task.py +0 -0
  57. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  58. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  59. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  60. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  61. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/verify_image_types.py +0 -0
  62. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  63. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  64. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  65. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/__init__.py +0 -0
  66. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  67. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/current_user.py +0 -0
  68. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/group.py +0 -0
  69. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/login.py +0 -0
  70. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/oauth.py +0 -0
  71. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/register.py +0 -0
  72. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/router.py +0 -0
  73. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/auth/users.py +0 -0
  74. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/aux/__init__.py +0 -0
  75. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/aux/_job.py +0 -0
  76. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/aux/_runner.py +0 -0
  77. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  78. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/routes/pagination.py +0 -0
  79. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/__init__.py +0 -0
  80. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/components.py +0 -0
  81. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/compress_folder.py +0 -0
  82. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/exceptions.py +0 -0
  83. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/__init__.py +0 -0
  84. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/base_runner.py +0 -0
  85. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/local/__init__.py +0 -0
  86. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/local/get_local_config.py +0 -0
  87. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/__init__.py +0 -0
  88. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/_batching.py +0 -0
  89. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/_job_states.py +0 -0
  90. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/_slurm_config.py +0 -0
  91. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/get_slurm_config.py +0 -0
  92. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/remote.py +0 -0
  93. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
  94. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_common/utils_executors.py +0 -0
  95. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_ssh/__init__.py +0 -0
  96. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_sudo/__init__.py +0 -0
  97. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  98. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/extract_archive.py +0 -0
  99. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/filenames.py +0 -0
  100. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/run_subprocess.py +0 -0
  101. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  102. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/shutdown.py +0 -0
  103. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/task_files.py +0 -0
  104. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/__init__.py +0 -0
  105. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/_local.py +0 -0
  106. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/_slurm_ssh.py +0 -0
  107. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/_slurm_sudo.py +0 -0
  108. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/db_tools.py +0 -0
  109. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  110. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  111. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/runner.py +0 -0
  112. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  113. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/submit_workflow.py +0 -0
  114. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/v2/task_interface.py +0 -0
  115. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/runner/versions.py +0 -0
  116. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/__init__.py +0 -0
  117. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/_filter_validators.py +0 -0
  118. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/_validators.py +0 -0
  119. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/user.py +0 -0
  120. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/user_group.py +0 -0
  121. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/user_settings.py +0 -0
  122. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/__init__.py +0 -0
  123. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/accounting.py +0 -0
  124. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/dataset.py +0 -0
  125. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/dumps.py +0 -0
  126. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/history.py +0 -0
  127. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/job.py +0 -0
  128. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/manifest.py +0 -0
  129. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/project.py +0 -0
  130. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
  131. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/task.py +0 -0
  132. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  133. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/task_group.py +0 -0
  134. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/workflow.py +0 -0
  135. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  136. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/security/__init__.py +0 -0
  137. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/security/signup_email.py +0 -0
  138. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/app/user_settings.py +0 -0
  139. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/config.py +0 -0
  140. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/data_migrations/README.md +0 -0
  141. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/data_migrations/tools.py +0 -0
  142. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/gunicorn_fractal.py +0 -0
  143. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/images/__init__.py +0 -0
  144. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/images/models.py +0 -0
  145. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/images/tools.py +0 -0
  146. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/logger.py +0 -0
  147. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/main.py +0 -0
  148. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/env.py +0 -0
  149. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/naming_convention.py +0 -0
  150. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  151. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  152. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  153. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  154. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  155. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  156. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  157. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  158. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  159. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  160. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  161. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  162. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  163. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  164. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  165. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  166. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  167. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  168. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  169. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  170. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
  171. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  172. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  173. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  174. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  175. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
  176. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  177. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  178. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  179. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  180. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  181. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  182. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  183. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
  184. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  185. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  186. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/py.typed +0 -0
  187. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/ssh/__init__.py +0 -0
  188. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/string_tools.py +0 -0
  189. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/syringe.py +0 -0
  190. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/__init__.py +0 -0
  191. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/utils.py +0 -0
  192. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/__init__.py +0 -0
  193. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/local/__init__.py +0 -0
  194. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/local/_utils.py +0 -0
  195. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/local/collect.py +0 -0
  196. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  197. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  198. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  199. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  200. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  201. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  202. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  203. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  204. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  205. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  206. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  207. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  208. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  209. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/utils_background.py +0 -0
  210. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/utils_database.py +0 -0
  211. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  212. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  213. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/tasks/v2/utils_templates.py +0 -0
  214. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/urls.py +0 -0
  215. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/fractal_server/utils.py +0 -0
  216. {fractal_server-2.14.0a32 → fractal_server-2.14.0a34}/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.14.0a32
3
+ Version: 2.14.0a34
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.14.0a34"
@@ -9,6 +9,9 @@ from fractal_server.app.db import get_sync_db
9
9
  from fractal_server.app.runner.exceptions import TaskExecutionError
10
10
  from fractal_server.app.runner.executors.base_runner import BaseRunner
11
11
  from fractal_server.app.runner.task_files import TaskFiles
12
+ from fractal_server.app.runner.v2.db_tools import (
13
+ bulk_update_status_of_history_unit,
14
+ )
12
15
  from fractal_server.app.runner.v2.db_tools import update_status_of_history_unit
13
16
  from fractal_server.app.schemas.v2 import HistoryUnitStatus
14
17
  from fractal_server.logger import set_logger
@@ -58,16 +61,31 @@ class LocalRunner(BaseRunner):
58
61
  ) -> tuple[Any, Exception]:
59
62
  logger.debug("[submit] START")
60
63
 
61
- self.validate_submit_parameters(parameters, task_type=task_type)
62
- workdir_local = task_files.wftask_subfolder_local
63
- workdir_local.mkdir()
64
+ try:
65
+ self.validate_submit_parameters(parameters, task_type=task_type)
66
+ workdir_local = task_files.wftask_subfolder_local
67
+ workdir_local.mkdir()
64
68
 
65
- # SUBMISSION PHASE
66
- future = self.executor.submit(
67
- func,
68
- parameters=parameters,
69
- remote_files=task_files.remote_files_dict,
70
- )
69
+ # SUBMISSION PHASE
70
+ future = self.executor.submit(
71
+ func,
72
+ parameters=parameters,
73
+ remote_files=task_files.remote_files_dict,
74
+ )
75
+ except Exception as e:
76
+ logger.error(
77
+ "[submit] Unexpected exception during submission. "
78
+ f"Original error {str(e)}"
79
+ )
80
+ result = None
81
+ exception = TaskExecutionError(str(e))
82
+ with next(get_sync_db()) as db:
83
+ update_status_of_history_unit(
84
+ history_unit_id=history_unit_id,
85
+ status=HistoryUnitStatus.FAILED,
86
+ db_sync=db,
87
+ )
88
+ return None, exception
71
89
 
72
90
  # RETRIEVAL PHASE
73
91
  with next(get_sync_db()) as db:
@@ -105,29 +123,50 @@ class LocalRunner(BaseRunner):
105
123
  input images, while for compound tasks these can differ.
106
124
  """
107
125
 
108
- self.validate_multisubmit_parameters(
109
- list_parameters=list_parameters,
110
- task_type=task_type,
111
- list_task_files=list_task_files,
112
- history_unit_ids=history_unit_ids,
113
- )
114
-
115
126
  logger.debug(f"[multisubmit] START, {len(list_parameters)=}")
127
+ results: dict[int, Any] = {}
128
+ exceptions: dict[int, BaseException] = {}
116
129
 
117
- workdir_local = list_task_files[0].wftask_subfolder_local
118
- if task_type == "parallel":
119
- workdir_local.mkdir()
120
-
121
- # Set `n_elements` and `parallel_tasks_per_job`
122
- n_elements = len(list_parameters)
123
- parallel_tasks_per_job = config.parallel_tasks_per_job
124
- if parallel_tasks_per_job is None:
125
- parallel_tasks_per_job = n_elements
130
+ try:
131
+
132
+ self.validate_multisubmit_parameters(
133
+ list_parameters=list_parameters,
134
+ task_type=task_type,
135
+ list_task_files=list_task_files,
136
+ history_unit_ids=history_unit_ids,
137
+ )
138
+
139
+ workdir_local = list_task_files[0].wftask_subfolder_local
140
+ if task_type == "parallel":
141
+ workdir_local.mkdir()
142
+
143
+ # Set `n_elements` and `parallel_tasks_per_job`
144
+ n_elements = len(list_parameters)
145
+ parallel_tasks_per_job = config.parallel_tasks_per_job
146
+ if parallel_tasks_per_job is None:
147
+ parallel_tasks_per_job = n_elements
148
+
149
+ except Exception as e:
150
+ logger.error(
151
+ "[multisubmit] Unexpected exception during preliminary phase. "
152
+ f"Original error {str(e)}"
153
+ )
154
+ exception = TaskExecutionError(str(e))
155
+ exceptions = {
156
+ ind: exception for ind in range(len(list_parameters))
157
+ }
158
+ if task_type == "parallel":
159
+ with next(get_sync_db()) as db:
160
+ bulk_update_status_of_history_unit(
161
+ history_unit_ids=history_unit_ids,
162
+ status=HistoryUnitStatus.FAILED,
163
+ db_sync=db,
164
+ )
165
+ return results, exceptions
126
166
 
127
167
  # Execute tasks, in chunks of size `parallel_tasks_per_job`
128
- results: dict[int, Any] = {}
129
- exceptions: dict[int, BaseException] = {}
130
168
  for ind_chunk in range(0, n_elements, parallel_tasks_per_job):
169
+
131
170
  list_parameters_chunk = list_parameters[
132
171
  ind_chunk : ind_chunk + parallel_tasks_per_job
133
172
  ]
@@ -135,15 +174,31 @@ class LocalRunner(BaseRunner):
135
174
  active_futures: dict[int, Future] = {}
136
175
  for ind_within_chunk, kwargs in enumerate(list_parameters_chunk):
137
176
  positional_index = ind_chunk + ind_within_chunk
138
- future = self.executor.submit(
139
- func,
140
- parameters=kwargs,
141
- remote_files=list_task_files[
177
+ try:
178
+ future = self.executor.submit(
179
+ func,
180
+ parameters=kwargs,
181
+ remote_files=list_task_files[
182
+ positional_index
183
+ ].remote_files_dict,
184
+ )
185
+ active_futures[positional_index] = future
186
+ except Exception as e:
187
+ logger.error(
188
+ "[multisubmit] Unexpected exception during submission."
189
+ f" Original error {str(e)}"
190
+ )
191
+ current_history_unit_id = history_unit_ids[
142
192
  positional_index
143
- ].remote_files_dict,
144
- )
145
- active_futures[positional_index] = future
146
-
193
+ ]
194
+ exceptions[positional_index] = TaskExecutionError(str(e))
195
+ if task_type == "parallel":
196
+ with next(get_sync_db()) as db:
197
+ update_status_of_history_unit(
198
+ history_unit_id=current_history_unit_id,
199
+ status=HistoryUnitStatus.FAILED,
200
+ db_sync=db,
201
+ )
147
202
  while active_futures:
148
203
  finished_futures = [
149
204
  index_and_future
@@ -171,6 +226,11 @@ class LocalRunner(BaseRunner):
171
226
  )
172
227
 
173
228
  except Exception as e:
229
+ logger.debug(
230
+ "Multisubmit failed in retrieval "
231
+ "phase with the following error "
232
+ f"{str(e)}"
233
+ )
174
234
  exceptions[positional_index] = TaskExecutionError(
175
235
  str(e)
176
236
  )