fractal-server 2.14.0a28__tar.gz → 2.14.0a30__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.0a28 → fractal_server-2.14.0a30}/PKG-INFO +1 -1
  2. fractal_server-2.14.0a30/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/history.py +1 -0
  4. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/verify_image_types.py +2 -5
  5. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/_local.py +2 -0
  6. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/_slurm_ssh.py +2 -0
  7. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/_slurm_sudo.py +2 -0
  8. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/db_tools.py +16 -3
  9. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/runner.py +6 -0
  10. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/runner_functions.py +17 -9
  11. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/submit_workflow.py +1 -0
  12. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/history.py +1 -0
  13. fractal_server-2.14.0a30/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +41 -0
  14. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/pyproject.toml +2 -2
  15. fractal_server-2.14.0a28/fractal_server/__init__.py +0 -1
  16. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/LICENSE +0 -0
  17. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/README.md +0 -0
  18. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/__main__.py +0 -0
  19. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/alembic.ini +0 -0
  20. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/__init__.py +0 -0
  21. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/db/__init__.py +0 -0
  22. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/history/__init__.py +0 -0
  23. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/__init__.py +0 -0
  24. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/linkusergroup.py +0 -0
  25. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/linkuserproject.py +0 -0
  26. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/security.py +0 -0
  27. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/user_settings.py +0 -0
  28. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/__init__.py +0 -0
  29. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/accounting.py +0 -0
  30. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/dataset.py +0 -0
  31. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/job.py +0 -0
  32. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/project.py +0 -0
  33. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/task.py +0 -0
  34. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/task_group.py +0 -0
  35. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/workflow.py +0 -0
  36. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/models/v2/workflowtask.py +0 -0
  37. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/__init__.py +0 -0
  38. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/__init__.py +0 -0
  39. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  40. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
  41. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  42. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/job.py +0 -0
  43. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/project.py +0 -0
  44. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/task.py +0 -0
  45. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  46. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  47. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/__init__.py +0 -0
  48. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  49. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  50. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  51. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  52. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  53. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  54. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/history.py +0 -0
  55. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/images.py +0 -0
  56. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/job.py +0 -0
  57. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/project.py +0 -0
  58. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/status_legacy.py +0 -0
  59. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/submit.py +0 -0
  60. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/task.py +0 -0
  61. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  62. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  63. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  64. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  65. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  66. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  67. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  68. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/__init__.py +0 -0
  69. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  70. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/current_user.py +0 -0
  71. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/group.py +0 -0
  72. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/login.py +0 -0
  73. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/oauth.py +0 -0
  74. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/register.py +0 -0
  75. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/router.py +0 -0
  76. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/auth/users.py +0 -0
  77. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/aux/__init__.py +0 -0
  78. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/aux/_job.py +0 -0
  79. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/aux/_runner.py +0 -0
  80. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  81. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/routes/pagination.py +0 -0
  82. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/__init__.py +0 -0
  83. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/components.py +0 -0
  84. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/compress_folder.py +0 -0
  85. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/exceptions.py +0 -0
  86. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/__init__.py +0 -0
  87. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/base_runner.py +0 -0
  88. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/local/__init__.py +0 -0
  89. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/local/get_local_config.py +0 -0
  90. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/local/runner.py +0 -0
  91. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/__init__.py +0 -0
  92. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/_batching.py +0 -0
  93. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/_job_states.py +0 -0
  94. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/_slurm_config.py +0 -0
  95. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py +0 -0
  96. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/get_slurm_config.py +0 -0
  97. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/remote.py +0 -0
  98. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
  99. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_common/utils_executors.py +0 -0
  100. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_ssh/__init__.py +0 -0
  101. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_ssh/runner.py +0 -0
  102. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_sudo/__init__.py +0 -0
  103. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  104. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/executors/slurm_sudo/runner.py +0 -0
  105. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/extract_archive.py +0 -0
  106. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/filenames.py +0 -0
  107. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/run_subprocess.py +0 -0
  108. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  109. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/shutdown.py +0 -0
  110. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/task_files.py +0 -0
  111. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/__init__.py +0 -0
  112. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  113. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  114. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  115. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/v2/task_interface.py +0 -0
  116. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/runner/versions.py +0 -0
  117. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/__init__.py +0 -0
  118. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/_filter_validators.py +0 -0
  119. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/_validators.py +0 -0
  120. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/user.py +0 -0
  121. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/user_group.py +0 -0
  122. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/user_settings.py +0 -0
  123. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/__init__.py +0 -0
  124. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/accounting.py +0 -0
  125. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/dataset.py +0 -0
  126. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/dumps.py +0 -0
  127. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/job.py +0 -0
  128. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/manifest.py +0 -0
  129. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/project.py +0 -0
  130. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
  131. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/task.py +0 -0
  132. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  133. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/task_group.py +0 -0
  134. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/workflow.py +0 -0
  135. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  136. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/security/__init__.py +0 -0
  137. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/security/signup_email.py +0 -0
  138. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/app/user_settings.py +0 -0
  139. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/config.py +0 -0
  140. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/data_migrations/README.md +0 -0
  141. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/data_migrations/tools.py +0 -0
  142. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/gunicorn_fractal.py +0 -0
  143. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/images/__init__.py +0 -0
  144. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/images/models.py +0 -0
  145. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/images/tools.py +0 -0
  146. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/logger.py +0 -0
  147. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/main.py +0 -0
  148. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/env.py +0 -0
  149. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/naming_convention.py +0 -0
  150. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  151. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  152. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  153. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  154. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  155. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  156. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  157. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  158. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  159. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  160. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  161. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  162. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  163. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  164. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  165. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  166. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  167. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  168. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  169. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  170. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
  171. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  172. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  173. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  174. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  175. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  176. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  177. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  178. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  179. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  180. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  181. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  182. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
  183. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  184. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  185. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/py.typed +0 -0
  186. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/ssh/__init__.py +0 -0
  187. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/ssh/_fabric.py +0 -0
  188. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/string_tools.py +0 -0
  189. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/syringe.py +0 -0
  190. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/__init__.py +0 -0
  191. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/utils.py +0 -0
  192. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/__init__.py +0 -0
  193. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/local/__init__.py +0 -0
  194. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/local/_utils.py +0 -0
  195. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/local/collect.py +0 -0
  196. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  197. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  198. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  199. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  200. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  201. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  202. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  203. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  204. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  205. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  206. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  207. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  208. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  209. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/utils_background.py +0 -0
  210. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/utils_database.py +0 -0
  211. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  212. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  213. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/tasks/v2/utils_templates.py +0 -0
  214. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/urls.py +0 -0
  215. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/fractal_server/utils.py +0 -0
  216. {fractal_server-2.14.0a28 → fractal_server-2.14.0a30}/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.0a28
