fractal-server 2.3.0a1__tar.gz → 2.3.0a2__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 (199) hide show
  1. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/PKG-INFO +1 -1
  2. fractal_server-2.3.0a2/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/task_collection_custom.py +32 -28
  4. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/task_collection.py +19 -18
  5. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/pyproject.toml +2 -2
  6. fractal_server-2.3.0a1/fractal_server/__init__.py +0 -1
  7. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/LICENSE +0 -0
  8. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/README.md +0 -0
  9. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/__main__.py +0 -0
  10. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/alembic.ini +0 -0
  11. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/__init__.py +0 -0
  12. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/db/__init__.py +0 -0
  13. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/__init__.py +0 -0
  14. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/linkuserproject.py +0 -0
  15. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/security.py +0 -0
  16. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v1/__init__.py +0 -0
  17. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v1/dataset.py +0 -0
  18. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v1/job.py +0 -0
  19. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v1/project.py +0 -0
  20. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v1/state.py +0 -0
  21. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v1/task.py +0 -0
  22. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v1/workflow.py +0 -0
  23. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/__init__.py +0 -0
  24. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/collection_state.py +0 -0
  25. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/dataset.py +0 -0
  26. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/job.py +0 -0
  27. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/project.py +0 -0
  28. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/task.py +0 -0
  29. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/workflow.py +0 -0
  30. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/models/v2/workflowtask.py +0 -0
  31. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/__init__.py +0 -0
  32. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/admin/__init__.py +0 -0
  33. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/admin/v1.py +0 -0
  34. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/admin/v2.py +0 -0
  35. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/__init__.py +0 -0
  36. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/__init__.py +0 -0
  37. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
  38. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/dataset.py +0 -0
  39. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/job.py +0 -0
  40. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/project.py +0 -0
  41. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/task.py +0 -0
  42. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
  43. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/workflow.py +0 -0
  44. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
  45. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  46. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  47. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  48. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/images.py +0 -0
  49. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/job.py +0 -0
  50. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/project.py +0 -0
  51. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/status.py +0 -0
  52. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/submit.py +0 -0
  53. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/task.py +0 -0
  54. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  55. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/task_collection_ssh.py +0 -0
  56. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/task_legacy.py +0 -0
  57. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  58. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  59. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/auth.py +0 -0
  60. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/aux/__init__.py +0 -0
  61. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/aux/_job.py +0 -0
  62. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/routes/aux/_runner.py +0 -0
  63. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/.gitignore +0 -0
  64. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/__init__.py +0 -0
  65. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/async_wrap.py +0 -0
  66. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/components.py +0 -0
  67. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/compress_folder.py +0 -0
  68. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/exceptions.py +0 -0
  69. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/__init__.py +0 -0
  70. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
  71. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
  72. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
  73. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
  74. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -0
  75. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -0
  76. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -0
  77. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/ssh/executor.py +0 -0
  78. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -0
  79. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -0
  80. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -0
  81. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py +0 -0
  82. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/executors/slurm/sudo/executor.py +0 -0
  83. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/extract_archive.py +0 -0
  84. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/filenames.py +0 -0
  85. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  86. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/shutdown.py +0 -0
  87. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/task_files.py +0 -0
  88. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/__init__.py +0 -0
  89. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_common.py +0 -0
  90. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_local/__init__.py +0 -0
  91. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
  92. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
  93. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_local/executor.py +0 -0
  94. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_slurm/__init__.py +0 -0
  95. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
  96. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
  97. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/common.py +0 -0
  98. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
  99. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/__init__.py +0 -0
  100. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
  101. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
  102. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
  103. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local/executor.py +0 -0
  104. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -0
  105. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
  106. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
  107. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
  108. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_slurm/__init__.py +0 -0
  109. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_slurm/_submit_setup.py +0 -0
  110. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_slurm/get_slurm_config.py +0 -0
  111. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py +0 -0
  112. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -0
  113. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/_slurm_ssh/get_slurm_config.py +0 -0
  114. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  115. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
  116. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  117. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/runner.py +0 -0
  118. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  119. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  120. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/task_interface.py +0 -0
  121. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/v2/v1_compat.py +0 -0
  122. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/runner/versions.py +0 -0
  123. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/__init__.py +0 -0
  124. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/_validators.py +0 -0
  125. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/user.py +0 -0
  126. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/__init__.py +0 -0
  127. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
  128. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/dataset.py +0 -0
  129. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/dumps.py +0 -0
  130. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/manifest.py +0 -0
  131. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/project.py +0 -0
  132. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/state.py +0 -0
  133. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/task.py +0 -0
  134. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/task_collection.py +0 -0
  135. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v1/workflow.py +0 -0
  136. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/__init__.py +0 -0
  137. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/dataset.py +0 -0
  138. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/dumps.py +0 -0
  139. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/job.py +0 -0
  140. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/manifest.py +0 -0
  141. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/project.py +0 -0
  142. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/status.py +0 -0
  143. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/task.py +0 -0
  144. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/workflow.py +0 -0
  145. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  146. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/app/security/__init__.py +0 -0
  147. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/config.py +0 -0
  148. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/data_migrations/README.md +0 -0
  149. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/gunicorn_fractal.py +0 -0
  150. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/images/__init__.py +0 -0
  151. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/images/models.py +0 -0
  152. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/images/tools.py +0 -0
  153. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/logger.py +0 -0
  154. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/main.py +0 -0
  155. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/README +0 -0
  156. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/env.py +0 -0
  157. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/script.py.mako +0 -0
  158. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  159. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  160. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  161. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  162. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  163. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  164. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  165. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  166. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  167. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  168. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  169. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  170. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  171. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  172. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  173. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  174. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/py.typed +0 -0
  175. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/ssh/__init__.py +0 -0
  176. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/ssh/_fabric.py +0 -0
  177. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/syringe.py +0 -0
  178. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/__init__.py +0 -0
  179. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/utils.py +0 -0
  180. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
  181. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v1/__init__.py +0 -0
  182. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v1/background_operations.py +0 -0
  183. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v1/endpoint_operations.py +0 -0
  184. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v1/get_collection_data.py +0 -0
  185. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v1/utils.py +0 -0
  186. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/_TaskCollectPip.py +0 -0
  187. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/__init__.py +0 -0
  188. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/_venv_pip.py +0 -0
  189. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/background_operations.py +0 -0
  190. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/background_operations_ssh.py +0 -0
  191. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/endpoint_operations.py +0 -0
  192. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/templates/_1_create_venv.sh +0 -0
  193. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/templates/_2_upgrade_pip.sh +0 -0
  194. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/templates/_3_pip_install.sh +0 -0
  195. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/templates/_4_pip_freeze.sh +0 -0
  196. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/templates/_5_pip_show.sh +0 -0
  197. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/tasks/v2/utils.py +0 -0
  198. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/urls.py +0 -0
  199. {fractal_server-2.3.0a1 → fractal_server-2.3.0a2}/fractal_server/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.3.0a1
