fractal-server 2.11.0a8__tar.gz → 2.11.0a9__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 (248) hide show
  1. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/PKG-INFO +1 -1
  2. fractal_server-2.11.0a9/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/workflow.py +95 -0
  4. fractal_server-2.11.0a8/fractal_server/app/runner/async_wrap.py → fractal_server-2.11.0a9/fractal_server/app/runner/async_wrap_v1.py +1 -1
  5. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_local/__init__.py +2 -2
  6. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_slurm/__init__.py +2 -2
  7. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/__init__.py +2 -2
  8. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local/__init__.py +14 -39
  9. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local_experimental/__init__.py +24 -49
  10. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py +20 -57
  11. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_slurm_sudo/__init__.py +18 -58
  12. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/data_migrations/2_11_0.py +1 -2
  13. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/pyproject.toml +2 -2
  14. fractal_server-2.11.0a8/fractal_server/__init__.py +0 -1
  15. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/LICENSE +0 -0
  16. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/README.md +0 -0
  17. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/__main__.py +0 -0
  18. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/alembic.ini +0 -0
  19. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/__init__.py +0 -0
  20. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/db/__init__.py +0 -0
  21. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/__init__.py +0 -0
  22. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/linkusergroup.py +0 -0
  23. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/linkuserproject.py +0 -0
  24. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/security.py +0 -0
  25. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/user_settings.py +0 -0
  26. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v1/__init__.py +0 -0
  27. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v1/dataset.py +0 -0
  28. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v1/job.py +0 -0
  29. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v1/project.py +0 -0
  30. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v1/state.py +0 -0
  31. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v1/task.py +0 -0
  32. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v1/workflow.py +0 -0
  33. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/__init__.py +0 -0
  34. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/dataset.py +0 -0
  35. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/job.py +0 -0
  36. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/project.py +0 -0
  37. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/task.py +0 -0
  38. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/task_group.py +0 -0
  39. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/workflow.py +0 -0
  40. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/models/v2/workflowtask.py +0 -0
  41. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/__init__.py +0 -0
  42. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/__init__.py +0 -0
  43. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/v1.py +0 -0
  44. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  45. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/v2/job.py +0 -0
  46. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/v2/project.py +0 -0
  47. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/v2/task.py +0 -0
  48. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  49. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  50. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/__init__.py +0 -0
  51. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/__init__.py +0 -0
  52. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
  53. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/dataset.py +0 -0
  54. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/job.py +0 -0
  55. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/project.py +0 -0
  56. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/task.py +0 -0
  57. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
  58. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/workflow.py +0 -0
  59. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
  60. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  61. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  62. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  63. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  64. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  65. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/images.py +0 -0
  66. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/job.py +0 -0
  67. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/project.py +0 -0
  68. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/status.py +0 -0
  69. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/submit.py +0 -0
  70. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/task.py +0 -0
  71. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  72. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  73. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  74. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  75. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  76. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  77. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/__init__.py +0 -0
  78. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  79. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/current_user.py +0 -0
  80. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/group.py +0 -0
  81. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/login.py +0 -0
  82. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/oauth.py +0 -0
  83. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/register.py +0 -0
  84. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/router.py +0 -0
  85. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/auth/users.py +0 -0
  86. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/aux/__init__.py +0 -0
  87. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/aux/_job.py +0 -0
  88. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/aux/_runner.py +0 -0
  89. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  90. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/__init__.py +0 -0
  91. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/components.py +0 -0
  92. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/compress_folder.py +0 -0
  93. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/exceptions.py +0 -0
  94. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/__init__.py +0 -0
  95. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
  96. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
  97. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
  98. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
  99. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -0
  100. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -0
  101. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -0
  102. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/ssh/executor.py +0 -0
  103. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -0
  104. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -0
  105. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -0
  106. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py +0 -0
  107. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/sudo/executor.py +0 -0
  108. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/executors/slurm/utils_executors.py +0 -0
  109. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/extract_archive.py +0 -0
  110. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/filenames.py +0 -0
  111. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/run_subprocess.py +0 -0
  112. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  113. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/shutdown.py +0 -0
  114. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/task_files.py +0 -0
  115. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/__init__.py +0 -0
  116. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_common.py +0 -0
  117. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
  118. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
  119. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_local/executor.py +0 -0
  120. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
  121. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
  122. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/common.py +0 -0
  123. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
  124. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
  125. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
  126. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local/executor.py +0 -0
  127. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
  128. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
  129. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
  130. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_slurm_common/__init__.py +0 -0
  131. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +0 -0
  132. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -0
  133. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py +0 -0
  134. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  135. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
  136. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  137. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/runner.py +0 -0
  138. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  139. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  140. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/v2/task_interface.py +0 -0
  141. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/runner/versions.py +0 -0
  142. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/__init__.py +0 -0
  143. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/_filter_validators.py +0 -0
  144. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/_validators.py +0 -0
  145. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/user.py +0 -0
  146. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/user_group.py +0 -0
  147. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/user_settings.py +0 -0
  148. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/__init__.py +0 -0
  149. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
  150. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/dataset.py +0 -0
  151. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/dumps.py +0 -0
  152. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/manifest.py +0 -0
  153. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/project.py +0 -0
  154. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/state.py +0 -0
  155. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/task.py +0 -0
  156. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/task_collection.py +0 -0
  157. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v1/workflow.py +0 -0
  158. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/__init__.py +0 -0
  159. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/dataset.py +0 -0
  160. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/dumps.py +0 -0
  161. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/job.py +0 -0
  162. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/manifest.py +0 -0
  163. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/project.py +0 -0
  164. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/status.py +0 -0
  165. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/task.py +0 -0
  166. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  167. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/task_group.py +0 -0
  168. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/workflow.py +0 -0
  169. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  170. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/security/__init__.py +0 -0
  171. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/security/signup_email.py +0 -0
  172. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/app/user_settings.py +0 -0
  173. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/config.py +0 -0
  174. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/data_migrations/README.md +0 -0
  175. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/data_migrations/tools.py +0 -0
  176. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/gunicorn_fractal.py +0 -0
  177. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/images/__init__.py +0 -0
  178. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/images/models.py +0 -0
  179. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/images/tools.py +0 -0
  180. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/logger.py +0 -0
  181. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/main.py +0 -0
  182. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/env.py +0 -0
  183. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/naming_convention.py +0 -0
  184. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  185. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  186. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  187. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  188. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  189. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  190. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  191. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  192. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  193. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  194. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  195. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  196. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  197. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  198. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  199. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  200. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  201. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  202. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  203. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  204. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  205. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  206. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  207. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  208. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  209. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  210. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  211. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/py.typed +0 -0
  212. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/ssh/__init__.py +0 -0
  213. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/ssh/_fabric.py +0 -0
  214. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/string_tools.py +0 -0
  215. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/syringe.py +0 -0
  216. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/__init__.py +0 -0
  217. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/utils.py +0 -0
  218. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
  219. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v1/__init__.py +0 -0
  220. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v1/background_operations.py +0 -0
  221. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v1/endpoint_operations.py +0 -0
  222. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v1/get_collection_data.py +0 -0
  223. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v1/utils.py +0 -0
  224. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/__init__.py +0 -0
  225. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/local/__init__.py +0 -0
  226. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/local/_utils.py +0 -0
  227. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/local/collect.py +0 -0
  228. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  229. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  230. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  231. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  232. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  233. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  234. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  235. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  236. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  237. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  238. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  239. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  240. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  241. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/utils_background.py +0 -0
  242. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/utils_database.py +0 -0
  243. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  244. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  245. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/tasks/v2/utils_templates.py +0 -0
  246. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/urls.py +0 -0
  247. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/fractal_server/utils.py +0 -0
  248. {fractal_server-2.11.0a8 → fractal_server-2.11.0a9}/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.11.0a8
