fractal-server 2.2.0a0__tar.gz → 2.2.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 (175) hide show
  1. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/PKG-INFO +3 -1
  2. fractal_server-2.2.0a1/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/db/__init__.py +1 -1
  4. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/__init__.py +47 -31
  5. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/config.py +38 -18
  6. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/env.py +1 -1
  7. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/pyproject.toml +5 -3
  8. fractal_server-2.2.0a0/fractal_server/__init__.py +0 -1
  9. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/LICENSE +0 -0
  10. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/README.md +0 -0
  11. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/__main__.py +0 -0
  12. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/alembic.ini +0 -0
  13. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/__init__.py +0 -0
  14. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/__init__.py +0 -0
  15. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/linkuserproject.py +0 -0
  16. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/security.py +0 -0
  17. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v1/__init__.py +0 -0
  18. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v1/dataset.py +0 -0
  19. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v1/job.py +0 -0
  20. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v1/project.py +0 -0
  21. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v1/state.py +0 -0
  22. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v1/task.py +0 -0
  23. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v1/workflow.py +0 -0
  24. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/__init__.py +0 -0
  25. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/collection_state.py +0 -0
  26. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/dataset.py +0 -0
  27. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/job.py +0 -0
  28. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/project.py +0 -0
  29. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/task.py +0 -0
  30. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/workflow.py +0 -0
  31. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/models/v2/workflowtask.py +0 -0
  32. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/__init__.py +0 -0
  33. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/admin/__init__.py +0 -0
  34. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/admin/v1.py +0 -0
  35. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/admin/v2.py +0 -0
  36. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/__init__.py +0 -0
  37. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/__init__.py +0 -0
  38. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
  39. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/dataset.py +0 -0
  40. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/job.py +0 -0
  41. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/project.py +0 -0
  42. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/task.py +0 -0
  43. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
  44. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/workflow.py +0 -0
  45. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
  46. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  47. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  48. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  49. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/images.py +0 -0
  50. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/job.py +0 -0
  51. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/project.py +0 -0
  52. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/status.py +0 -0
  53. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/submit.py +0 -0
  54. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/task.py +0 -0
  55. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  56. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/task_legacy.py +0 -0
  57. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  58. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  59. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/auth.py +0 -0
  60. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/aux/__init__.py +0 -0
  61. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/aux/_job.py +0 -0
  62. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/routes/aux/_runner.py +0 -0
  63. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/.gitignore +0 -0
  64. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/__init__.py +0 -0
  65. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/async_wrap.py +0 -0
  66. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/components.py +0 -0
  67. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/exceptions.py +0 -0
  68. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/__init__.py +0 -0
  69. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
  70. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
  71. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/_check_jobs_status.py +0 -0
  72. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/_executor_wait_thread.py +0 -0
  73. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
  74. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/_subprocess_run_as_user.py +0 -0
  75. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/executor.py +0 -0
  76. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
  77. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/filenames.py +0 -0
  78. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  79. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/shutdown.py +0 -0
  80. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/task_files.py +0 -0
  81. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/__init__.py +0 -0
  82. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_common.py +0 -0
  83. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_local/__init__.py +0 -0
  84. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
  85. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
  86. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_local/executor.py +0 -0
  87. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_slurm/__init__.py +0 -0
  88. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
  89. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
  90. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/common.py +0 -0
  91. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
  92. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
  93. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
  94. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
  95. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local/executor.py +0 -0
  96. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -0
  97. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
  98. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
  99. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
  100. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_slurm/__init__.py +0 -0
  101. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_slurm/_submit_setup.py +0 -0
  102. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/_slurm/get_slurm_config.py +0 -0
  103. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  104. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
  105. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  106. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/runner.py +0 -0
  107. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  108. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  109. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/task_interface.py +0 -0
  110. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/runner/v2/v1_compat.py +0 -0
  111. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/__init__.py +0 -0
  112. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/_validators.py +0 -0
  113. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/state.py +0 -0
  114. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/user.py +0 -0
  115. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/__init__.py +0 -0
  116. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
  117. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/dataset.py +0 -0
  118. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/dumps.py +0 -0
  119. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/manifest.py +0 -0
  120. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/project.py +0 -0
  121. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/task.py +0 -0
  122. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/task_collection.py +0 -0
  123. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v1/workflow.py +0 -0
  124. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/__init__.py +0 -0
  125. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/dataset.py +0 -0
  126. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/dumps.py +0 -0
  127. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/job.py +0 -0
  128. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/manifest.py +0 -0
  129. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/project.py +0 -0
  130. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/status.py +0 -0
  131. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/task.py +0 -0
  132. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  133. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/workflow.py +0 -0
  134. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  135. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/app/security/__init__.py +0 -0
  136. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/data_migrations/README.md +0 -0
  137. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/gunicorn_fractal.py +0 -0
  138. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/images/__init__.py +0 -0
  139. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/images/models.py +0 -0
  140. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/images/tools.py +0 -0
  141. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/logger.py +0 -0
  142. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/main.py +0 -0
  143. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/README +0 -0
  144. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/script.py.mako +0 -0
  145. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  146. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  147. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  148. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  149. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  150. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  151. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  152. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  153. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  154. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  155. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  156. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  157. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  158. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  159. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  160. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  161. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/py.typed +0 -0
  162. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/syringe.py +0 -0
  163. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/__init__.py +0 -0
  164. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/endpoint_operations.py +0 -0
  165. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/utils.py +0 -0
  166. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
  167. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v1/__init__.py +0 -0
  168. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v1/background_operations.py +0 -0
  169. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v1/get_collection_data.py +0 -0
  170. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v2/_TaskCollectPip.py +0 -0
  171. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v2/__init__.py +0 -0
  172. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v2/background_operations.py +0 -0
  173. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/tasks/v2/get_collection_data.py +0 -0
  174. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/urls.py +0 -0
  175. {fractal_server-2.2.0a0 → fractal_server-2.2.0a1}/fractal_server/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.2.0a0
