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