fractal-server 2.14.0a11__tar.gz → 2.14.0a13__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.0a11 → fractal_server-2.14.0a13}/PKG-INFO +1 -1
  2. fractal_server-2.14.0a13/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/base_runner.py +22 -0
  4. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/local/runner.py +8 -17
  5. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_sudo/runner.py +48 -56
  6. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/db_tools.py +1 -0
  7. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/pyproject.toml +2 -2
  8. fractal_server-2.14.0a11/fractal_server/__init__.py +0 -1
  9. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/LICENSE +0 -0
  10. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/README.md +0 -0
  11. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/__main__.py +0 -0
  12. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/alembic.ini +0 -0
  13. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/__init__.py +0 -0
  14. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/db/__init__.py +0 -0
  15. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/history/__init__.py +0 -0
  16. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/__init__.py +0 -0
  17. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/linkusergroup.py +0 -0
  18. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/linkuserproject.py +0 -0
  19. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/security.py +0 -0
  20. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/user_settings.py +0 -0
  21. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/__init__.py +0 -0
  22. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/accounting.py +0 -0
  23. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/dataset.py +0 -0
  24. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/history.py +0 -0
  25. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/job.py +0 -0
  26. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/project.py +0 -0
  27. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/task.py +0 -0
  28. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/task_group.py +0 -0
  29. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/workflow.py +0 -0
  30. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/models/v2/workflowtask.py +0 -0
  31. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/__init__.py +0 -0
  32. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/__init__.py +0 -0
  33. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  34. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
  35. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  36. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/job.py +0 -0
  37. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/project.py +0 -0
  38. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/task.py +0 -0
  39. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  40. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  41. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/__init__.py +0 -0
  42. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  43. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  44. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  45. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  46. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  47. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  48. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/history.py +0 -0
  49. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/images.py +0 -0
  50. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/job.py +0 -0
  51. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/project.py +0 -0
  52. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/status_legacy.py +0 -0
  53. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/submit.py +0 -0
  54. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/task.py +0 -0
  55. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  56. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  57. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  58. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  59. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/verify_image_types.py +0 -0
  60. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  61. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  62. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  63. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/__init__.py +0 -0
  64. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  65. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/current_user.py +0 -0
  66. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/group.py +0 -0
  67. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/login.py +0 -0
  68. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/oauth.py +0 -0
  69. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/register.py +0 -0
  70. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/router.py +0 -0
  71. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/auth/users.py +0 -0
  72. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/aux/__init__.py +0 -0
  73. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/aux/_job.py +0 -0
  74. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/aux/_runner.py +0 -0
  75. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  76. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/routes/pagination.py +0 -0
  77. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/__init__.py +0 -0
  78. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/components.py +0 -0
  79. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/compress_folder.py +0 -0
  80. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/exceptions.py +0 -0
  81. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/__init__.py +0 -0
  82. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/local/__init__.py +0 -0
  83. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/local/get_local_config.py +0 -0
  84. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/__init__.py +0 -0
  85. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/_batching.py +0 -0
  86. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/_check_jobs_status.py +0 -0
  87. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/_job_states.py +0 -0
  88. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/_slurm_config.py +0 -0
  89. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/get_slurm_config.py +0 -0
  90. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/remote.py +0 -0
  91. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_common/utils_executors.py +0 -0
  92. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_ssh/__init__.py +0 -0
  93. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_ssh/_check_job_status_ssh.py +0 -0
  94. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_ssh/_executor_wait_thread.py +0 -0
  95. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_ssh/_slurm_job.py +0 -0
  96. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_ssh/executor.py +0 -0
  97. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_ssh/runner.py +0 -0
  98. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_sudo/__init__.py +0 -0
  99. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  100. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/extract_archive.py +0 -0
  101. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/filenames.py +0 -0
  102. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/run_subprocess.py +0 -0
  103. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  104. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/shutdown.py +0 -0
  105. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/task_files.py +0 -0
  106. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/__init__.py +0 -0
  107. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/_local.py +0 -0
  108. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/_slurm_ssh.py +0 -0
  109. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/_slurm_sudo.py +0 -0
  110. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  111. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  112. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/runner.py +0 -0
  113. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  114. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  115. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/submit_workflow.py +0 -0
  116. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/v2/task_interface.py +0 -0
  117. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/runner/versions.py +0 -0
  118. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/__init__.py +0 -0
  119. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/_filter_validators.py +0 -0
  120. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/_validators.py +0 -0
  121. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/user.py +0 -0
  122. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/user_group.py +0 -0
  123. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/user_settings.py +0 -0
  124. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/__init__.py +0 -0
  125. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/accounting.py +0 -0
  126. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/dataset.py +0 -0
  127. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/dumps.py +0 -0
  128. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/history.py +0 -0
  129. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/job.py +0 -0
  130. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/manifest.py +0 -0
  131. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/project.py +0 -0
  132. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
  133. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/task.py +0 -0
  134. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  135. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/task_group.py +0 -0
  136. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/workflow.py +0 -0
  137. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  138. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/security/__init__.py +0 -0
  139. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/security/signup_email.py +0 -0
  140. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/app/user_settings.py +0 -0
  141. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/config.py +0 -0
  142. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/data_migrations/README.md +0 -0
  143. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/data_migrations/tools.py +0 -0
  144. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/gunicorn_fractal.py +0 -0
  145. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/images/__init__.py +0 -0
  146. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/images/models.py +0 -0
  147. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/images/tools.py +0 -0
  148. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/logger.py +0 -0
  149. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/main.py +0 -0
  150. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/env.py +0 -0
  151. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/naming_convention.py +0 -0
  152. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  153. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  154. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  155. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  156. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  157. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  158. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  159. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  160. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  161. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  162. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  163. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  164. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  165. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  166. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  167. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  168. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  169. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  170. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  171. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  172. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  173. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  174. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  175. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  176. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  177. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  178. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  179. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  180. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  181. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  182. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  183. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  184. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  185. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/py.typed +0 -0
  186. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/ssh/__init__.py +0 -0
  187. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/ssh/_fabric.py +0 -0
  188. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/string_tools.py +0 -0
  189. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/syringe.py +0 -0
  190. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/__init__.py +0 -0
  191. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/utils.py +0 -0
  192. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/__init__.py +0 -0
  193. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/local/__init__.py +0 -0
  194. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/local/_utils.py +0 -0
  195. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/local/collect.py +0 -0
  196. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  197. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  198. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  199. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  200. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  201. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  202. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  203. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  204. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  205. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  206. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  207. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  208. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  209. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/utils_background.py +0 -0
  210. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/utils_database.py +0 -0
  211. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  212. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  213. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/tasks/v2/utils_templates.py +0 -0
  214. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/urls.py +0 -0
  215. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/fractal_server/utils.py +0 -0
  216. {fractal_server-2.14.0a11 → fractal_server-2.14.0a13}/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.0a11
