fractal-server 2.18.0a0__tar.gz → 2.18.0a1__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 (270) hide show
  1. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/PKG-INFO +1 -1
  2. fractal_server-2.18.0a1/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/accounting.py +2 -2
  4. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/job.py +2 -2
  5. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/task.py +1 -1
  6. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/task_group.py +82 -6
  7. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/sharing.py +1 -2
  8. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/workflowtask.py +5 -4
  9. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/pyproject.toml +2 -2
  10. fractal_server-2.18.0a0/fractal_server/__init__.py +0 -1
  11. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/LICENSE +0 -0
  12. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/README.md +0 -0
  13. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/__main__.py +0 -0
  14. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/alembic.ini +0 -0
  15. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/__init__.py +0 -0
  16. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/db/__init__.py +0 -0
  17. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/__init__.py +0 -0
  18. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/linkusergroup.py +0 -0
  19. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/linkuserproject.py +0 -0
  20. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/security.py +0 -0
  21. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/__init__.py +0 -0
  22. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/accounting.py +0 -0
  23. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/dataset.py +0 -0
  24. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/history.py +0 -0
  25. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/job.py +0 -0
  26. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/profile.py +0 -0
  27. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/project.py +0 -0
  28. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/resource.py +0 -0
  29. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/task.py +0 -0
  30. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/task_group.py +0 -0
  31. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/workflow.py +0 -0
  32. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/workflowtask.py +0 -0
  33. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/__init__.py +0 -0
  34. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/__init__.py +0 -0
  35. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  36. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/_aux_functions.py +0 -0
  37. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  38. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/profile.py +0 -0
  39. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/resource.py +0 -0
  40. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/sharing.py +0 -0
  41. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  42. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/__init__.py +0 -0
  43. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  44. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  45. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  46. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_sharing.py +0 -0
  47. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  48. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
  49. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  50. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
  51. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  52. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/history.py +0 -0
  53. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/images.py +0 -0
  54. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/job.py +0 -0
  55. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -0
  56. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/project.py +0 -0
  57. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/status_legacy.py +0 -0
  58. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/submit.py +0 -0
  59. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task.py +0 -0
  60. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  61. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  62. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_collection_pixi.py +0 -0
  63. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  64. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  65. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_version_update.py +0 -0
  66. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  67. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  68. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/__init__.py +0 -0
  69. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  70. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/current_user.py +0 -0
  71. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/group.py +0 -0
  72. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/login.py +0 -0
  73. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/oauth.py +0 -0
  74. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/register.py +0 -0
  75. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/router.py +0 -0
  76. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/users.py +0 -0
  77. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/__init__.py +0 -0
  78. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/_job.py +0 -0
  79. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/_runner.py +0 -0
  80. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/validate_user_profile.py +0 -0
  81. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/routes/pagination.py +0 -0
  82. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/__init__.py +0 -0
  83. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/user.py +0 -0
  84. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/user_group.py +0 -0
  85. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/__init__.py +0 -0
  86. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/accounting.py +0 -0
  87. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/dataset.py +0 -0
  88. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/dumps.py +0 -0
  89. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/history.py +0 -0
  90. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/job.py +0 -0
  91. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/manifest.py +0 -0
  92. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/profile.py +0 -0
  93. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/project.py +0 -0
  94. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/resource.py +0 -0
  95. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/sharing.py +0 -0
  96. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
  97. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/task.py +0 -0
  98. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  99. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/task_group.py +0 -0
  100. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/workflow.py +0 -0
  101. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  102. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/security/__init__.py +0 -0
  103. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/security/signup_email.py +0 -0
  104. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/app/shutdown.py +0 -0
  105. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/config/__init__.py +0 -0
  106. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/config/_data.py +0 -0
  107. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/config/_database.py +0 -0
  108. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/config/_email.py +0 -0
  109. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/config/_main.py +0 -0
  110. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/config/_oauth.py +0 -0
  111. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/config/_settings_config.py +0 -0
  112. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/data_migrations/README.md +0 -0
  113. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/data_migrations/tools.py +0 -0
  114. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/exceptions.py +0 -0
  115. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/gunicorn_fractal.py +0 -0
  116. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/images/__init__.py +0 -0
  117. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/images/models.py +0 -0
  118. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/images/status_tools.py +0 -0
  119. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/images/tools.py +0 -0
  120. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/logger.py +0 -0
  121. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/main.py +0 -0
  122. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/env.py +0 -0
  123. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/naming_convention.py +0 -0
  124. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  125. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  126. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +0 -0
  127. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  128. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/1a83a5260664_rename.py +0 -0
  129. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  130. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  131. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/40d6d6511b20_add_index_to_history_models.py +0 -0
  132. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +0 -0
  133. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  134. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/49d0856e9569_drop_table.py +0 -0
  135. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  136. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  137. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  138. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  139. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  140. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  141. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  142. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +0 -0
  143. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
  144. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +0 -0
  145. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  146. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  147. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  148. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  149. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
  150. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  151. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +0 -0
  152. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  153. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  154. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
  155. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  156. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  157. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  158. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  159. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
  160. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +0 -0
  161. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py +0 -0
  162. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
  163. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +0 -0
  164. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  165. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  166. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  167. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  168. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_project.py +0 -0
  169. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  170. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  171. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  172. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
  173. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  174. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  175. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/py.typed +0 -0
  176. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/__init__.py +0 -0
  177. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/components.py +0 -0
  178. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/config/__init__.py +0 -0
  179. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/config/_local.py +0 -0
  180. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/config/_slurm.py +0 -0
  181. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/config/slurm_mem_to_MB.py +0 -0
  182. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/exceptions.py +0 -0
  183. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/__init__.py +0 -0
  184. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/base_runner.py +0 -0
  185. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/call_command_wrapper.py +0 -0
  186. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/local/__init__.py +0 -0
  187. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/local/get_local_config.py +0 -0
  188. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/local/runner.py +0 -0
  189. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/__init__.py +0 -0
  190. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/_batching.py +0 -0
  191. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/_job_states.py +0 -0
  192. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/base_slurm_runner.py +0 -0
  193. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/get_slurm_config.py +0 -0
  194. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/remote.py +0 -0
  195. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/slurm_config.py +0 -0
  196. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
  197. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/__init__.py +0 -0
  198. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/run_subprocess.py +0 -0
  199. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/runner.py +0 -0
  200. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/tar_commands.py +0 -0
  201. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_sudo/__init__.py +0 -0
  202. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  203. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_sudo/runner.py +0 -0
  204. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/filenames.py +0 -0
  205. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/set_start_and_last_task_index.py +0 -0
  206. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/task_files.py +0 -0
  207. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/__init__.py +0 -0
  208. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/_local.py +0 -0
  209. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/_slurm_ssh.py +0 -0
  210. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/_slurm_sudo.py +0 -0
  211. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/db_tools.py +0 -0
  212. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/deduplicate_list.py +0 -0
  213. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/merge_outputs.py +0 -0
  214. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/runner.py +0 -0
  215. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/runner_functions.py +0 -0
  216. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/submit_workflow.py +0 -0
  217. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/task_interface.py +0 -0
  218. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/runner/versions.py +0 -0
  219. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/ssh/__init__.py +0 -0
  220. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/ssh/_fabric.py +0 -0
  221. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/string_tools.py +0 -0
  222. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/syringe.py +0 -0
  223. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/__init__.py +0 -0
  224. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/config/__init__.py +0 -0
  225. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/config/_pixi.py +0 -0
  226. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/config/_python.py +0 -0
  227. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/utils.py +0 -0
  228. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/__init__.py +0 -0
  229. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/__init__.py +0 -0
  230. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/_utils.py +0 -0
  231. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/collect.py +0 -0
  232. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/collect_pixi.py +0 -0
  233. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  234. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/deactivate_pixi.py +0 -0
  235. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/delete.py +0 -0
  236. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  237. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/reactivate_pixi.py +0 -0
  238. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  239. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +0 -0
  240. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  241. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  242. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/collect_pixi.py +0 -0
  243. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  244. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +0 -0
  245. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/delete.py +0 -0
  246. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  247. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +0 -0
  248. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  249. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  250. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  251. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  252. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  253. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  254. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
  255. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/pixi_2_install.sh +0 -0
  256. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -0
  257. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_background.py +0 -0
  258. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_database.py +0 -0
  259. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  260. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_pixi.py +0 -0
  261. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  262. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_templates.py +0 -0
  263. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/types/__init__.py +0 -0
  264. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/types/validators/__init__.py +0 -0
  265. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/types/validators/_common_validators.py +0 -0
  266. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/types/validators/_filter_validators.py +0 -0
  267. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
  268. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/urls.py +0 -0
  269. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/utils.py +0 -0
  270. {fractal_server-2.18.0a0 → fractal_server-2.18.0a1}/fractal_server/zip_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fractal-server