3
+ Version: 2.11.0a9
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  Home-page: https://github.com/fractal-analytics-platform/fractal-server
6
6
  License: BSD-3-Clause
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.11.0a9"
@@ -1,3 +1,4 @@
1
+ from copy import copy
1
2
  from typing import Optional
2
3
 
3
4
  from fastapi import APIRouter
@@ -5,6 +6,7 @@ from fastapi import Depends
5
6
  from fastapi import HTTPException
6
7
  from fastapi import Response
7
8
  from fastapi import status
9
+ from pydantic import BaseModel
8
10
  from sqlmodel import select
9
11
 
10
12
  from ....db import AsyncSession
@@ -12,12 +14,16 @@ from ....db import get_async_db
12
14
  from ....models.v2 import JobV2
13
15
  from ....models.v2 import ProjectV2
14
16
  from ....models.v2 import WorkflowV2
17
+ from ....runner.set_start_and_last_task_index import (
18
+ set_start_and_last_task_index,
19
+ )
15
20
  from ....schemas.v2 import WorkflowCreateV2
16
21
  from ....schemas.v2 import WorkflowExportV2
17
22
  from ....schemas.v2 import WorkflowReadV2
18
23
  from ....schemas.v2 import WorkflowReadV2WithWarnings
19
24
  from ....schemas.v2 import WorkflowUpdateV2