3
+ Version: 2.14.0a30
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.0a30"
@@ -27,6 +27,7 @@ class HistoryRun(SQLModel, table=True):
27
27
  default=None,
28
28
  ondelete="SET NULL",
29
29
  )
30
+ job_id: int = Field(foreign_key="jobv2.id")
30
31
 
31
32
  workflowtask_dump: dict[str, Any] = Field(
32
33
  sa_column=Column(JSONB, nullable=False),
@@ -10,6 +10,7 @@ from fractal_server.app.db import AsyncSession
10
10
  from fractal_server.app.db import get_async_db
11
11
  from fractal_server.app.models import UserOAuth
12
12
  from fractal_server.app.routes.auth import current_active_user
13
+ from fractal_server.images.tools import aggregate_types
13
14
  from fractal_server.images.tools import filter_image_list
14
15
 
15
16
  router = APIRouter()
@@ -42,12 +43,8 @@ async def verify_unique_types(
42
43
  type_filters=query.type_filters,
43
44
  )
44
45
 
45
- # NOTE: see issue 2486
46
- available_types = set(
47
- _type for _img in filtered_images for _type in _img["types"].keys()
48
- )
49
-
50
46
  # Get actual values for each available type
47
+ available_types = aggregate_types(filtered_images)
51
48
  values_per_type: dict[str, set] = {
52
49
  _type: set() for _type in available_types
53
50
  }
@@ -15,6 +15,7 @@ def process_workflow(
15
15
  workflow: WorkflowV2,
16
16
  dataset: DatasetV2,
17
17
  workflow_dir_local: Path,
18
+ job_id: int,
18
19
  workflow_dir_remote: Optional[Path] = None,
19
20
  first_task_index: Optional[int] = None,
20
21
  last_task_index: Optional[int] = None,
@@ -75,6 +76,7 @@ def process_workflow(
75
76
  first_task_index : (last_task_index + 1)
76
77
  ],
77
78
  dataset=dataset,
79
+ job_id=job_id,
78
80
  runner=runner,
79
81
  workflow_dir_local=workflow_dir_local,
80
82
  workflow_dir_remote=workflow_dir_local,
@@ -38,6 +38,7 @@ def process_workflow(
38
38
  workflow: WorkflowV2,
39
39
  dataset: DatasetV2,
40
40
  workflow_dir_local: Path,
41
+ job_id: int,
41
42
  workflow_dir_remote: Optional[Path] = None,
42
43
  first_task_index: Optional[int] = None,
43
44
  last_task_index: Optional[int] = None,
@@ -87,6 +88,7 @@ def process_workflow(
87
88
  first_task_index : (last_task_index + 1)
88
89
  ],
89
90
  dataset=dataset,
91
+ job_id=job_id,
90
92
  runner=runner,
91
93
  workflow_dir_local=workflow_dir_local,
92
94
  workflow_dir_remote=workflow_dir_remote,
@@ -33,6 +33,7 @@ def process_workflow(
33
33
  workflow: WorkflowV2,
34
34
  dataset: DatasetV2,
35
35
  workflow_dir_local: Path,
36
+ job_id: int,
36
37
  workflow_dir_remote: Optional[Path] = None,
37
38
  first_task_index: Optional[int] = None,
38
39
  last_task_index: Optional[int] = None,
@@ -79,6 +80,7 @@ def process_workflow(
79
80
  first_task_index : (last_task_index + 1)
80
81
  ],
81
82
  dataset=dataset,
83
+ job_id=job_id,
82
84
  runner=runner,
83
85
  workflow_dir_local=workflow_dir_local,
84
86
  workflow_dir_remote=workflow_dir_remote,
@@ -8,9 +8,13 @@ from fractal_server.app.models.v2 import HistoryImageCache
8
8
  from fractal_server.app.models.v2 import HistoryRun
9
9
  from fractal_server.app.models.v2 import HistoryUnit
10
10
  from fractal_server.app.schemas.v2 import HistoryUnitStatus
11
+ from fractal_server.logger import set_logger
12
+
11
13
 
12
14
  _CHUNK_SIZE = 2_000
13
15
 
16
+ logger = set_logger(__name__)
17
+
14
18
 
15
19
  def update_status_of_history_run(
16
20
  *,
@@ -46,7 +50,12 @@ def bulk_update_status_of_history_unit(
46
50
  status: HistoryUnitStatus,
47
51
  db_sync: Session,
48
52
  ) -> None:
49
- for ind in range(0, len(history_unit_ids), _CHUNK_SIZE):
53
+
54
+ len_history_unit_ids = len(history_unit_ids)
55
+ logger.debug(
56
+ f"[bulk_update_status_of_history_unit] {len_history_unit_ids=}."
57
+ )
58
+ for ind in range(0, len_history_unit_ids, _CHUNK_SIZE):
50
59
  db_sync.execute(
51
60
  update(HistoryUnit)
52
61
  .where(
@@ -85,10 +94,14 @@ def bulk_upsert_image_cache_fast(
85
94
  List of dictionaries for objects to be upsert-ed.
86
95
  db: A sync database session
87
96
  """
88
- if len(list_upsert_objects) == 0:
97
+ len_list_upsert_objects = len(list_upsert_objects)
98
+
99
+ logger.debug(f"[bulk_upsert_image_cache_fast] {len_list_upsert_objects=}.")
100
+
101
+ if len_list_upsert_objects == 0:
89
102
  return None
90
103
 
91
- for ind in range(0, len(list_upsert_objects), _CHUNK_SIZE):
104
+ for ind in range(0, len_list_upsert_objects, _CHUNK_SIZE):
92
105
  stmt = pg_insert(HistoryImageCache).values(
93
106
  list_upsert_objects[ind : ind + _CHUNK_SIZE]
94
107
  )
@@ -42,6 +42,7 @@ def execute_tasks_v2(
42
42
  runner: BaseRunner,
43
43
  user_id: int,
44
44
  workflow_dir_local: Path,
45
+ job_id: int,
45
46
  workflow_dir_remote: Optional[Path] = None,
46
47
  logger_name: Optional[str] = None,
47
48
  get_runner_config: Callable[
@@ -119,6 +120,7 @@ def execute_tasks_v2(
119
120
  history_run = HistoryRun(
120
121
  dataset_id=dataset.id,
121
122
  workflowtask_id=wftask.id,
123
+ job_id=job_id,
122
124
  workflowtask_dump=workflowtask_dump,
123
125
  task_group_dump=task_group_dump,
124
126
  num_available_images=num_available_images,
@@ -128,6 +130,10 @@ def execute_tasks_v2(
128
130
  db.commit()
129
131
  db.refresh(history_run)
130
132
  history_run_id = history_run.id
133
+ logger.debug(
134
+ "[execute_tasks_v2] Created `HistoryRun` with "
135
+ f"{history_run_id=}."
136
+ )
131
137
 
132
138
  # TASK EXECUTION (V2)
133
139
  if task.type in ["non_parallel", "converter_non_parallel"]:
@@ -187,6 +187,10 @@ def run_v2_task_non_parallel(
187
187
  db.add(history_unit)
188
188
  db.commit()
189
189
  db.refresh(history_unit)
190
+ logger.debug(
191
+ "[run_v2_task_non_parallel] Created `HistoryUnit` with "
192
+ f"{history_run_id=}."
193
+ )
190
194
  history_unit_id = history_unit.id
191
195
  bulk_upsert_image_cache_fast(
192
196
  db=db,
@@ -301,6 +305,10 @@ def run_v2_task_parallel(
301
305
  with next(get_sync_db()) as db:
302
306
  db.add_all(history_units)
303
307
  db.commit()
308
+ logger.debug(
309
+ f"[run_v2_task_non_parallel] Created {len(history_units)} "
310
+ "`HistoryUnit`s."
311
+ )
304
312
 
305
313
  for history_unit in history_units:
306
314
  db.refresh(history_unit)
@@ -419,6 +427,10 @@ def run_v2_task_compound(
419
427
  db.commit()
420
428
  db.refresh(history_unit)
421
429
  init_history_unit_id = history_unit.id
430
+ logger.debug(
431
+ "[run_v2_task_compound] Created `HistoryUnit` with "
432
+ f"{init_history_unit_id=}."
433
+ )
422
434
  # Create one `HistoryImageCache` for each input image
423
435
  bulk_upsert_image_cache_fast(
424
436
  db=db,
@@ -468,14 +480,6 @@ def run_v2_task_compound(
468
480
 
469
481
  num_tasks = 1 + len(parallelization_list)
470
482
 
471
- # Mark the init-task `HistoryUnit` as "done"
472
- with next(get_sync_db()) as db:
473
- update_status_of_history_unit(
474
- history_unit_id=init_history_unit_id,
475
- status=HistoryUnitStatus.DONE,
476
- db_sync=db,
477
- )
478
-
479
483
  # 3/B: parallel part of a compound task
480
484
  _check_parallelization_list_size(parallelization_list)
481
485
 
@@ -536,6 +540,10 @@ def run_v2_task_compound(
536
540
  db.commit()
537
541
  for history_unit in history_units:
538
542
  db.refresh(history_unit)
543
+ logger.debug(
544
+ f"[run_v2_task_compound] Created {len(history_units)} "
545
+ "`HistoryUnit`s."
546
+ )
539
547
  history_unit_ids = [history_unit.id for history_unit in history_units]
540
548
 
541
549
  results, exceptions = runner.multisubmit(
@@ -585,7 +593,7 @@ def run_v2_task_compound(
585
593
  else:
586
594
  bulk_update_status_of_history_unit(
587
595
  history_unit_ids=history_unit_ids,
588
- status=HistoryUnitStatus.DONE,
596
+ status=HistoryUnitStatus.DONE + [init_history_unit_id],
589
597
  db_sync=db,
590
598
  )
591
599
 
@@ -282,6 +282,7 @@ def submit_workflow(
282
282
  process_workflow(
283
283
  workflow=workflow,
284
284
  dataset=dataset,
285
+ job_id=job_id,
285
286
  user_id=user_id,
286
287
  workflow_dir_local=WORKFLOW_DIR_LOCAL,
287
288
  workflow_dir_remote=WORKFLOW_DIR_REMOTE,
@@ -45,6 +45,7 @@ class HistoryRunRead(BaseModel):
45
45
  id: int
46
46
  dataset_id: int
47
47
  workflowtask_id: Optional[int] = None
48
+ job_id: int
48
49
  workflowtask_dump: dict[str, Any]
49
50
  task_group_dump: dict[str, Any]
50
51
  timestamp_started: AwareDatetime
@@ -0,0 +1,41 @@
1
+ """job id in history run
2
+
3
+ Revision ID: c90a7c76e996
4
+ Revises: f37aceb45062
5
+ Create Date: 2025-04-16 10:44:30.219309
6
+
7
+ """
8
+ import sqlalchemy as sa
9
+ from alembic import op
10
+
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "c90a7c76e996"
14
+ down_revision = "f37aceb45062"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade() -> None:
20
+ # ### commands auto generated by Alembic - please adjust! ###
21
+ with op.batch_alter_table("historyrun", schema=None) as batch_op:
22
+ batch_op.add_column(sa.Column("job_id", sa.Integer(), nullable=False))
23
+ batch_op.create_foreign_key(
24
+ batch_op.f("fk_historyrun_job_id_jobv2"),
25
+ "jobv2",
26
+ ["job_id"],
27
+ ["id"],
28
+ )
29
+
30
+ # ### end Alembic commands ###
31
+
32
+
33
+ def downgrade() -> None:
34
+ # ### commands auto generated by Alembic - please adjust! ###
35
+ with op.batch_alter_table("historyrun", schema=None) as batch_op:
36
+ batch_op.drop_constraint(
37
+ batch_op.f("fk_historyrun_job_id_jobv2"), type_="foreignkey"
38
+ )
39
+ batch_op.drop_column("job_id")
40
+
41
+ # ### end Alembic commands ###
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.14.0a28"
3
+ version = "2.14.0a30"
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.0a28"
98
+ current_version = "2.14.0a30"
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.0a28"