3
- Version: 2.18.0a0
3
+ Version: 2.18.0a1
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.18.0a1"
@@ -67,11 +67,11 @@ async def query_accounting(
67
67
  res = await db.execute(stm)
68
68
  records = res.scalars().all()
69
69
 
70
- return PaginationResponse[AccountingRecordRead](
70
+ return dict(
71
71
  total_count=total_count,
72
72
  page_size=page_size,
73
73
  current_page=page,
74
- items=[record.model_dump() for record in records],
74
+ items=records,
75
75
  )
76
76
 
77
77
 
@@ -146,11 +146,11 @@ async def view_job(
146
146
  for job in job_list:
147
147
  setattr(job, "log", None)
148
148
 
149
- return PaginationResponse[JobReadV2](
149
+ return dict(
150
150
  total_count=total_count,
151
151
  page_size=page_size,
152
152
  current_page=page,
153
- items=[job.model_dump() for job in job_list],
153
+ items=job_list,
154
154
  )
155
155
 
156
156
 
@@ -170,7 +170,7 @@ async def query_tasks(
170
170
  ],
171
171
  )
172
172
  )
173
- return PaginationResponse[TaskV2Info](
173
+ return dict(
174
174
  total_count=total_count,
175
175
  page_size=page_size,
176
176
  current_page=page,
@@ -5,6 +5,7 @@ from fastapi import status
5
5
  from pydantic.types import AwareDatetime
6
6
  from sqlalchemy.sql.operators import is_
7
7
  from sqlalchemy.sql.operators import is_not
8
+ from sqlmodel import func
8
9
  from sqlmodel import select
9
10
 
10
11
  from fractal_server.app.db import AsyncSession
@@ -16,6 +17,9 @@ from fractal_server.app.routes.auth import current_superuser_act
16
17
  from fractal_server.app.routes.auth._aux_auth import (
17
18
  _verify_user_belongs_to_group,
18
19
  )
20
+ from fractal_server.app.routes.pagination import PaginationRequest
21
+ from fractal_server.app.routes.pagination import PaginationResponse
22
+ from fractal_server.app.routes.pagination import get_pagination_params
19
23
  from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
20
24
  from fractal_server.app.schemas.v2 import TaskGroupActivityStatusV2
21
25
  from fractal_server.app.schemas.v2 import TaskGroupActivityV2Read
@@ -29,7 +33,9 @@ router = APIRouter()
29
33
  logger = set_logger(__name__)
30
34
 
31
35
 
32
- @router.get("/activity/", response_model=list[TaskGroupActivityV2Read])
36
+ @router.get(
37
+ "/activity/", response_model=PaginationResponse[TaskGroupActivityV2Read]
38
+ )
33
39
  async def get_task_group_activity_list(
34
40
  task_group_activity_id: int | None = None,
35
41
  user_id: int | None = None,
@@ -38,30 +44,65 @@ async def get_task_group_activity_list(
38
44
  status: TaskGroupActivityStatusV2 | None = None,
39
45
  action: TaskGroupActivityActionV2 | None = None,
40
46
  timestamp_started_min: AwareDatetime | None = None,
47
+ pagination: PaginationRequest = Depends(get_pagination_params),
41
48
  superuser: UserOAuth = Depends(current_superuser_act),
42
49
  db: AsyncSession = Depends(get_async_db),
43
- ) -> list[TaskGroupActivityV2Read]:
50
+ ) -> PaginationResponse[TaskGroupActivityV2Read]:
51
+ # Assign pagination parameters
52
+ page = pagination.page
53
+ page_size = pagination.page_size
54
+
44
55
  stm = select(TaskGroupActivityV2)
56
+ stm_count = select(func.count(TaskGroupActivityV2.id))
45
57
  if task_group_activity_id is not None:
46
58
  stm = stm.where(TaskGroupActivityV2.id == task_group_activity_id)
59
+ stm_count = stm_count.where(
60
+ TaskGroupActivityV2.id == task_group_activity_id
61
+ )
47
62
  if user_id:
48
63
  stm = stm.where(TaskGroupActivityV2.user_id == user_id)
64
+ stm_count = stm_count.where(TaskGroupActivityV2.user_id == user_id)
49
65
  if taskgroupv2_id:
50
66
  stm = stm.where(TaskGroupActivityV2.taskgroupv2_id == taskgroupv2_id)
67
+ stm_count = stm_count.where(
68
+ TaskGroupActivityV2.taskgroupv2_id == taskgroupv2_id
69
+ )
51
70
  if pkg_name:
52
71
  stm = stm.where(TaskGroupActivityV2.pkg_name.icontains(pkg_name))
72
+ stm_count = stm_count.where(
73
+ TaskGroupActivityV2.pkg_name.icontains(pkg_name)
74
+ )
53
75
  if status:
54
76
  stm = stm.where(TaskGroupActivityV2.status == status)
77
+ stm_count = stm_count.where(TaskGroupActivityV2.status == status)
55
78
  if action:
56
79
  stm = stm.where(TaskGroupActivityV2.action == action)
80
+ stm_count = stm_count.where(TaskGroupActivityV2.action == action)
57
81
  if timestamp_started_min is not None:
58
82
  stm = stm.where(
59
83
  TaskGroupActivityV2.timestamp_started >= timestamp_started_min
60
84
  )
85
+ stm_count = stm_count.where(
86
+ TaskGroupActivityV2.timestamp_started >= timestamp_started_min
87
+ )
88
+
89
+ # Find total number of elements
90
+ res_total_count = await db.execute(stm_count)
91
+ total_count = res_total_count.scalar()
92
+ if page_size is None:
93
+ page_size = total_count
94
+ else:
95
+ stm = stm.offset((page - 1) * page_size).limit(page_size)
61
96
 
62
97
  res = await db.execute(stm)
63
98
  activities = res.scalars().all()
64
- return activities
99
+
100
+ return dict(
101
+ total_count=total_count,
102
+ page_size=page_size,
103
+ current_page=page,
104
+ items=activities,
105
+ )
65
106
 
66
107
 
67
108
  @router.get("/{task_group_id}/", response_model=TaskGroupReadSuperuser)
@@ -79,7 +120,7 @@ async def query_task_group(
79
120
  return task_group
80
121
 
81
122
 
82
- @router.get("/", response_model=list[TaskGroupReadSuperuser])
123
+ @router.get("/", response_model=PaginationResponse[TaskGroupReadSuperuser])
83
124
  async def query_task_group_list(
84
125
  user_id: int | None = None,
85
126
  user_group_id: int | None = None,
@@ -90,10 +131,16 @@ async def query_task_group_list(
90
131
  timestamp_last_used_min: AwareDatetime | None = None,
91
132
  timestamp_last_used_max: AwareDatetime | None = None,
92
133
  resource_id: int | None = None,
134
+ pagination: PaginationRequest = Depends(get_pagination_params),
93
135
  user: UserOAuth = Depends(current_superuser_act),
94
136
  db: AsyncSession = Depends(get_async_db),
95
- ) -> list[TaskGroupReadSuperuser]:
137
+ ) -> PaginationResponse[TaskGroupReadSuperuser]:
138
+ # Assign pagination parameters
139
+ page = pagination.page
140
+ page_size = pagination.page_size
141
+
96
142
  stm = select(TaskGroupV2)
143
+ stm_count = select(func.count(TaskGroupV2.id))
97
144
 
98
145
  if user_group_id is not None and private is True:
99
146
  raise HTTPException(
@@ -105,37 +152,66 @@ async def query_task_group_list(
105
152
  )
106
153
  if user_id is not None:
107
154
  stm = stm.where(TaskGroupV2.user_id == user_id)
155
+ stm_count = stm_count.where(TaskGroupV2.user_id == user_id)
108
156
  if user_group_id is not None:
109
157
  stm = stm.where(TaskGroupV2.user_group_id == user_group_id)
158
+ stm_count = stm_count.where(TaskGroupV2.user_group_id == user_group_id)
110
159
  if private is not None:
111
160
  if private is True:
112
161
  stm = stm.where(is_(TaskGroupV2.user_group_id, None))
162
+ stm_count = stm_count.where(is_(TaskGroupV2.user_group_id, None))
113
163
  else:
114
164
  stm = stm.where(is_not(TaskGroupV2.user_group_id, None))
165
+ stm_count = stm_count.where(is_not(TaskGroupV2.user_group_id, None))
115
166
  if active is not None:
116
167
  if active is True:
117
168
  stm = stm.where(is_(TaskGroupV2.active, True))
169
+ stm_count = stm_count.where(is_(TaskGroupV2.active, True))
118
170
  else:
119
171
  stm = stm.where(is_(TaskGroupV2.active, False))
172
+ stm_count = stm_count.where(is_(TaskGroupV2.active, False))
120
173
  if origin is not None:
121
174
  stm = stm.where(TaskGroupV2.origin == origin)
175
+ stm_count = stm_count.where(TaskGroupV2.origin == origin)
122
176
  if pkg_name is not None:
123
177
  stm = stm.where(TaskGroupV2.pkg_name.icontains(pkg_name))
178
+ stm_count = stm_count.where(TaskGroupV2.pkg_name.icontains(pkg_name))
124
179
  if timestamp_last_used_min is not None:
125
180
  stm = stm.where(
126
181
  TaskGroupV2.timestamp_last_used >= timestamp_last_used_min
127
182
  )
183
+ stm_count = stm_count.where(
184
+ TaskGroupV2.timestamp_last_used >= timestamp_last_used_min
185
+ )
128
186
  if timestamp_last_used_max is not None:
129
187
  stm = stm.where(
130
188
  TaskGroupV2.timestamp_last_used <= timestamp_last_used_max
131
189
  )
190
+ stm_count = stm_count.where(
191
+ TaskGroupV2.timestamp_last_used <= timestamp_last_used_max
192
+ )
132
193
  if resource_id is not None:
133
194
  stm = stm.where(TaskGroupV2.resource_id == resource_id)
195
+ stm_count = stm_count.where(TaskGroupV2.resource_id == resource_id)
196
+
197
+ # Find total number of elements
198
+ res_total_count = await db.execute(stm_count)
199
+ total_count = res_total_count.scalar()
200
+ if page_size is None:
201
+ page_size = total_count
202
+ else:
203
+ stm = stm.offset((page - 1) * page_size).limit(page_size)
134
204
 
135
205
  stm = stm.order_by(TaskGroupV2.id)
136
206
  res = await db.execute(stm)
137
207
  task_groups_list = res.scalars().all()
138
- return task_groups_list
208
+
209
+ return dict(
210
+ total_count=total_count,
211
+ page_size=page_size,
212
+ current_page=page,
213
+ items=task_groups_list,
214
+ )
139
215
 
140
216
 
141
217
  @router.patch("/{task_group_id}/", response_model=TaskGroupReadSuperuser)
@@ -243,9 +243,8 @@ async def get_access_info(
243
243
  UserOAuth.id == LinkUserProjectV2.user_id,
244
244
  )
245
245
  .where(LinkUserProjectV2.is_owner.is_(True))
246
- .where(LinkUserProjectV2.project_id == ProjectV2.id)
246
+ .where(LinkUserProjectV2.project_id == project_id)
247
247
  .scalar_subquery()
248
- .correlate(LinkUserProjectV2)
249
248
  ),
250
249
  )
251
250
  .where(LinkUserProjectV2.project_id == project_id)
@@ -69,13 +69,14 @@ async def create_workflowtask(
69
69
  require_active=True,
70
70
  )
71
71
  except HTTPException as e:
72
- if e.status_code == 403:
73
- raise HTTPException(
72
+ raise (
73
+ HTTPException(
74
74
  status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
75
75
  detail="The task must be accessible to the project owner.",
76
76
  )
77
- else:
78
- raise e
77
+ if e.status_code == 403
78
+ else e
79
+ )
79
80
 
80
81
  task = await _get_task_read_access(
81
82
  task_id=task_id, user_id=user.id, db=db, require_active=True
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.18.0a0"
3
+ version = "2.18.0a1"
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", "fails_on_macos", "oauth"]
96
96
 
97
97
  [tool.bumpver]
98
- current_version = "2.18.0a0"
98
+ current_version = "2.18.0a1"
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.18.0a0"