3
+ Version: 2.2.0a1
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
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
16
  Provides-Extra: gunicorn
17
17
  Provides-Extra: postgres
18
+ Provides-Extra: postgres-psycopg-binary
18
19
  Requires-Dist: aiosqlite (>=0.19.0,<0.20.0)
19
20
  Requires-Dist: alembic (>=1.13.1,<2.0.0)
20
21
  Requires-Dist: asyncpg (>=0.29.0,<0.30.0) ; extra == "postgres"
@@ -26,6 +27,7 @@ Requires-Dist: fastapi-users[oauth] (>=12.1.0,<13.0.0)
26
27
  Requires-Dist: gunicorn (>=21.2,<23.0) ; extra == "gunicorn"
27
28
  Requires-Dist: packaging (>=23.2,<24.0)
28
29
  Requires-Dist: psycopg2 (>=2.9.5,<3.0.0) ; extra == "postgres"
30
+ Requires-Dist: psycopg[binary] (>=3.1.0,<4.0.0) ; extra == "postgres-psycopg-binary"
29
31
  Requires-Dist: pydantic (>=1.10.8,<2)
30
32
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
31
33
  Requires-Dist: sqlalchemy[asyncio] (>=2.0.23,<2.1)
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.2.0a1"
@@ -63,7 +63,7 @@ class DB:
63
63
  }
64
64
 
