fractal-server 2.5.1__tar.gz → 2.5.2__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.5.1 → fractal_server-2.5.2}/PKG-INFO +1 -1
- fractal_server-2.5.2/fractal_server/__init__.py +1 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/submit.py +13 -1
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/task_collection.py +10 -1
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/ssh/executor.py +24 -4
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/sudo/executor.py +6 -2
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/main.py +12 -10
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/ssh/_fabric.py +179 -34
- {fractal_server-2.5.1 → fractal_server-2.5.2}/pyproject.toml +2 -2
- fractal_server-2.5.1/fractal_server/__init__.py +0 -1
- {fractal_server-2.5.1 → fractal_server-2.5.2}/LICENSE +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/README.md +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/__main__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/alembic.ini +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/db/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/linkusergroup.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/linkuserproject.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/security.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v1/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v1/dataset.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v1/job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v1/project.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v1/state.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v1/task.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v1/workflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/collection_state.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/dataset.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/project.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/task.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/workflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/workflowtask.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/admin/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/admin/v1.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/admin/v2.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/dataset.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/project.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/task.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/workflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/dataset.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/images.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/project.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/status.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/task.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/workflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/current_user.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/group.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/group_names.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/login.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/oauth.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/register.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/router.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/users.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/aux/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/aux/_job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/aux/_runner.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/.gitignore +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/async_wrap.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/components.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/compress_folder.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/exceptions.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/extract_archive.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/filenames.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/run_subprocess.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/shutdown.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/task_files.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_common.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_local/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_local/executor.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_slurm/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/common.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local/executor.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_slurm_common/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_slurm_sudo/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/runner.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/runner_functions.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/v2/task_interface.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/versions.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/_validators.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/user.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/user_group.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/dataset.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/dumps.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/manifest.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/project.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/state.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/task.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/task_collection.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v1/workflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/dataset.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/dumps.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/job.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/manifest.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/project.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/status.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/task.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/task_collection.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/workflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/security/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/config.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/data_migrations/2_4_0.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/data_migrations/README.md +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/gunicorn_fractal.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/images/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/images/models.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/images/tools.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/logger.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/README +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/env.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/naming_convention.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/script.py.mako +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/py.typed +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/ssh/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/string_tools.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/syringe.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/utils.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v1/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v1/background_operations.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v1/endpoint_operations.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v1/get_collection_data.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v1/utils.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/_TaskCollectPip.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/__init__.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/_venv_pip.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/background_operations.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/background_operations_ssh.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/endpoint_operations.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/templates/_1_create_venv.sh +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/templates/_2_upgrade_pip.sh +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/templates/_3_pip_install.sh +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/templates/_4_pip_freeze.sh +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/templates/_5_pip_show.sh +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/tasks/v2/utils.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/urls.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/utils.py +0 -0
- {fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/zip_tools.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__VERSION__ = "2.5.2"
|
@@ -238,6 +238,18 @@ async def apply_workflow(
|
|
238
238
|
await db.merge(job)
|
239
239
|
await db.commit()
|
240
240
|
|
241
|
+
# User appropriate FractalSSH object
|
242
|
+
if settings.FRACTAL_RUNNER_BACKEND == "slurm_ssh":
|
243
|
+
ssh_credentials = dict(
|
244
|
+
user=settings.FRACTAL_SLURM_SSH_USER,
|
245
|
+
host=settings.FRACTAL_SLURM_SSH_HOST,
|
246
|
+
key_path=settings.FRACTAL_SLURM_SSH_PRIVATE_KEY_PATH,
|
247
|
+
)
|
248
|
+
fractal_ssh_list = request.app.state.fractal_ssh_list
|
249
|
+
fractal_ssh = fractal_ssh_list.get(**ssh_credentials)
|
250
|
+
else:
|
251
|
+
fractal_ssh = None
|
252
|
+
|
241
253
|
background_tasks.add_task(
|
242
254
|
submit_workflow,
|
243
255
|
workflow_id=workflow.id,
|
@@ -246,7 +258,7 @@ async def apply_workflow(
|
|
246
258
|
worker_init=job.worker_init,
|
247
259
|
slurm_user=user.slurm_user,
|
248
260
|
user_cache_dir=user.cache_dir,
|
249
|
-
fractal_ssh=
|
261
|
+
fractal_ssh=fractal_ssh,
|
250
262
|
)
|
251
263
|
request.app.state.jobsV2.append(job.id)
|
252
264
|
logger.info(
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/task_collection.py
RENAMED
@@ -124,11 +124,20 @@ async def collect_tasks_pip(
|
|
124
124
|
db.add(state)
|
125
125
|
await db.commit()
|
126
126
|
|
127
|
+
# User appropriate FractalSSH object
|
128
|
+
ssh_credentials = dict(
|
129
|
+
user=settings.FRACTAL_SLURM_SSH_USER,
|
130
|
+
host=settings.FRACTAL_SLURM_SSH_HOST,
|
131
|
+
key_path=settings.FRACTAL_SLURM_SSH_PRIVATE_KEY_PATH,
|
132
|
+
)
|
133
|
+
fractal_ssh_list = request.app.state.fractal_ssh_list
|
134
|
+
fractal_ssh = fractal_ssh_list.get(**ssh_credentials)
|
135
|
+
|
127
136
|
background_tasks.add_task(
|
128
137
|
background_collect_pip_ssh,
|
129
138
|
state.id,
|
130
139
|
task_pkg,
|
131
|
-
|
140
|
+
fractal_ssh,
|
132
141
|
)
|
133
142
|
|
134
143
|
response.status_code = status.HTTP_201_CREATED
|
@@ -163,17 +163,34 @@ class FractalSlurmSSHExecutor(SlurmExecutor):
|
|
163
163
|
settings = Inject(get_settings)
|
164
164
|
self.python_remote = settings.FRACTAL_SLURM_WORKER_PYTHON
|
165
165
|
if self.python_remote is None:
|
166
|
+
self._stop_and_join_wait_thread()
|
166
167
|
raise ValueError("FRACTAL_SLURM_WORKER_PYTHON is not set. Exit.")
|
167
168
|
|
168
169
|
# Initialize connection and perform handshake
|
169
170
|
self.fractal_ssh = fractal_ssh
|
170
171
|
logger.warning(self.fractal_ssh)
|
171
|
-
|
172
|
+
try:
|
173
|
+
self.handshake()
|
174
|
+
except Exception as e:
|
175
|
+
logger.warning(
|
176
|
+
"Stop/join waiting thread and then "
|
177
|
+
f"re-raise original error {str(e)}"
|
178
|
+
)
|
179
|
+
self._stop_and_join_wait_thread()
|
180
|
+
raise e
|
172
181
|
|
173
182
|
# Set/validate parameters for SLURM submission scripts
|
174
183
|
self.slurm_account = slurm_account
|
175
184
|
self.common_script_lines = common_script_lines or []
|
176
|
-
|
185
|
+
try:
|
186
|
+
self._validate_common_script_lines()
|
187
|
+
except Exception as e:
|
188
|
+
logger.warning(
|
189
|
+
"Stop/join waiting thread and then "
|
190
|
+
f"re-raise original error {str(e)}"
|
191
|
+
)
|
192
|
+
self._stop_and_join_wait_thread()
|
193
|
+
raise e
|
177
194
|
|
178
195
|
# Set/initialize some more options
|
179
196
|
self.keep_pickle_files = keep_pickle_files
|
@@ -1385,6 +1402,10 @@ class FractalSlurmSSHExecutor(SlurmExecutor):
|
|
1385
1402
|
self.fractal_ssh.run_command(cmd=scancel_command)
|
1386
1403
|
logger.debug("Executor shutdown: end")
|
1387
1404
|
|
1405
|
+
def _stop_and_join_wait_thread(self):
|
1406
|
+
self.wait_thread.stop()
|
1407
|
+
self.wait_thread.join()
|
1408
|
+
|
1388
1409
|
def __exit__(self, *args, **kwargs):
|
1389
1410
|
"""
|
1390
1411
|
See
|
@@ -1393,8 +1414,7 @@ class FractalSlurmSSHExecutor(SlurmExecutor):
|
|
1393
1414
|
logger.debug(
|
1394
1415
|
"[FractalSlurmSSHExecutor.__exit__] Stop and join `wait_thread`"
|
1395
1416
|
)
|
1396
|
-
self.
|
1397
|
-
self.wait_thread.join()
|
1417
|
+
self._stop_and_join_wait_thread()
|
1398
1418
|
logger.debug("[FractalSlurmSSHExecutor.__exit__] End")
|
1399
1419
|
|
1400
1420
|
def run_squeue(self, job_ids):
|
@@ -259,6 +259,7 @@ class FractalSlurmExecutor(SlurmExecutor):
|
|
259
259
|
for line in self.common_script_lines
|
260
260
|
if line.startswith("#SBATCH --account=")
|
261
261
|
)
|
262
|
+
self._stop_and_join_wait_thread()
|
262
263
|
raise RuntimeError(
|
263
264
|
"Invalid line in `FractalSlurmExecutor.common_script_lines`: "
|
264
265
|
f"'{invalid_line}'.\n"
|
@@ -1287,6 +1288,10 @@ class FractalSlurmExecutor(SlurmExecutor):
|
|
1287
1288
|
|
1288
1289
|
logger.debug("Executor shutdown: end")
|
1289
1290
|
|
1291
|
+
def _stop_and_join_wait_thread(self):
|
1292
|
+
self.wait_thread.stop()
|
1293
|
+
self.wait_thread.join()
|
1294
|
+
|
1290
1295
|
def __exit__(self, *args, **kwargs):
|
1291
1296
|
"""
|
1292
1297
|
See
|
@@ -1295,6 +1300,5 @@ class FractalSlurmExecutor(SlurmExecutor):
|
|
1295
1300
|
logger.debug(
|
1296
1301
|
"[FractalSlurmExecutor.__exit__] Stop and join `wait_thread`"
|
1297
1302
|
)
|
1298
|
-
self.
|
1299
|
-
self.wait_thread.join()
|
1303
|
+
self._stop_and_join_wait_thread()
|
1300
1304
|
logger.debug("[FractalSlurmExecutor.__exit__] End")
|
@@ -92,32 +92,34 @@ async def lifespan(app: FastAPI):
|
|
92
92
|
settings = Inject(get_settings)
|
93
93
|
|
94
94
|
if settings.FRACTAL_RUNNER_BACKEND == "slurm_ssh":
|
95
|
-
from fractal_server.ssh._fabric import get_ssh_connection
|
96
|
-
from fractal_server.ssh._fabric import FractalSSH
|
97
95
|
|
98
|
-
|
99
|
-
|
96
|
+
from fractal_server.ssh._fabric import FractalSSHList
|
97
|
+
|
98
|
+
app.state.fractal_ssh_list = FractalSSHList()
|
99
|
+
|
100
100
|
logger.info(
|
101
|
-
|
102
|
-
f"({app.state.
|
101
|
+
"Added empty FractalSSHList to app.state "
|
102
|
+
f"(id={id(app.state.fractal_ssh_list)})."
|
103
103
|
)
|
104
104
|
else:
|
105
|
-
app.state.
|
105
|
+
app.state.fractal_ssh_list = None
|
106
106
|
|
107
107
|
config_uvicorn_loggers()
|
108
108
|
logger.info("End application startup")
|
109
109
|
reset_logger_handlers(logger)
|
110
|
+
|
110
111
|
yield
|
112
|
+
|
111
113
|
logger = get_logger("fractal_server.lifespan")
|
112
114
|
logger.info("Start application shutdown")
|
113
115
|
|
114
116
|
if settings.FRACTAL_RUNNER_BACKEND == "slurm_ssh":
|
115
117
|
logger.info(
|
116
|
-
|
117
|
-
f"(current: {app.state.
|
118
|
+
"Close FractalSSH connections "
|
119
|
+
f"(current size: {app.state.fractal_ssh_list.size})."
|
118
120
|
)
|
119
121
|
|
120
|
-
app.state.
|
122
|
+
app.state.fractal_ssh_list.close_all()
|
121
123
|
|
122
124
|
logger.info(
|
123
125
|
f"Current worker with pid {os.getpid()} is shutting down. "
|
@@ -16,20 +16,21 @@ from paramiko.ssh_exception import NoValidConnectionsError
|
|
16
16
|
|
17
17
|
from ..logger import get_logger
|
18
18
|
from ..logger import set_logger
|
19
|
-
from fractal_server.config import get_settings
|
20
19
|
from fractal_server.string_tools import validate_cmd
|
21
|
-
from fractal_server.syringe import Inject
|
22
20
|
|
23
21
|
|
24
22
|
class FractalSSHTimeoutError(RuntimeError):
|
25
23
|
pass
|
26
24
|
|
27
25
|
|
26
|
+
class FractalSSHListTimeoutError(RuntimeError):
|
27
|
+
pass
|
28
|
+
|
29
|
+
|
28
30
|
logger = set_logger(__name__)
|
29
31
|
|
30
32
|
|
31
33
|
class FractalSSH(object):
|
32
|
-
|
33
34
|
"""
|
34
35
|
FIXME SSH: Fix docstring
|
35
36
|
|
@@ -111,7 +112,6 @@ class FractalSSH(object):
|
|
111
112
|
def run(
|
112
113
|
self, *args, lock_timeout: Optional[float] = None, **kwargs
|
113
114
|
) -> Any:
|
114
|
-
|
115
115
|
actual_lock_timeout = self.default_lock_timeout
|
116
116
|
if lock_timeout is not None:
|
117
117
|
actual_lock_timeout = lock_timeout
|
@@ -138,7 +138,19 @@ class FractalSSH(object):
|
|
138
138
|
)
|
139
139
|
|
140
140
|
def close(self) -> None:
|
141
|
-
|
141
|
+
"""
|
142
|
+
Aggressively close `self._connection`.
|
143
|
+
|
144
|
+
When `Connection.is_connected` is `False`, `Connection.close()` does
|
145
|
+
not call `Connection.client.close()`. Thus we do this explicitly here,
|
146
|
+
because we observed cases where `is_connected=False` but the underlying
|
147
|
+
`Transport` object was not closed.
|
148
|
+
"""
|
149
|
+
|
150
|
+
self._connection.close()
|
151
|
+
|
152
|
+
if self._connection.client is not None:
|
153
|
+
self._connection.client.close()
|
142
154
|
|
143
155
|
def run_command(
|
144
156
|
self,
|
@@ -335,36 +347,169 @@ class FractalSSH(object):
|
|
335
347
|
f.write(content)
|
336
348
|
|
337
349
|
|
338
|
-
|
339
|
-
*,
|
340
|
-
host: Optional[str] = None,
|
341
|
-
user: Optional[str] = None,
|
342
|
-
key_filename: Optional[str] = None,
|
343
|
-
) -> Connection:
|
350
|
+
class FractalSSHList(object):
|
344
351
|
"""
|
345
|
-
|
346
|
-
or explicit arguments.
|
352
|
+
Collection of `FractalSSH` objects
|
347
353
|
|
348
|
-
|
349
|
-
|
350
|
-
user:
|
351
|
-
key_filename:
|
354
|
+
Attributes are all private, and access to this collection must be
|
355
|
+
through methods (mostly the `get` one).
|
352
356
|
|
353
|
-
|
354
|
-
|
357
|
+
Attributes:
|
358
|
+
_data:
|
359
|
+
Mapping of unique keys (the SSH-credentials tuples) to
|
360
|
+
`FractalSSH` objects.
|
361
|
+
_lock:
|
362
|
+
A `threading.Lock object`, to be acquired when changing `_data`.
|
363
|
+
_timeout: Timeout for `_lock` acquisition.
|
364
|
+
_logger_name: Logger name.
|
355
365
|
"""
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
366
|
+
|
367
|
+
_data: dict[tuple[str, str, str], FractalSSH]
|
368
|
+
_lock: Lock
|
369
|
+
_timeout: float
|
370
|
+
_logger_name: str
|
371
|
+
|
372
|
+
def __init__(
|
373
|
+
self,
|
374
|
+
*,
|
375
|
+
timeout: float = 5.0,
|
376
|
+
logger_name: str = "fractal_server.FractalSSHList",
|
377
|
+
):
|
378
|
+
self._lock = Lock()
|
379
|
+
self._data = {}
|
380
|
+
self._timeout = timeout
|
381
|
+
self._logger_name = logger_name
|
382
|
+
set_logger(self._logger_name)
|
383
|
+
|
384
|
+
@property
|
385
|
+
def logger(self) -> logging.Logger:
|
386
|
+
"""
|
387
|
+
This property exists so that we never have to propagate the
|
388
|
+
`Logger` object.
|
389
|
+
"""
|
390
|
+
return get_logger(self._logger_name)
|
391
|
+
|
392
|
+
@property
|
393
|
+
def size(self) -> int:
|
394
|
+
"""
|
395
|
+
Number of current key-value pairs in `self._data`.
|
396
|
+
"""
|
397
|
+
return len(self._data.values())
|
398
|
+
|
399
|
+
def get(self, *, host: str, user: str, key_path: str) -> FractalSSH:
|
400
|
+
"""
|
401
|
+
Get the `FractalSSH` for the current credentials, or create one.
|
402
|
+
|
403
|
+
Note: Changing `_data` requires acquiring `_lock`.
|
404
|
+
|
405
|
+
Arguments:
|
406
|
+
host:
|
407
|
+
user:
|
408
|
+
key_path:
|
409
|
+
"""
|
410
|
+
key = (host, user, key_path)
|
411
|
+
fractal_ssh = self._data.get(key, None)
|
412
|
+
if fractal_ssh is not None:
|
413
|
+
self.logger.info(
|
414
|
+
f"Return existing FractalSSH object for {user}@{host}"
|
415
|
+
)
|
416
|
+
return fractal_ssh
|
417
|
+
else:
|
418
|
+
self.logger.info(f"Add new FractalSSH object for {user}@{host}")
|
419
|
+
connection = Connection(
|
420
|
+
host=host,
|
421
|
+
user=user,
|
422
|
+
forward_agent=False,
|
423
|
+
connect_kwargs={
|
424
|
+
"key_filename": key_path,
|
425
|
+
"look_for_keys": False,
|
426
|
+
},
|
427
|
+
)
|
428
|
+
with self.acquire_lock_with_timeout():
|
429
|
+
self._data[key] = FractalSSH(connection=connection)
|
430
|
+
return self._data[key]
|
431
|
+
|
432
|
+
def contains(
|
433
|
+
self,
|
434
|
+
*,
|
435
|
+
host: str,
|
436
|
+
user: str,
|
437
|
+
key_path: str,
|
438
|
+
) -> bool:
|
439
|
+
"""
|
440
|
+
Return whether a given key is present in the collection.
|
441
|
+
|
442
|
+
Arguments:
|
443
|
+
host:
|
444
|
+
user:
|
445
|
+
key_path:
|
446
|
+
"""
|
447
|
+
key = (host, user, key_path)
|
448
|
+
return key in self._data.keys()
|
449
|
+
|
450
|
+
def remove(
|
451
|
+
self,
|
452
|
+
*,
|
453
|
+
host: str,
|
454
|
+
user: str,
|
455
|
+
key_path: str,
|
456
|
+
) -> None:
|
457
|
+
"""
|
458
|
+
Remove a key from `_data` and close the corresponding connection.
|
459
|
+
|
460
|
+
Note: Changing `_data` requires acquiring `_lock`.
|
461
|
+
|
462
|
+
Arguments:
|
463
|
+
host:
|
464
|
+
user:
|
465
|
+
key_path:
|
466
|
+
"""
|
467
|
+
key = (host, user, key_path)
|
468
|
+
with self.acquire_lock_with_timeout():
|
469
|
+
self.logger.info(
|
470
|
+
f"Removing FractalSSH object for {user}@{host} "
|
471
|
+
"from collection."
|
472
|
+
)
|
473
|
+
fractal_ssh_obj = self._data.pop(key)
|
474
|
+
self.logger.info(
|
475
|
+
f"Closing FractalSSH object for {user}@{host} "
|
476
|
+
f"({fractal_ssh_obj.is_connected=})."
|
477
|
+
)
|
478
|
+
fractal_ssh_obj.close()
|
479
|
+
|
480
|
+
def close_all(self, *, timeout: float = 5.0):
|
481
|
+
"""
|
482
|
+
Close all `FractalSSH` objects in the collection.
|
483
|
+
|
484
|
+
Arguments:
|
485
|
+
timeout:
|
486
|
+
Timeout for `FractalSSH._lock` acquisition, to be obtained
|
487
|
+
before closing.
|
488
|
+
"""
|
489
|
+
for key, fractal_ssh_obj in self._data.items():
|
490
|
+
host, user, _ = key[:]
|
491
|
+
self.logger.info(
|
492
|
+
f"Closing FractalSSH object for {user}@{host} "
|
493
|
+
f"({fractal_ssh_obj.is_connected=})."
|
494
|
+
)
|
495
|
+
with fractal_ssh_obj.acquire_timeout(timeout=timeout):
|
496
|
+
fractal_ssh_obj.close()
|
497
|
+
|
498
|
+
@contextmanager
|
499
|
+
def acquire_lock_with_timeout(self) -> Generator[Literal[True], Any, None]:
|
500
|
+
self.logger.debug(
|
501
|
+
f"Trying to acquire lock, with timeout {self._timeout} s"
|
502
|
+
)
|
503
|
+
result = self._lock.acquire(timeout=self._timeout)
|
504
|
+
try:
|
505
|
+
if not result:
|
506
|
+
self.logger.error("Lock was *NOT* acquired.")
|
507
|
+
raise FractalSSHListTimeoutError(
|
508
|
+
f"Failed to acquire lock within {self._timeout} ss"
|
509
|
+
)
|
510
|
+
self.logger.debug("Lock was acquired.")
|
511
|
+
yield result
|
512
|
+
finally:
|
513
|
+
if result:
|
514
|
+
self._lock.release()
|
515
|
+
self.logger.debug("Lock was released")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "fractal-server"
|
3
|
-
version = "2.5.
|
3
|
+
version = "2.5.2"
|
4
4
|
description = "Server component of the Fractal analytics platform"
|
5
5
|
authors = [
|
6
6
|
"Tommaso Comparin <tommaso.comparin@exact-lab.it>",
|
@@ -92,7 +92,7 @@ filterwarnings = [
|
|
92
92
|
]
|
93
93
|
|
94
94
|
[tool.bumpver]
|
95
|
-
current_version = "2.5.
|
95
|
+
current_version = "2.5.2"
|
96
96
|
version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
|
97
97
|
commit_message = "bump version {old_version} -> {new_version}"
|
98
98
|
commit = true
|
@@ -1 +0,0 @@
|
|
1
|
-
__VERSION__ = "2.5.1"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/models/v2/collection_state.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/_aux_functions.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/task_collection.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v1/workflowtask.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/_aux_functions.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/api/v2/workflowtask.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/routes/auth/current_user.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/__init__.py
RENAMED
File without changes
|
{fractal_server-2.5.1 → fractal_server-2.5.2}/fractal_server/app/runner/executors/slurm/__init__.py
RENAMED
File without changes
|