3
+ Version: 2.14.0a13
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.0a13"
@@ -139,3 +139,25 @@ class BaseRunner(object):
139
139
  zarr_urls = [kwargs["zarr_url"] for kwargs in list_parameters]
140
140
  if len(zarr_urls) != len(set(zarr_urls)):
141
141
  raise ValueError("Non-unique zarr_urls")
142
+
143
+ def validate_multisubmit_history_unit_ids(
144
+ self,
145
+ *,
146
+ history_unit_ids: list[int],
147
+ task_type: TaskTypeType,
148
+ list_parameters: list[dict[str, Any]],
149
+ ) -> None:
150
+ if task_type in ["compound", "converter_compound"]:
151
+ if len(history_unit_ids) != 1:
152
+ raise NotImplementedError(
153
+ "We are breaking the assumption that compound/multisubmit "
154
+ "is associated to a single HistoryUnit. This is not "
155
+ "supported."
156
+ )
157
+ elif task_type == "parallel" and len(history_unit_ids) != len(
158
+ list_parameters
159
+ ):
160
+ raise ValueError(
161
+ f"{len(history_unit_ids)=} differs from "
162
+ f"{len(list_parameters)=}."
163
+ )
@@ -115,23 +115,6 @@ class LocalRunner(BaseRunner):
115
115
  when we are in one of the "compound" cases
116
116
 