65
65
  cls._engine_async = create_async_engine(
66
- settings.DATABASE_URL,
66
+ settings.DATABASE_ASYNC_URL,
67
67
  echo=settings.DB_ECHO,
68
68
  future=True,
69
69
  **engine_kwargs_async,
@@ -126,41 +126,57 @@ async def submit_workflow(
126
126
  db_sync.close()
127
127
  return
128
128
 
129
- # Create WORKFLOW_DIR
130
- original_umask = os.umask(0)
131
- WORKFLOW_DIR_LOCAL.mkdir(parents=True, mode=0o755)
132
- os.umask(original_umask)
133
-
134
- # Define and create WORKFLOW_DIR_REMOTE
135
- if FRACTAL_RUNNER_BACKEND == "local":
136
- WORKFLOW_DIR_REMOTE = WORKFLOW_DIR_LOCAL
137
- elif FRACTAL_RUNNER_BACKEND == "local_experimental":
138
- WORKFLOW_DIR_REMOTE = WORKFLOW_DIR_LOCAL
139
- elif FRACTAL_RUNNER_BACKEND == "slurm":
140
- WORKFLOW_DIR_REMOTE = (
141
- Path(user_cache_dir) / WORKFLOW_DIR_LOCAL.name
142
- )
143
- _mkdir_as_user(folder=str(WORKFLOW_DIR_REMOTE), user=slurm_user)
144
-
145
- # Create all tasks subfolders
146
- for order in range(job.first_task_index, job.last_task_index + 1):
147
- this_wftask = workflow.task_list[order]
148
- if this_wftask.is_legacy_task:
149
- task_name = this_wftask.task_legacy.name
150
- else:
151
- task_name = this_wftask.task.name
152
- subfolder_name = task_subfolder_name(
153
- order=order,
154
- task_name=task_name,
155
- )
129
+ try:
130
+
131
+ # Create WORKFLOW_DIR
156
132
  original_umask = os.umask(0)
157
- (WORKFLOW_DIR_LOCAL / subfolder_name).mkdir(mode=0o755)
133
+ WORKFLOW_DIR_LOCAL.mkdir(parents=True, mode=0o755)
134
+
158
135
  os.umask(original_umask)
159
- if FRACTAL_RUNNER_BACKEND == "slurm":
136
+
137
+ # Define and create WORKFLOW_DIR_REMOTE
138
+ if FRACTAL_RUNNER_BACKEND == "local":
139
+ WORKFLOW_DIR_REMOTE = WORKFLOW_DIR_LOCAL
140
+ elif FRACTAL_RUNNER_BACKEND == "local_experimental":
141
+ WORKFLOW_DIR_REMOTE = WORKFLOW_DIR_LOCAL
142
+ elif FRACTAL_RUNNER_BACKEND == "slurm":
143
+ WORKFLOW_DIR_REMOTE = (
144
+ Path(user_cache_dir) / WORKFLOW_DIR_LOCAL.name
145
+ )
160
146
  _mkdir_as_user(
161
- folder=str(WORKFLOW_DIR_REMOTE / subfolder_name),
162
- user=slurm_user,
147
+ folder=str(WORKFLOW_DIR_REMOTE), user=slurm_user
148
+ )
149
+
150
+ # Create all tasks subfolders
151
+ for order in range(job.first_task_index, job.last_task_index + 1):
152
+ this_wftask = workflow.task_list[order]
153
+ if this_wftask.is_legacy_task:
154
+ task_name = this_wftask.task_legacy.name
155
+ else:
156
+ task_name = this_wftask.task.name
157
+ subfolder_name = task_subfolder_name(
158
+ order=order,
159
+ task_name=task_name,
163
160
  )
161
+ original_umask = os.umask(0)
162
+ (WORKFLOW_DIR_LOCAL / subfolder_name).mkdir(mode=0o755)
163
+ os.umask(original_umask)
164
+ if FRACTAL_RUNNER_BACKEND == "slurm":
165
+ _mkdir_as_user(
166
+ folder=str(WORKFLOW_DIR_REMOTE / subfolder_name),
167
+ user=slurm_user,
168
+ )
169
+ except Exception as e:
170
+ job.status = JobStatusTypeV2.FAILED
171
+ job.end_timestamp = get_timestamp()
172
+ job.log = (
173
+ "An error occurred while creating job folder and subfolders.\n"
174
+ f"Original error: {str(e)}"
175
+ )
176
+ db_sync.merge(job)
177
+ db_sync.commit()
178
+ db_sync.close()
179
+ return
164
180
 
165
181
  # After Session.commit() is called, either explicitly or when using a
166
182
  # context manager, all objects associated with the Session are expired.
@@ -166,7 +166,7 @@ class Settings(BaseSettings):
166
166
  ###########################################################################
167
167
  # DATABASE
168
168
  ###########################################################################
169
- DB_ENGINE: Literal["sqlite", "postgres"] = "sqlite"
169
+ DB_ENGINE: Literal["sqlite", "postgres", "postgres-psycopg"] = "sqlite"
170
170
  """
171
171
  Select which database engine to use (supported: `sqlite` and `postgres`).
172
172
  """
@@ -201,39 +201,51 @@ class Settings(BaseSettings):
201
201
  """
202
202
 
203
203
  @property
204
- def DATABASE_URL(self) -> URL:
205
- if self.DB_ENGINE == "sqlite":
206
- if not self.SQLITE_PATH:
207
- raise FractalConfigurationError(
208
- "SQLITE_PATH path cannot be None"
209
- )
210
- sqlite_path = abspath(self.SQLITE_PATH)
204
+ def DATABASE_ASYNC_URL(self) -> URL:
205
+ if self.DB_ENGINE == "postgres":
211
206
  url = URL.create(
212
- drivername="sqlite+aiosqlite",
213
- database=sqlite_path,
207
+ drivername="postgresql+asyncpg",
208
+ username=self.POSTGRES_USER,
209
+ password=self.POSTGRES_PASSWORD,
210
+ host=self.POSTGRES_HOST,
211
+ port=self.POSTGRES_PORT,
212
+ database=self.POSTGRES_DB,
214
213
  )
215
- return url
216
- elif "postgres":
214
+ elif self.DB_ENGINE == "postgres-psycopg":
217
215
  url = URL.create(
218
- drivername="postgresql+asyncpg",
216
+ drivername="postgresql+psycopg",
219
217
  username=self.POSTGRES_USER,
220
218
  password=self.POSTGRES_PASSWORD,
221
219
  host=self.POSTGRES_HOST,
222
220
  port=self.POSTGRES_PORT,
223
221
  database=self.POSTGRES_DB,
224
222
  )
225
- return url
223
+ else:
224
+ if not self.SQLITE_PATH:
225
+ raise FractalConfigurationError(
226
+ "SQLITE_PATH path cannot be None"
227
+ )
228
+ sqlite_path = abspath(self.SQLITE_PATH)
229
+ url = URL.create(
230
+ drivername="sqlite+aiosqlite",
231
+ database=sqlite_path,
232
+ )
233
+ return url
226
234
 
227
235
  @property
228
236
  def DATABASE_SYNC_URL(self):
229
- if self.DB_ENGINE == "sqlite":
237
+ if self.DB_ENGINE == "postgres":
238
+ return self.DATABASE_ASYNC_URL.set(
239
+ drivername="postgresql+psycopg2"
240
+ )
241
+ elif self.DB_ENGINE == "postgres-psycopg":
242
+ return self.DATABASE_ASYNC_URL.set(drivername="postgresql+psycopg")
243
+ else:
230
244
  if not self.SQLITE_PATH:
231
245
  raise FractalConfigurationError(
232
246
  "SQLITE_PATH path cannot be None"
233
247
  )
234
- return self.DATABASE_URL.set(drivername="sqlite")
235
- elif self.DB_ENGINE == "postgres":
236
- return self.DATABASE_URL.set(drivername="postgresql+psycopg2")
248
+ return self.DATABASE_ASYNC_URL.set(drivername="sqlite")
237
249
 
238
250
  ###########################################################################
239
251
  # FRACTAL SPECIFIC
@@ -420,6 +432,14 @@ class Settings(BaseSettings):
420
432
  "DB engine is `postgres` but `psycopg2` or `asyncpg` "
421
433
  "are not available"
422
434
  )
435
+ elif self.DB_ENGINE == "postgres-psycopg":
436
+ try:
437
+ import psycopg # noqa: F401
438
+ except ModuleNotFoundError:
439
+ raise FractalConfigurationError(
440
+ "DB engine is `postgres-psycopg` but `psycopg` is not "
441
+ "available"
442
+ )
423
443
  else:
424
444
  if not self.SQLITE_PATH:
425
445
  raise FractalConfigurationError(
@@ -54,7 +54,7 @@ def run_migrations_offline() -> None:
54
54
  settings = Inject(get_settings)
55
55
  settings.check_db()
56
56
  context.configure(
57
- url=settings.DATABASE_URL,
57
+ url=settings.DATABASE_ASYNC_URL,
58
58
  target_metadata=target_metadata,
59
59
  literal_binds=True,
60
60
  dialect_opts={"paramstyle": "named"},
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fractal-server"
3
- version = "2.2.0a0"
3
+ version = "2.2.0a1"
4
4
  description = "Server component of the Fractal analytics platform"
5
5
  authors = [
6
6
  "Tommaso Comparin <tommaso.comparin@exact-lab.it>",
@@ -40,12 +40,14 @@ clusterfutures = "^0.5"
40
40
  cloudpickle = ">=3.0.0,<3.1.0"
41
41
 
42
42
  asyncpg = { version = "^0.29.0", optional = true }
43
- psycopg2 = { version = "^2.9.5", optional = true }
44
43
  gunicorn = { version = ">=21.2,<23.0", optional = true }
44
+ psycopg = { version = "^3.1.0", extras=["binary"], optional=true }
45
+ psycopg2 = { version = "^2.9.5", optional = true }
45
46
 
46
47
  [tool.poetry.extras]
47
48
  postgres = ["asyncpg", "psycopg2"]
48
49
  gunicorn = ["gunicorn"]
50
+ postgres-psycopg-binary = ["psycopg"]
49
51
 
50
52
  [tool.poetry.group.dev.dependencies]
51
53
  asgi-lifespan = "^2"
@@ -88,7 +90,7 @@ filterwarnings = [
88
90
  ]
89
91
 
90
92
  [tool.bumpver]
91
- current_version = "2.2.0a0"
93
+ current_version = "2.2.0a1"
92
94
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
93
95
  commit_message = "bump version {old_version} -> {new_version}"
94
96
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.2.0a0"