3
+ Version: 2.3.0a2
4
4
  Summary: Server 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.3.0a2"
@@ -49,15 +49,33 @@ async def collect_task_custom(
49
49
  status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
50
50
  detail="Cannot infer 'package_root' with 'slurm_ssh' backend.",
51
51
  )
52
+ package_name_underscore = task_collect.package_name.replace("-", "_")
53
+ # Note that python_command is then used as part of a subprocess.run
54
+ # statement: be careful with mixing `'` and `"`.
55
+ python_command = (
56
+ "import importlib.util; "
57
+ "from pathlib import Path; "
58
+ "init_path=importlib.util.find_spec"
59
+ f'("{package_name_underscore}").origin; '
60
+ "print(Path(init_path).parent.as_posix())"
61
+ )
62
+ logger.debug(
63
+ f"Now running {python_command=} through "
64
+ "{task_collect.python_interpreter}."
65
+ )
52
66
  res = subprocess.run( # nosec
53
67
  shlex.split(
54
- f"{task_collect.python_interpreter} "
55
- f"-m pip show {task_collect.package_name}"
68
+ f"{task_collect.python_interpreter} -c '{python_command}'"
56
69
  ),
57
70
  capture_output=True,
58
71
  encoding="utf8",
59
72
  )
60
- if res.returncode != 0:
73
+
74
+ if (
75
+ res.returncode != 0
76
+ or res.stdout is None
77
+ or ("\n" in res.stdout.strip("\n"))
78
+ ):
61
79
  raise HTTPException(
62
80
  status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
63
81
  detail=(
@@ -66,23 +84,7 @@ async def collect_task_custom(
66
84
  f"Original error: {res.stderr}"
67
85
  ),
68
86
  )
69
- try:
70
- package_root_dir = next(
71
- it.split()[1]
72
- for it in res.stdout.split("\n")
73
- if it.startswith("Location")
74
- )
75
- except Exception as e:
76
- raise HTTPException(
77
- status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
78
- detail=(
79
- "Command 'pip show' gave an unexpected response:\n"
80
- "the output should contain 'Location /path/to/package', "
81
- f"instead returned: {res.stdout}.\n"
82
- f"Original error: {str(e)}"
83
- ),
84
- )
85
- package_root = Path(package_root_dir) / task_collect.package_name
87
+ package_root = Path(res.stdout.strip("\n"))
86
88
  else:
87
89
  package_root = Path(task_collect.package_root)
88
90
 
@@ -113,23 +115,25 @@ async def collect_task_custom(
113
115
  res = db.execute(stm)
114
116
  overlapping_sources_v2 = res.scalars().all()
115
117
  if overlapping_sources_v2:
118
+ overlapping_tasks_v2_source_and_id = [
119
+ f"TaskV2 with ID {task.id} already has source='{task.source}'"
120
+ for task in overlapping_sources_v2
121
+ ]
116
122
  raise HTTPException(
117
123
  status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
118
- detail=(
119
- "Some sources already used by some TaskV2: "
120
- f"{overlapping_sources_v2}"
121
- ),
124
+ detail="\n".join(overlapping_tasks_v2_source_and_id),
122
125
  )
123
126
  stm = select(TaskV1).where(TaskV1.source.in_(sources))
124
127
  res = db.execute(stm)
125
128
  overlapping_sources_v1 = res.scalars().all()
126
129
  if overlapping_sources_v1:
130
+ overlapping_tasks_v1_source_and_id = [
131
+ f"TaskV1 with ID {task.id} already has source='{task.source}'\n"
132
+ for task in overlapping_sources_v1
133
+ ]
127
134
  raise HTTPException(
128
135
  status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
129
- detail=(
130
- "Some sources already used by some TaskV1: "
131
- f"{overlapping_sources_v1}"
132
- ),
136
+ detail="\n".join(overlapping_tasks_v1_source_and_id),
133
137
  )
134
138
 
135
139
  task_list_db: list[TaskV2] = _insert_tasks(
@@ -56,15 +56,16 @@ class TaskCollectPipV2(BaseModel):
56
56
  python_version: Optional[Literal["3.9", "3.10", "3.11", "3.12"]] = None
57
57
  pinned_package_versions: Optional[dict[str, str]] = None
58
58
 
59
+ _package = validator("package", allow_reuse=True)(valstr("package"))
60
+ _package_version = validator("package_version", allow_reuse=True)(
61
+ valstr("package_version")
62
+ )
59
63
  _pinned_package_versions = validator(
60
64
  "pinned_package_versions", allow_reuse=True
61
65
  )(valdictkeys("pinned_package_versions"))
62
66
  _package_extras = validator("package_extras", allow_reuse=True)(
63
67
  valstr("package_extras")
64
68
  )
65
- _python_version = validator("python_version", allow_reuse=True)(
66
- valstr("python_version")
67
- )
68
69
 
69
70
  @validator("package")
70
71
  def package_validator(cls, value):
@@ -114,6 +115,21 @@ class TaskCollectCustomV2(BaseModel):
114
115
  package_name: Optional[str]
115
116
  version: Optional[str]
116
117
 
118
+ # Valstr
119
+ _python_interpreter = validator("python_interpreter", allow_reuse=True)(
120
+ valstr("python_interpreter")
121
+ )
122
+ _source = validator("source", allow_reuse=True)(valstr("source"))
123
+ _package_root = validator("package_root", allow_reuse=True)(
124
+ valstr("package_root", accept_none=True)
125
+ )
126
+ _package_name = validator("package_name", allow_reuse=True)(
127
+ valstr("package_name", accept_none=True)
128
+ )
129
+ _version = validator("version", allow_reuse=True)(
130
+ valstr("version", accept_none=True)
131
+ )
132
+
117
133
  @root_validator(pre=True)
118
134
  def one_of_package_root_or_name(cls, values):
119
135
  package_root = values.get("package_root")
@@ -154,21 +170,6 @@ class TaskCollectCustomV2(BaseModel):
154
170
  )
155
171
  return value
156
172
 
157
- # Valstr
158
- _python_interpreter = validator("python_interpreter", allow_reuse=True)(
159
- valstr("python_interpreter")
160
- )
161
- _source = validator("source", allow_reuse=True)(valstr("source"))
162
- _package_root = validator("package_root", allow_reuse=True)(
163
- valstr("package_root", accept_none=True)
164
- )
165
- _package_name = validator("package_name", allow_reuse=True)(
166
- valstr("package_name", accept_none=True)
167
- )
168
- _version = validator("version", allow_reuse=True)(
169
- valstr("version", accept_none=True)
170
- )
171
-
172
173
 
173
174
  class CollectionStateReadV2(BaseModel):
174
175
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fractal-server"
3
- version = "2.3.0a1"
3
+ version = "2.3.0a2"
4
4
  description = "Server component of the Fractal analytics platform"
5
5
  authors = [
6
6
  "Tommaso Comparin <tommaso.comparin@exact-lab.it>",
@@ -91,7 +91,7 @@ filterwarnings = [
91
91
  ]
92
92
 
93
93
  [tool.bumpver]
94
- current_version = "2.3.0a1"
94
+ current_version = "2.3.0a2"
95
95
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
96
96
  commit_message = "bump version {old_version} -> {new_version}"
97
97
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.3.0a1"