117
117
  """
118
- # FIXME: De-duplicate this check
119
- if task_type in ["compound", "converter_compound"]:
120
- if len(history_unit_ids) != 1:
121
- raise NotImplementedError(
122
- "We are breaking the assumption that compound/multisubmit "
123
- "is associated to a single HistoryUnit. This is not "
124
- "supported."
125
- )
126
- elif task_type == "parallel" and len(history_unit_ids) != len(
127
- list_parameters
128
- ):
129
- raise ValueError(
130
- f"{len(history_unit_ids)=} differs from "
131
- f"{len(list_parameters)=}."
132
- )
133
-
134
- logger.debug(f"[multisubmit] START, {len(list_parameters)=}")
135
118
 
136
119
  self.validate_multisubmit_parameters(
137
120
  list_parameters=list_parameters,
@@ -139,6 +122,14 @@ class LocalRunner(BaseRunner):
139
122
  list_task_files=list_task_files,
140
123
  )
141
124
 
125
+ self.validate_multisubmit_history_unit_ids(
126
+ history_unit_ids=history_unit_ids,
127
+ task_type=task_type,
128
+ list_parameters=list_parameters,
129
+ )
130
+
131
+ logger.debug(f"[multisubmit] START, {len(list_parameters)=}")
132
+
142
133
  workdir_local = list_task_files[0].wftask_subfolder_local
143
134
  if task_type == "parallel":
144
135
  workdir_local.mkdir()
@@ -17,7 +17,6 @@ from pydantic import BaseModel
17
17
  from pydantic import ConfigDict
18
18
 
19
19
  from ..slurm_common._check_jobs_status import get_finished_jobs
20
- from ..slurm_common._check_jobs_status import run_squeue
21
20
  from ._subprocess_run_as_user import _mkdir_as_user
22
21
  from ._subprocess_run_as_user import _run_command_as_user
23
22
  from fractal_server import __VERSION__
@@ -543,31 +542,21 @@ class RunnerSlurmSudo(BaseRunner):
543
542
  task_files=task_files,
544
543
  )
545
544
  ],
546
- ) # TODO: replace with actual values (BASED ON TASKFILES)
547
-
545
+ )
548
546
  config.parallel_tasks_per_job = 1
549
547
  self._submit_single_sbatch(
550
548
  func,
551
549
  slurm_job=slurm_job,
552
550
  slurm_config=config,
553
551
  )
554
- logger.debug("END SUBMISSION PHASE")
555
- logger.debug(f"{self.jobs=}")
556
- logger.debug(f"{self.job_ids=}")
557
-
558
- # FIXME
559
- jobs_that_started = set()
560
- while len(jobs_that_started) != len(self.job_ids):
561
- logger.debug("CALL SQUEUE")
562
- res = run_squeue(self.job_ids)
563
- new_jobs = set(out.split()[0] for out in res.stdout.splitlines())
564
- jobs_that_started = jobs_that_started.union(new_jobs)
565
- logger.debug(f"{new_jobs=}")
566
- logger.debug(f"{len(jobs_that_started)=}")
567
-
568
- logger.debug("START RETRIEVAL PHASE")
552
+ logger.info(f"END submission phase, {self.job_ids=}")
553
+
554
+ # FIXME: Replace with more robust/efficient logic
555
+ logger.warning("Now sleep 4 (FIXME)")
556
+ time.sleep(4)
569
557
 
570
558
  # Retrieval phase
559
+ logger.info("START retrieval phase")
571
560
  while len(self.jobs) > 0:
572
561
  if self.is_shutdown():
573
562
  self.scancel_jobs()
@@ -581,19 +570,22 @@ class RunnerSlurmSudo(BaseRunner):
581
570
  result, exception = self._postprocess_single_task(
582
571
  task=slurm_job.tasks[0]
583
572
  )
584
- if result is not None:
585
- if task_type not in ["compound", "converter_compound"]:
586
- update_status_of_history_unit(
587
- history_unit_id=history_unit_id,
588
- status=HistoryUnitStatus.DONE,
589
- db_sync=db,
590
- )
573
+ # Note: the relevant done/failed check is based on
574
+ # whether `exception is None`. The fact that
575
+ # `result is None` is not relevant for this purpose.
591
576
  if exception is not None:
592
577
  update_status_of_history_unit(
593
578
  history_unit_id=history_unit_id,
594
579
  status=HistoryUnitStatus.FAILED,
595
580
  db_sync=db,
596
581
  )
582
+ else:
583
+ if task_type not in ["compound", "converter_compound"]:
584
+ update_status_of_history_unit(
585
+ history_unit_id=history_unit_id,
586
+ status=HistoryUnitStatus.DONE,
587
+ db_sync=db,
588
+ )
597
589
 
598
590
  time.sleep(self.slurm_poll_interval)
599
591
 
@@ -610,21 +602,8 @@ class RunnerSlurmSudo(BaseRunner):
610
602
  ):
611
603
 
612
604
  if len(self.jobs) > 0:
613
- raise RuntimeError(f"Cannot run .submit when {len(self.jobs)=}")
614
-
615
- if task_type in ["compound", "converter_compound"]:
616
- if len(history_unit_ids) != 1:
617
- raise NotImplementedError(
618
- "We are breaking the assumption that compound/multisubmit "
619
- "is associated to a single HistoryUnit. This is not "
620
- "supported."
621
- )
622
- elif task_type == "parallel" and len(history_unit_ids) != len(
623
- list_parameters
624
- ):
625
- raise ValueError(
626
- f"{len(history_unit_ids)=} differs from "
627
- f"{len(list_parameters)=}."
605
+ raise RuntimeError(
606
+ f"Cannot run .multisubmit when {len(self.jobs)=}"
628
607
  )
629
608
 
630
609
  self.validate_multisubmit_parameters(
@@ -632,12 +611,19 @@ class RunnerSlurmSudo(BaseRunner):
632
611
  task_type=task_type,
633
612
  list_task_files=list_task_files,
634
613
  )
614
+ self.validate_multisubmit_history_unit_ids(
615
+ history_unit_ids=history_unit_ids,
616
+ task_type=task_type,
617
+ list_parameters=list_parameters,
618
+ )
619
+
620
+ logger.debug(f"[multisubmit] START, {len(list_parameters)=}")
635
621
 
636
622
  workdir_local = list_task_files[0].wftask_subfolder_local
637
623
  workdir_remote = list_task_files[0].wftask_subfolder_remote
638
624
 
639
625
  # Create local&remote task subfolders
640
- if task_type not in ["converter_compound", "compound"]:
626
+ if task_type == "parallel":
641
627
  original_umask = os.umask(0)
642
628
  workdir_local.mkdir(parents=True, mode=0o755)
643
629
  os.umask(original_umask)
@@ -714,18 +700,14 @@ class RunnerSlurmSudo(BaseRunner):
714
700
  slurm_job=slurm_job,
715
701
  slurm_config=config,
716
702
  )
717
- logger.info(f"END submission phase, {list(self.jobs.keys())=}")
703
+ logger.info(f"END submission phase, {self.job_ids=}")
718
704
 
719
- # FIXME
720
- jobs_that_started = set()
721
- while len(jobs_that_started) != len(self.job_ids):
722
- res = run_squeue(self.job_ids)
723
- new_jobs = set(out.split()[0] for out in res.stdout.splitlines())
724
- jobs_that_started = jobs_that_started.union(new_jobs)
725
- logger.debug(f"{new_jobs=}")
726
- logger.debug(f"{len(jobs_that_started)=}")
705
+ # FIXME: Replace with more robust/efficient logic
706
+ logger.warning("Now sleep 4 (FIXME)")
707
+ time.sleep(4)
727
708
 
728
709
  # Retrieval phase
710
+ logger.info("START retrieval phase")
729
711
  while len(self.jobs) > 0:
730
712
  if self.is_shutdown():
731
713
  self.scancel_jobs()
@@ -737,28 +719,38 @@ class RunnerSlurmSudo(BaseRunner):
737
719
  slurm_job = self.jobs.pop(slurm_job_id)
738
720
  self._copy_files_from_remote_to_local(slurm_job)
739
721
  for task in slurm_job.tasks:
722
+ logger.debug(f"Now processing {task.index=}")
740
723
  result, exception = self._postprocess_single_task(
741
724
  task=task
742
725
  )
743
726
 
744
- if result is not None:
745
- results[task.index] = result
727
+ # Note: the relevant done/failed check is based on
728
+ # whether `exception is None`. The fact that
729
+ # `result is None` is not relevant for this purpose.
730
+ if exception is not None:
731
+ logger.debug(
732
+ f"Task {task.index} has an exception."
733
+ ) # FIXME # noqa
734
+ exceptions[task.index] = exception
746
735
  if task_type == "parallel":
747
736
  update_status_of_history_unit(
748
737
  history_unit_id=history_unit_ids[
749
738
  task.index
750
739
  ],
751
- status=HistoryUnitStatus.DONE,
740
+ status=HistoryUnitStatus.FAILED,
752
741
  db_sync=db,
753
742
  )
754
- if exception is not None:
755
- exceptions[task.index] = exception
743
+ else:
744
+ logger.debug(
745
+ f"Task {task.index} has no exception."
746
+ ) # FIXME # noqa
747
+ results[task.index] = result
756
748
  if task_type == "parallel":
757
749
  update_status_of_history_unit(
758
750
  history_unit_id=history_unit_ids[
759
751
  task.index
760
752
  ],
761
- status=HistoryUnitStatus.FAILED,
753
+ status=HistoryUnitStatus.DONE,
762
754
  db_sync=db,
763
755
  )
764
756
 
@@ -85,3 +85,4 @@ def bulk_upsert_image_cache_fast(
85
85
  ),
86
86
  )
87
87
  db.execute(stmt)
88
+ db.commit()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.14.0a11"
3
+ version = "2.14.0a13"
4
4
  description = "Backend component of the Fractal analytics platform"
5
5
  authors = [
6
6
  { name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it" },
@@ -95,7 +95,7 @@ filterwarnings = [
95
95
  markers = ["container", "ssh"]
96
96
 
97
97
  [tool.bumpver]
98
- current_version = "2.14.0a11"
98
+ current_version = "2.14.0a13"
99
99
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
100
100
  commit_message = "bump version {old_version} -> {new_version}"
101
101
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.14.0a11"