20
25
  from ._aux_functions import _check_workflow_exists
26
+ from ._aux_functions import _get_dataset_check_owner
21
27
  from ._aux_functions import _get_project_check_owner
22
28
  from ._aux_functions import _get_submitted_jobs_statement
23
29
  from ._aux_functions import _get_workflow_check_owner
@@ -25,6 +31,7 @@ from ._aux_functions_tasks import _add_warnings_to_workflow_tasks
25
31
  from fractal_server.app.models import UserOAuth
26
32
  from fractal_server.app.models.v2 import TaskGroupV2
27
33
  from fractal_server.app.routes.auth import current_active_user
34
+ from fractal_server.images.tools import merge_type_filters
28
35
 
29
36
  router = APIRouter()
30
37
 
@@ -284,3 +291,91 @@ async def get_user_workflows(
284
291
  res = await db.execute(stm)
285
292
  workflow_list = res.scalars().all()
286
293
  return workflow_list
294
+
295
+
296
+ class TypeFiltersFlow(BaseModel):
297
+ dataset_filters: list[dict[str, bool]]
298
+ input_filters: list[dict[str, bool]]
299
+ output_filters: list[dict[str, bool]]
300
+
301
+
302
+ @router.get(
303
+ "/project/{project_id}/workflow/{workflow_id}/type-filters-flow/",
304
+ response_model=TypeFiltersFlow,
305
+ )
306
+ async def get_workflow_type_filters(
307
+ project_id: int,
308
+ workflow_id: int,
309
+ dataset_id: Optional[int] = None,
310
+ first_task_index: Optional[int] = None,
311
+ last_task_index: Optional[int] = None,
312
+ user: UserOAuth = Depends(current_active_user),
313
+ db: AsyncSession = Depends(get_async_db),
314
+ ) -> Optional[WorkflowReadV2WithWarnings]:
315
+ """
316
+ Get info on an existing workflow
317
+ """
318
+
319
+ workflow = await _get_workflow_check_owner(
320
+ project_id=project_id,
321
+ workflow_id=workflow_id,
322
+ user_id=user.id,
323
+ db=db,
324
+ )
325
+
326
+ if len(workflow.task_list) == 0:
327
+ raise HTTPException(
328
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
329
+ detail="Workflow has no tasks.",
330
+ )
331
+
332
+ if dataset_id is None:
333
+ dataset_type_filters = {}
334
+ else:
335
+ res = await _get_dataset_check_owner(
336
+ project_id=project_id,
337
+ dataset_id=dataset_id,
338
+ user_id=user.id,
339
+ db=db,
340
+ )
341
+ dataset = res["dataset"]
342
+ dataset_type_filters = dataset.type_filters
343
+
344
+ num_tasks = len(workflow.task_list)
345
+ try:
346
+ first_task_index, last_task_index = set_start_and_last_task_index(
347
+ num_tasks,
348
+ first_task_index=first_task_index,
349
+ last_task_index=last_task_index,
350
+ )
351
+ except ValueError as e:
352
+ raise HTTPException(
353
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
354
+ detail=f"Invalid first/last task index.\nOriginal error: {str(e)}",
355
+ )
356
+
357
+ list_dataset_filters = [copy(dataset_type_filters)]
358
+ list_filters_in = []
359
+ list_filters_out = []
360
+ for wftask in workflow.task_list[first_task_index : last_task_index + 1]:
361
+
362
+ input_type_filters = copy(dataset_type_filters)
363
+ patch = merge_type_filters(
364
+ wftask_type_filters=wftask.type_filters,
365
+ task_input_types=wftask.task.input_types,
366
+ )
367
+ input_type_filters.update(patch)
368
+ list_filters_in.append(copy(input_type_filters))
369
+
370
+ output_type_filters = wftask.task.output_types
371
+ list_filters_out.append(output_type_filters)
372
+
373
+ dataset_type_filters.update(wftask.task.output_types)
374
+ list_dataset_filters.append(copy(dataset_type_filters))
375
+
376
+ response_body = dict(
377
+ dataset_filters=list_dataset_filters,
378
+ input_filters=list_filters_in,
379
+ output_filters=list_filters_out,
380
+ )
381
+ return response_body
@@ -4,7 +4,7 @@ from functools import wraps
4
4
  from typing import Callable
5
5
 
6
6
 
7
- def async_wrap(func: Callable) -> Callable:
7
+ def async_wrap_v1(func: Callable) -> Callable:
8
8
  """
9
9
  Wrap a synchronous callable in an async task
10
10
 
@@ -24,7 +24,7 @@ from typing import Any
24
24
  from typing import Optional
25
25
 
26
26
  from ....models.v1 import Workflow
27
- from ...async_wrap import async_wrap
27
+ from ...async_wrap_v1 import async_wrap_v1
28
28
  from ...set_start_and_last_task_index import set_start_and_last_task_index
29
29
  from .._common import execute_tasks
30
30
  from ..common import TaskParameters
@@ -172,7 +172,7 @@ async def process_workflow(
172
172
  last_task_index=last_task_index,
173
173
  )
174
174
 
175
- output_dataset_metadata_history = await async_wrap(_process_workflow)(
175
+ output_dataset_metadata_history = await async_wrap_v1(_process_workflow)(
176
176
  workflow=workflow,
177
177
  input_paths=input_paths,
178
178
  output_path=output_path,
@@ -21,7 +21,7 @@ from typing import Any
21
21
  from typing import Optional
22
22
  from typing import Union
23
23
 
24
- from ...async_wrap import async_wrap
24
+ from ...async_wrap_v1 import async_wrap_v1
25
25
  from ...executors.slurm.sudo.executor import FractalSlurmExecutor
26
26
  from ...set_start_and_last_task_index import set_start_and_last_task_index
27
27
  from .._common import execute_tasks
@@ -145,7 +145,7 @@ async def process_workflow(
145
145
  last_task_index=last_task_index,
146
146
  )
147
147
 
148
- output_dataset_metadata_history = await async_wrap(_process_workflow)(
148
+ output_dataset_metadata_history = await async_wrap_v1(_process_workflow)(
149
149
  workflow=workflow,
150
150
  input_paths=input_paths,
151
151
  output_path=output_path,
@@ -69,7 +69,7 @@ def fail_job(
69
69
  return
70
70
 
71
71
 
72
- async def submit_workflow(
72
+ def submit_workflow(
73
73
  *,
74
74
  workflow_id: int,
75
75
  dataset_id: int,
@@ -318,7 +318,7 @@ async def submit_workflow(
318
318
  db_sync = next(DB.get_sync_db())
319
319
  db_sync.close()
320
320
 
321
- await process_workflow(
321
+ process_workflow(
322
322
  workflow=workflow,
323
323
  dataset=dataset,
324
324
  workflow_dir_local=WORKFLOW_DIR_LOCAL,
@@ -24,7 +24,6 @@ from typing import Optional
24
24
 
25
25
  from ....models.v2 import DatasetV2
26
26
  from ....models.v2 import WorkflowV2
27
- from ...async_wrap import async_wrap
28
27
  from ...set_start_and_last_task_index import set_start_and_last_task_index
29
28
  from ..runner import execute_tasks_v2
30
29
  from ._submit_setup import _local_submit_setup
@@ -32,35 +31,7 @@ from .executor import FractalThreadPoolExecutor
32
31
  from fractal_server.images.models import AttributeFiltersType
33
32
 
34
33
 
35
- def _process_workflow(
36
- *,
37
- workflow: WorkflowV2,
38
- dataset: DatasetV2,
39
- logger_name: str,
40
- workflow_dir_local: Path,
41
- first_task_index: int,
42
- last_task_index: int,
43
- job_attribute_filters: AttributeFiltersType,
44
- ) -> None:
45
- """
46
- Run the workflow using a `FractalThreadPoolExecutor`.
47
- """
48
- with FractalThreadPoolExecutor() as executor:
49
- execute_tasks_v2(
50
- wf_task_list=workflow.task_list[
51
- first_task_index : (last_task_index + 1)
52
- ],
53
- dataset=dataset,
54
- executor=executor,
55
- workflow_dir_local=workflow_dir_local,
56
- workflow_dir_remote=workflow_dir_local,
57
- logger_name=logger_name,
58
- submit_setup_call=_local_submit_setup,
59
- job_attribute_filters=job_attribute_filters,
60
- )
61
-
62
-
63
- async def process_workflow(
34
+ def process_workflow(
64
35
  *,
65
36
  workflow: WorkflowV2,
66
37
  dataset: DatasetV2,
@@ -143,12 +114,16 @@ async def process_workflow(
143
114
  last_task_index=last_task_index,
144
115
  )
145
116
 
146
- await async_wrap(_process_workflow)(
147
- workflow=workflow,
148
- dataset=dataset,
149
- logger_name=logger_name,
150
- workflow_dir_local=workflow_dir_local,
151
- first_task_index=first_task_index,
152
- last_task_index=last_task_index,
153
- job_attribute_filters=job_attribute_filters,
154
- )
117
+ with FractalThreadPoolExecutor() as executor:
118
+ execute_tasks_v2(
119
+ wf_task_list=workflow.task_list[
120
+ first_task_index : (last_task_index + 1)
121
+ ],
122
+ dataset=dataset,
123
+ executor=executor,
124
+ workflow_dir_local=workflow_dir_local,
125
+ workflow_dir_remote=workflow_dir_local,
126
+ logger_name=logger_name,
127
+ submit_setup_call=_local_submit_setup,
128
+ job_attribute_filters=job_attribute_filters,
129
+ )
@@ -4,7 +4,6 @@ from typing import Optional
4
4
 
5
5
  from ....models.v2 import DatasetV2
6
6
  from ....models.v2 import WorkflowV2
7
- from ...async_wrap import async_wrap
8
7
  from ...exceptions import JobExecutionError
9
8
  from ...filenames import SHUTDOWN_FILENAME
10
9
  from ...set_start_and_last_task_index import set_start_and_last_task_index
@@ -14,45 +13,7 @@ from .executor import FractalProcessPoolExecutor
14
13
  from fractal_server.images.models import AttributeFiltersType
15
14
 
16
15
 
17
- def _process_workflow(
18
- *,
19
- workflow: WorkflowV2,
20
- dataset: DatasetV2,
21
- logger_name: str,
22
- workflow_dir_local: Path,
23
- first_task_index: int,
24
- last_task_index: int,
25
- job_attribute_filters: AttributeFiltersType,
26
- ) -> None:
27
- """
28
- Run the workflow using a `FractalProcessPoolExecutor`.
29
- """
30
- with FractalProcessPoolExecutor(
31
- shutdown_file=workflow_dir_local / SHUTDOWN_FILENAME
32
- ) as executor:
33
- try:
34
- execute_tasks_v2(
35
- wf_task_list=workflow.task_list[
36
- first_task_index : (last_task_index + 1)
37
- ],
38
- dataset=dataset,
39
- executor=executor,
40
- workflow_dir_local=workflow_dir_local,
41
- workflow_dir_remote=workflow_dir_local,
42
- logger_name=logger_name,
43
- submit_setup_call=_local_submit_setup,
44
- job_attribute_filters=job_attribute_filters,
45
- )
46
- except BrokenProcessPool as e:
47
- raise JobExecutionError(
48
- info=(
49
- "Job failed with BrokenProcessPool error, likely due to "
50
- f"an executor shutdown.\nOriginal error:\n{e.args[0]}"
51
- )
52
- )
53
-
54
-
55
- async def process_workflow(
16
+ def process_workflow(
56
17
  *,
57
18
  workflow: WorkflowV2,
58
19
  dataset: DatasetV2,
@@ -135,12 +96,26 @@ async def process_workflow(
135
96
  last_task_index=last_task_index,
136
97
  )
137
98
 
138
- await async_wrap(_process_workflow)(
139
- workflow=workflow,
140
- dataset=dataset,
141
- logger_name=logger_name,
142
- workflow_dir_local=workflow_dir_local,
143
- first_task_index=first_task_index,
144
- last_task_index=last_task_index,
145
- job_attribute_filters=job_attribute_filters,
146
- )
99
+ with FractalProcessPoolExecutor(
100
+ shutdown_file=workflow_dir_local / SHUTDOWN_FILENAME
101
+ ) as executor:
102
+ try:
103
+ execute_tasks_v2(
104
+ wf_task_list=workflow.task_list[
105
+ first_task_index : (last_task_index + 1)
106
+ ],
107
+ dataset=dataset,
108
+ executor=executor,
109
+ workflow_dir_local=workflow_dir_local,
110
+ workflow_dir_remote=workflow_dir_local,
111
+ logger_name=logger_name,
112
+ submit_setup_call=_local_submit_setup,
113
+ job_attribute_filters=job_attribute_filters,
114
+ )
115
+ except BrokenProcessPool as e:
116
+ raise JobExecutionError(
117
+ info=(
118
+ "Job failed with BrokenProcessPool error, likely due to "
119
+ f"an executor shutdown.\nOriginal error:\n{e.args[0]}"
120
+ )
121
+ )
@@ -18,12 +18,10 @@ Executor objects.
18
18
  """
19
19
  from pathlib import Path
20
20
  from typing import Optional
21
- from typing import Union
22
21
 
23
22
  from .....ssh._fabric import FractalSSH
24
23
  from ....models.v2 import DatasetV2
25
24
  from ....models.v2 import WorkflowV2
26
- from ...async_wrap import async_wrap
27
25
  from ...exceptions import JobExecutionError
28
26
  from ...executors.slurm.ssh.executor import FractalSlurmSSHExecutor
29
27
  from ...set_start_and_last_task_index import set_start_and_last_task_index
@@ -35,27 +33,35 @@ from fractal_server.logger import set_logger
35
33
  logger = set_logger(__name__)
36
34
 
37
35
 
38
- def _process_workflow(
36
+ def process_workflow(
39
37
  *,
40
38
  workflow: WorkflowV2,
41
39
  dataset: DatasetV2,
42
- logger_name: str,
43
40
  workflow_dir_local: Path,
44
- workflow_dir_remote: Path,
45
- first_task_index: int,
46
- last_task_index: int,
47
- fractal_ssh: FractalSSH,
48
- worker_init: Optional[Union[str, list[str]]] = None,
41
+ workflow_dir_remote: Optional[Path] = None,
42
+ first_task_index: Optional[int] = None,
43
+ last_task_index: Optional[int] = None,
44
+ logger_name: str,
49
45
  job_attribute_filters: AttributeFiltersType,
46
+ fractal_ssh: FractalSSH,
47
+ worker_init: Optional[str] = None,
48
+ # Not used
49
+ user_cache_dir: Optional[str] = None,
50
+ slurm_user: Optional[str] = None,
51
+ slurm_account: Optional[str] = None,
50
52
  ) -> None:
51
53
  """
52
- Run the workflow using a `FractalSlurmSSHExecutor`.
53
-
54
- This function initialises the a FractalSlurmExecutor, setting logging,
55
- workflow working dir and user to impersonate. It then schedules the
56
- workflow tasks and returns the new dataset attributes
54
+ Process workflow (SLURM backend public interface)
57
55
  """
58
56
 
57
+ # Set values of first_task_index and last_task_index
58
+ num_tasks = len(workflow.task_list)
59
+ first_task_index, last_task_index = set_start_and_last_task_index(
60
+ num_tasks,
61
+ first_task_index=first_task_index,
62
+ last_task_index=last_task_index,
63
+ )
64
+
59
65
  if isinstance(worker_init, str):
60
66
  worker_init = worker_init.split("\n")
61
67
 
@@ -89,46 +95,3 @@ def _process_workflow(
89
95
  submit_setup_call=_slurm_submit_setup,
90
96
  job_attribute_filters=job_attribute_filters,
91
97
  )
92
-
93
-
94
- async def process_workflow(
95
- *,
96
- workflow: WorkflowV2,
97
- dataset: DatasetV2,
98
- workflow_dir_local: Path,
99
- workflow_dir_remote: Optional[Path] = None,
100
- first_task_index: Optional[int] = None,
101
- last_task_index: Optional[int] = None,
102
- logger_name: str,
103
- job_attribute_filters: AttributeFiltersType,
104
- fractal_ssh: FractalSSH,
105
- worker_init: Optional[str] = None,
106
- # Not used
107
- user_cache_dir: Optional[str] = None,
108
- slurm_user: Optional[str] = None,
109
- slurm_account: Optional[str] = None,
110
- ) -> None:
111
- """
112
- Process workflow (SLURM backend public interface)
113
- """
114
-
115
- # Set values of first_task_index and last_task_index
116
- num_tasks = len(workflow.task_list)
117
- first_task_index, last_task_index = set_start_and_last_task_index(
118
- num_tasks,
119
- first_task_index=first_task_index,
120
- last_task_index=last_task_index,
121
- )
122
-
123
- await async_wrap(_process_workflow)(
124
- workflow=workflow,
125
- dataset=dataset,
126
- logger_name=logger_name,
127
- workflow_dir_local=workflow_dir_local,
128
- workflow_dir_remote=workflow_dir_remote,
129
- first_task_index=first_task_index,
130
- last_task_index=last_task_index,
131
- worker_init=worker_init,
132
- fractal_ssh=fractal_ssh,
133
- job_attribute_filters=job_attribute_filters,
134
- )
@@ -18,11 +18,9 @@ Executor objects.
18
18
  """
19
19
  from pathlib import Path
20
20
  from typing import Optional
21
- from typing import Union
22
21
 
23
22
  from ....models.v2 import DatasetV2
24
23
  from ....models.v2 import WorkflowV2
25
- from ...async_wrap import async_wrap
26
24
  from ...executors.slurm.sudo.executor import FractalSlurmExecutor
27
25
  from ...set_start_and_last_task_index import set_start_and_last_task_index
28
26
  from ..runner import execute_tasks_v2
@@ -30,29 +28,34 @@ from ._submit_setup import _slurm_submit_setup
30
28
  from fractal_server.images.models import AttributeFiltersType
31
29
 
32
30
 
33
- def _process_workflow(
31
+ def process_workflow(
34
32
  *,
35
33
  workflow: WorkflowV2,
36
34
  dataset: DatasetV2,
37
- logger_name: str,
38
35
  workflow_dir_local: Path,
39
- workflow_dir_remote: Path,
40
- first_task_index: int,
41
- last_task_index: int,
36
+ workflow_dir_remote: Optional[Path] = None,
37
+ first_task_index: Optional[int] = None,
38
+ last_task_index: Optional[int] = None,
39
+ logger_name: str,
40
+ job_attribute_filters: AttributeFiltersType,
41
+ # Slurm-specific
42
+ user_cache_dir: Optional[str] = None,
42
43
  slurm_user: Optional[str] = None,
43
44
  slurm_account: Optional[str] = None,
44
- user_cache_dir: str,
45
- worker_init: Optional[Union[str, list[str]]] = None,
46
- job_attribute_filters: AttributeFiltersType,
45
+ worker_init: Optional[str] = None,
47
46
  ) -> None:
48
47
  """
49
- Run the workflow using a `FractalSlurmExecutor`.
50
-
51
- This function initialises the a FractalSlurmExecutor, setting logging,
52
- workflow working dir and user to impersonate. It then schedules the
53
- workflow tasks and returns the new dataset attributes
48
+ Process workflow (SLURM backend public interface).
54
49
  """
55
50
 
51
+ # Set values of first_task_index and last_task_index
52
+ num_tasks = len(workflow.task_list)
53
+ first_task_index, last_task_index = set_start_and_last_task_index(
54
+ num_tasks,
55
+ first_task_index=first_task_index,
56
+ last_task_index=last_task_index,
57
+ )
58
+
56
59
  if not slurm_user:
57
60
  raise RuntimeError(
58
61
  "slurm_user argument is required, for slurm backend"
@@ -83,46 +86,3 @@ def _process_workflow(
83
86
  submit_setup_call=_slurm_submit_setup,
84
87
  job_attribute_filters=job_attribute_filters,
85
88
  )
86
-
87
-
88
- async def process_workflow(
89
- *,
90
- workflow: WorkflowV2,
91
- dataset: DatasetV2,
92
- workflow_dir_local: Path,
93
- workflow_dir_remote: Optional[Path] = None,
94
- first_task_index: Optional[int] = None,
95
- last_task_index: Optional[int] = None,
96
- logger_name: str,
97
- job_attribute_filters: AttributeFiltersType,
98
- # Slurm-specific
99
- user_cache_dir: Optional[str] = None,
100
- slurm_user: Optional[str] = None,
101
- slurm_account: Optional[str] = None,
102
- worker_init: Optional[str] = None,
103
- ) -> None:
104
- """
105
- Process workflow (SLURM backend public interface).
106
- """
107
-
108
- # Set values of first_task_index and last_task_index
109
- num_tasks = len(workflow.task_list)
110
- first_task_index, last_task_index = set_start_and_last_task_index(
111
- num_tasks,
112
- first_task_index=first_task_index,
113
- last_task_index=last_task_index,
114
- )
115
- await async_wrap(_process_workflow)(
116
- workflow=workflow,
117
- dataset=dataset,
118
- logger_name=logger_name,
119
- workflow_dir_local=workflow_dir_local,
120
- workflow_dir_remote=workflow_dir_remote,
121
- first_task_index=first_task_index,
122
- last_task_index=last_task_index,
123
- user_cache_dir=user_cache_dir,
124
- slurm_user=slurm_user,
125
- slurm_account=slurm_account,
126
- worker_init=worker_init,
127
- job_attribute_filters=job_attribute_filters,
128
- )
@@ -78,6 +78,7 @@ def fix_db():
78
78
  ds.history[i]["workflowtask"]["type_filters"] = h[
79
79
  "workflowtask"
80
80
  ]["input_filters"]["types"]
81
+ ds.history[i]["workflowtask"].pop("input_filters")
81
82
  flag_modified(ds, "history")
82
83
  DatasetReadV2(
83
84
  **ds.model_dump(),
@@ -155,8 +156,6 @@ def fix_db():
155
156
  f"{job.dataset_id=}, "
156
157
  f"{job.workflow_id=}."
157
158
  )
158
- # FIXME
159
- pass
160
159
  job.dataset_dump.pop("filters")
161
160
  flag_modified(job, "dataset_dump")
162
161
  JobReadV2(**job.model_dump())
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.11.0a8"
3
+ version = "2.11.0a9"
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
  ]
96
96
 
97
97
  [tool.bumpver]
98
- current_version = "2.11.0a8"
98
+ current_version = "2.11.0a9"
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.11.0a8"