fractal-server 2.0.0a2__tar.gz → 2.0.0a4__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.0.0a2 → fractal_server-2.0.0a4}/PKG-INFO +7 -7
- fractal_server-2.0.0a4/fractal_server/__init__.py +1 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v2/dataset.py +2 -2
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/admin/v2.py +37 -2
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/__init__.py +1 -1
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/_aux_functions.py +14 -9
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/dataset.py +0 -1
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/images.py +16 -8
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/project.py +0 -4
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/submit.py +3 -4
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/workflow.py +19 -36
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/workflowtask.py +14 -24
- fractal_server-2.0.0a4/fractal_server/app/runner/__init__.py +0 -0
- fractal_server-2.0.0a4/fractal_server/app/runner/executors/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/executor.py +0 -2
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_local/__init__.py +2 -1
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_slurm/__init__.py +4 -2
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +2 -2
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/__init__.py +3 -3
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_local/__init__.py +11 -16
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_slurm/__init__.py +4 -2
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_slurm/_submit_setup.py +2 -3
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/handle_failed_job.py +9 -7
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/runner.py +29 -27
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/runner_functions.py +5 -5
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/task_interface.py +12 -7
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/v1_compat.py +4 -4
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/_validators.py +22 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/task.py +1 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/dumps.py +1 -1
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/task.py +27 -1
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/task_collection.py +4 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/workflowtask.py +60 -17
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/images/models.py +14 -1
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/images/tools.py +7 -7
- fractal_server-2.0.0a4/fractal_server/py.typed +0 -0
- fractal_server-2.0.0a4/fractal_server/tasks/v1/__init__.py +0 -0
- fractal_server-2.0.0a4/fractal_server/tasks/v2/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/pyproject.toml +20 -18
- fractal_server-2.0.0a2/fractal_server/__init__.py +0 -1
- fractal_server-2.0.0a2/fractal_server/app/schemas/json_schemas/manifest.json +0 -81
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/LICENSE +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/README.md +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/__main__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/alembic.ini +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/db/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/linkuserproject.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/security.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/state.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v1/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v1/dataset.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v1/job.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v1/project.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v1/task.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v1/workflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v2/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v2/job.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v2/project.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v2/task.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v2/workflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/models/v2/workflowtask.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/__init__.py +0 -0
- {fractal_server-2.0.0a2/fractal_server/app/routes/aux → fractal_server-2.0.0a4/fractal_server/app/routes/admin}/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/admin/v1.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/dataset.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/job.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/project.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/task.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/workflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/job.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/task.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/auth.py +0 -0
- /fractal_server-2.0.0a2/fractal_server/py.typed → /fractal_server-2.0.0a4/fractal_server/app/routes/aux/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/aux/_job.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/aux/_runner.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/.gitignore +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/async_wrap.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/components.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/exceptions.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/_check_jobs_status.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/_executor_wait_thread.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/_subprocess_run_as_user.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/filenames.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/task_files.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_common.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_local/executor.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/common.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_local/executor.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_slurm/get_slurm_config.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/state.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/user.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/dataset.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/dumps.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/manifest.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/project.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/task_collection.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v1/workflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/dataset.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/job.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/manifest.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/project.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/schemas/v2/workflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/security/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/config.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/data_migrations/README.md +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/images/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/logger.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/main.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/README +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/env.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/script.py.mako +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/d71e732236cd_v2.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/syringe.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/__init__.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/endpoint_operations.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/utils.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/v1/background_operations.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/v1/get_collection_data.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/v2/_TaskCollectPip.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/v2/background_operations.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/tasks/v2/get_collection_data.py +0 -0
- {fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fractal-server
|
3
|
-
Version: 2.0.
|
3
|
+
Version: 2.0.0a4
|
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
|
@@ -16,21 +16,21 @@ Classifier: Programming Language :: Python :: 3.12
|
|
16
16
|
Provides-Extra: gunicorn
|
17
17
|
Provides-Extra: postgres
|
18
18
|
Requires-Dist: aiosqlite (>=0.19.0,<0.20.0)
|
19
|
-
Requires-Dist: alembic (>=1.
|
19
|
+
Requires-Dist: alembic (>=1.13.1,<2.0.0)
|
20
20
|
Requires-Dist: asyncpg (>=0.29.0,<0.30.0) ; extra == "postgres"
|
21
21
|
Requires-Dist: bcrypt (==4.0.1)
|
22
|
-
Requires-Dist: cloudpickle (>=
|
22
|
+
Requires-Dist: cloudpickle (>=3.0.0,<3.1.0)
|
23
23
|
Requires-Dist: clusterfutures (>=0.5,<0.6)
|
24
|
-
Requires-Dist: fastapi (>=0.
|
24
|
+
Requires-Dist: fastapi (>=0.110.0,<0.111.0)
|
25
25
|
Requires-Dist: fastapi-users[oauth] (>=12.1.0,<13.0.0)
|
26
26
|
Requires-Dist: gunicorn (>=21.2.0,<22.0.0) ; extra == "gunicorn"
|
27
27
|
Requires-Dist: packaging (>=23.2,<24.0)
|
28
28
|
Requires-Dist: psycopg2 (>=2.9.5,<3.0.0) ; extra == "postgres"
|
29
29
|
Requires-Dist: pydantic (>=1.10.8,<2)
|
30
|
-
Requires-Dist: python-dotenv (>=0.
|
30
|
+
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
|
31
31
|
Requires-Dist: sqlalchemy[asyncio] (>=2.0.23,<2.1)
|
32
|
-
Requires-Dist: sqlmodel (>=0.0.
|
33
|
-
Requires-Dist: uvicorn (>=0.
|
32
|
+
Requires-Dist: sqlmodel (>=0.0.16,<0.0.17)
|
33
|
+
Requires-Dist: uvicorn (>=0.29.0,<0.30.0)
|
34
34
|
Project-URL: Changelog, https://github.com/fractal-analytics-platform/fractal-server/blob/main/CHANGELOG.md
|
35
35
|
Project-URL: Documentation, https://fractal-analytics-platform.github.io/fractal-server
|
36
36
|
Project-URL: Repository, https://github.com/fractal-analytics-platform/fractal-server
|
@@ -0,0 +1 @@
|
|
1
|
+
__VERSION__ = "2.0.0a4"
|
@@ -12,6 +12,7 @@ from fastapi import HTTPException
|
|
12
12
|
from fastapi import Response
|
13
13
|
from fastapi import status
|
14
14
|
from fastapi.responses import StreamingResponse
|
15
|
+
from pydantic import BaseModel
|
15
16
|
from sqlmodel import select
|
16
17
|
|
17
18
|
from ....config import get_settings
|
@@ -27,6 +28,7 @@ from ...models.v2 import ProjectV2
|
|
27
28
|
from ...runner.filenames import WORKFLOW_LOG_FILENAME
|
28
29
|
from ...schemas.v2 import JobReadV2
|
29
30
|
from ...schemas.v2 import JobUpdateV2
|
31
|
+
from ...schemas.v2 import ProjectReadV2
|
30
32
|
from ...security import current_active_superuser
|
31
33
|
from ..aux._job import _write_shutdown_file
|
32
34
|
from ..aux._job import _zip_folder_to_byte_stream
|
@@ -52,6 +54,35 @@ def _convert_to_db_timestamp(dt: datetime) -> datetime:
|
|
52
54
|
return _dt
|
53
55
|
|
54
56
|
|
57
|
+
@router_admin_v2.get("/project/", response_model=list[ProjectReadV2])
|
58
|
+
async def view_project(
|
59
|
+
id: Optional[int] = None,
|
60
|
+
user_id: Optional[int] = None,
|
61
|
+
user: User = Depends(current_active_superuser),
|
62
|
+
db: AsyncSession = Depends(get_async_db),
|
63
|
+
) -> list[ProjectReadV2]:
|
64
|
+
"""
|
65
|
+
Query `ProjectV2` table.
|
66
|
+
|
67
|
+
Args:
|
68
|
+
id: If not `None`, select a given `project.id`.
|
69
|
+
user_id: If not `None`, select a given `project.user_id`.
|
70
|
+
"""
|
71
|
+
|
72
|
+
stm = select(ProjectV2)
|
73
|
+
|
74
|
+
if id is not None:
|
75
|
+
stm = stm.where(ProjectV2.id == id)
|
76
|
+
if user_id is not None:
|
77
|
+
stm = stm.where(ProjectV2.user_list.any(User.id == user_id))
|
78
|
+
|
79
|
+
res = await db.execute(stm)
|
80
|
+
project_list = res.scalars().all()
|
81
|
+
await db.close()
|
82
|
+
|
83
|
+
return project_list
|
84
|
+
|
85
|
+
|
55
86
|
@router_admin_v2.get("/job/", response_model=list[JobReadV2])
|
56
87
|
async def view_job(
|
57
88
|
id: Optional[int] = None,
|
@@ -249,13 +280,17 @@ async def download_job_logs(
|
|
249
280
|
)
|
250
281
|
|
251
282
|
|
283
|
+
class TaskCompatibility(BaseModel):
|
284
|
+
is_v2_compatible: bool
|
285
|
+
|
286
|
+
|
252
287
|
@router_admin_v2.patch(
|
253
288
|
"/task-v1/{task_id}/",
|
254
289
|
status_code=status.HTTP_200_OK,
|
255
290
|
)
|
256
291
|
async def flag_task_v1_as_v2_compatible(
|
257
292
|
task_id: int,
|
258
|
-
|
293
|
+
compatibility: TaskCompatibility,
|
259
294
|
user: User = Depends(current_active_superuser),
|
260
295
|
db: AsyncSession = Depends(get_async_db),
|
261
296
|
) -> Response:
|
@@ -267,7 +302,7 @@ async def flag_task_v1_as_v2_compatible(
|
|
267
302
|
detail=f"Task {task_id} not found",
|
268
303
|
)
|
269
304
|
|
270
|
-
task.is_v2_compatible = is_v2_compatible
|
305
|
+
task.is_v2_compatible = compatibility.is_v2_compatible
|
271
306
|
await db.commit()
|
272
307
|
await db.close()
|
273
308
|
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/__init__.py
RENAMED
@@ -19,7 +19,7 @@ router_api_v2.include_router(dataset_router_v2, tags=["V2 Dataset"])
|
|
19
19
|
router_api_v2.include_router(job_router_v2, tags=["V2 Job"])
|
20
20
|
router_api_v2.include_router(images_routes_v2, tags=["V2 Images"])
|
21
21
|
router_api_v2.include_router(project_router_v2, tags=["V2 Project"])
|
22
|
-
router_api_v2.include_router(submit_job_router_v2, tags=["V2
|
22
|
+
router_api_v2.include_router(submit_job_router_v2, tags=["V2 Job"])
|
23
23
|
router_api_v2.include_router(task_router_v2, prefix="/task", tags=["V2 Task"])
|
24
24
|
router_api_v2.include_router(
|
25
25
|
task_collection_router_v2, prefix="/task", tags=["V2 Task Collection"]
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/_aux_functions.py
RENAMED
@@ -8,6 +8,7 @@ from typing import Union
|
|
8
8
|
|
9
9
|
from fastapi import HTTPException
|
10
10
|
from fastapi import status
|
11
|
+
from sqlalchemy.orm.attributes import flag_modified
|
11
12
|
from sqlmodel import select
|
12
13
|
from sqlmodel.sql.expression import SelectOfScalar
|
13
14
|
|
@@ -38,7 +39,6 @@ async def _get_project_check_owner(
|
|
38
39
|
project_id:
|
39
40
|
user_id:
|
40
41
|
db:
|
41
|
-
version:
|
42
42
|
|
43
43
|
Returns:
|
44
44
|
The project object
|
@@ -381,8 +381,8 @@ async def _get_task_check_owner(
|
|
381
381
|
def _get_submitted_jobs_statement() -> SelectOfScalar:
|
382
382
|
"""
|
383
383
|
Returns:
|
384
|
-
A sqlmodel statement that selects all `
|
385
|
-
`
|
384
|
+
A sqlmodel statement that selects all `Job`s with
|
385
|
+
`Job.status` equal to `submitted`.
|
386
386
|
"""
|
387
387
|
stm = select(JobV2).where(JobV2.status == JobStatusTypeV1.SUBMITTED)
|
388
388
|
return stm
|
@@ -405,11 +405,16 @@ async def _workflow_insert_task(
|
|
405
405
|
Insert a new WorkflowTask into Workflow.task_list
|
406
406
|
|
407
407
|
Args:
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
order:
|
412
|
-
|
408
|
+
workflow_id:
|
409
|
+
task_id:
|
410
|
+
is_legacy_task:
|
411
|
+
order:
|
412
|
+
meta_parallel:
|
413
|
+
meta_non_parallel:
|
414
|
+
args_non_parallel:
|
415
|
+
args_parallel:
|
416
|
+
input_filters:
|
417
|
+
db:
|
413
418
|
"""
|
414
419
|
db_workflow = await db.get(WorkflowV2, workflow_id)
|
415
420
|
if db_workflow is None:
|
@@ -488,9 +493,9 @@ async def _workflow_insert_task(
|
|
488
493
|
meta_non_parallel=final_meta_non_parallel,
|
489
494
|
**input_filters_kwarg,
|
490
495
|
)
|
491
|
-
db.add(wf_task)
|
492
496
|
db_workflow.task_list.insert(order, wf_task)
|
493
497
|
db_workflow.task_list.reorder() # type: ignore
|
498
|
+
flag_modified(db_workflow, "task_list")
|
494
499
|
await db.commit()
|
495
500
|
await db.refresh(wf_task)
|
496
501
|
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/images.py
RENAMED
@@ -35,7 +35,7 @@ class ImagePage(BaseModel):
|
|
35
35
|
|
36
36
|
|
37
37
|
class ImageQuery(BaseModel):
|
38
|
-
|
38
|
+
zarr_url: Optional[str]
|
39
39
|
filters: Filters = Field(default_factory=Filters)
|
40
40
|
|
41
41
|
|
@@ -56,11 +56,11 @@ async def post_new_image(
|
|
56
56
|
)
|
57
57
|
dataset = output["dataset"]
|
58
58
|
|
59
|
-
if new_image.
|
59
|
+
if new_image.zarr_url in dataset.image_zarr_urls:
|
60
60
|
raise HTTPException(
|
61
61
|
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
62
62
|
detail=(
|
63
|
-
f"Image with
|
63
|
+
f"Image with zarr_url '{new_image.zarr_url}' "
|
64
64
|
f"already in DatasetV2 {dataset_id}",
|
65
65
|
),
|
66
66
|
)
|
@@ -121,9 +121,13 @@ async def query_dataset_images(
|
|
121
121
|
|
122
122
|
if query is not None:
|
123
123
|
|
124
|
-
if query.
|
124
|
+
if query.zarr_url is not None:
|
125
125
|
image = next(
|
126
|
-
(
|
126
|
+
(
|
127
|
+
image
|
128
|
+
for image in images
|
129
|
+
if image["zarr_url"] == query.zarr_url
|
130
|
+
),
|
127
131
|
None,
|
128
132
|
)
|
129
133
|
if image is None:
|
@@ -180,7 +184,7 @@ async def query_dataset_images(
|
|
180
184
|
async def delete_dataset_images(
|
181
185
|
project_id: int,
|
182
186
|
dataset_id: int,
|
183
|
-
|
187
|
+
zarr_url: str,
|
184
188
|
user: User = Depends(current_active_user),
|
185
189
|
db: AsyncSession = Depends(get_async_db),
|
186
190
|
) -> Response:
|
@@ -191,12 +195,16 @@ async def delete_dataset_images(
|
|
191
195
|
dataset = output["dataset"]
|
192
196
|
|
193
197
|
image_to_remove = next(
|
194
|
-
(image for image in dataset.images if image["
|
198
|
+
(image for image in dataset.images if image["zarr_url"] == zarr_url),
|
199
|
+
None,
|
195
200
|
)
|
196
201
|
if image_to_remove is None:
|
197
202
|
raise HTTPException(
|
198
203
|
status_code=status.HTTP_404_NOT_FOUND,
|
199
|
-
detail=
|
204
|
+
detail=(
|
205
|
+
f"No image with zarr_url '{zarr_url}' in "
|
206
|
+
f"DatasetV2 {dataset_id}."
|
207
|
+
),
|
200
208
|
)
|
201
209
|
|
202
210
|
dataset.images.remove(image_to_remove)
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/project.py
RENAMED
@@ -169,7 +169,6 @@ async def delete_project(
|
|
169
169
|
job.workflow_id = None
|
170
170
|
# Delete workflow
|
171
171
|
await db.delete(wf)
|
172
|
-
await db.commit()
|
173
172
|
|
174
173
|
# Dataset
|
175
174
|
stm = select(DatasetV2).where(DatasetV2.project_id == project_id)
|
@@ -185,7 +184,6 @@ async def delete_project(
|
|
185
184
|
job.dataset_id = None
|
186
185
|
# Delete dataset
|
187
186
|
await db.delete(ds)
|
188
|
-
await db.commit()
|
189
187
|
|
190
188
|
# Job
|
191
189
|
stm = select(JobV2).where(JobV2.project_id == project_id)
|
@@ -194,8 +192,6 @@ async def delete_project(
|
|
194
192
|
for job in jobs:
|
195
193
|
job.project_id = None
|
196
194
|
|
197
|
-
await db.commit()
|
198
|
-
|
199
195
|
await db.delete(project)
|
200
196
|
await db.commit()
|
201
197
|
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/submit.py
RENAMED
@@ -148,7 +148,7 @@ async def apply_workflow(
|
|
148
148
|
if len(user.slurm_accounts) > 0:
|
149
149
|
job_create.slurm_account = user.slurm_accounts[0]
|
150
150
|
|
151
|
-
# Add new
|
151
|
+
# Add new Job object to DB
|
152
152
|
job = JobV2(
|
153
153
|
project_id=project_id,
|
154
154
|
dataset_id=dataset_id,
|
@@ -192,9 +192,8 @@ async def apply_workflow(
|
|
192
192
|
raise HTTPException(
|
193
193
|
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
|
194
194
|
detail=(
|
195
|
-
f"The endpoint 'POST /api/v2/project/{project_id}/
|
196
|
-
|
197
|
-
"was called several times within an interval of less "
|
195
|
+
f"The endpoint 'POST /api/v2/project/{project_id}/job/submit/'"
|
196
|
+
" was called several times within an interval of less "
|
198
197
|
f"than {settings.FRACTAL_API_SUBMIT_RATE_LIMIT} seconds, using"
|
199
198
|
" the same foreign keys. If it was intentional, please wait "
|
200
199
|
"and try again."
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/workflow.py
RENAMED
@@ -16,7 +16,6 @@ from ....models.v2 import JobV2
|
|
16
16
|
from ....models.v2 import ProjectV2
|
17
17
|
from ....models.v2 import TaskV2
|
18
18
|
from ....models.v2 import WorkflowV2
|
19
|
-
from ....schemas.v1 import WorkflowTaskCreateV1
|
20
19
|
from ....schemas.v2 import WorkflowCreateV2
|
21
20
|
from ....schemas.v2 import WorkflowExportV2
|
22
21
|
from ....schemas.v2 import WorkflowImportV2
|
@@ -213,7 +212,6 @@ async def delete_workflow(
|
|
213
212
|
jobs = res.scalars().all()
|
214
213
|
for job in jobs:
|
215
214
|
job.workflow_id = None
|
216
|
-
await db.commit()
|
217
215
|
|
218
216
|
# Delete workflow
|
219
217
|
await db.delete(workflow)
|
@@ -341,40 +339,25 @@ async def import_workflow(
|
|
341
339
|
await db.refresh(db_workflow)
|
342
340
|
|
343
341
|
# Insert tasks
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
else:
|
364
|
-
# Identify task_id
|
365
|
-
source = wf_task.task.source
|
366
|
-
task_id = source_to_id[source]
|
367
|
-
# Prepare new_wf_task
|
368
|
-
new_wf_task = WorkflowTaskCreateV2(
|
369
|
-
**wf_task.dict(exclude_none=True)
|
370
|
-
)
|
371
|
-
# Insert task
|
372
|
-
await _workflow_insert_task(
|
373
|
-
**new_wf_task.dict(),
|
374
|
-
workflow_id=db_workflow.id,
|
375
|
-
task_id=task_id,
|
376
|
-
db=db,
|
377
|
-
)
|
342
|
+
|
343
|
+
for wf_task in workflow.task_list:
|
344
|
+
if wf_task.is_legacy_task is True:
|
345
|
+
source = wf_task.task_legacy.source
|
346
|
+
task_id = source_to_id_legacy[source]
|
347
|
+
else:
|
348
|
+
source = wf_task.task.source
|
349
|
+
task_id = source_to_id[source]
|
350
|
+
|
351
|
+
new_wf_task = WorkflowTaskCreateV2(
|
352
|
+
**wf_task.dict(exclude_none=True, exclude={"task", "task_legacy"})
|
353
|
+
)
|
354
|
+
# Insert task
|
355
|
+
await _workflow_insert_task(
|
356
|
+
**new_wf_task.dict(),
|
357
|
+
workflow_id=db_workflow.id,
|
358
|
+
task_id=task_id,
|
359
|
+
db=db,
|
360
|
+
)
|
378
361
|
|
379
362
|
await db.close()
|
380
363
|
return db_workflow
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/routes/api/v2/workflowtask.py
RENAMED
@@ -91,19 +91,18 @@ async def create_workflowtask(
|
|
91
91
|
),
|
92
92
|
)
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
)
|
94
|
+
workflow_task = await _workflow_insert_task(
|
95
|
+
workflow_id=workflow.id,
|
96
|
+
is_legacy_task=new_task.is_legacy_task,
|
97
|
+
task_id=task_id,
|
98
|
+
order=new_task.order,
|
99
|
+
meta_non_parallel=new_task.meta_non_parallel,
|
100
|
+
meta_parallel=new_task.meta_parallel,
|
101
|
+
args_non_parallel=new_task.args_non_parallel,
|
102
|
+
args_parallel=new_task.args_parallel,
|
103
|
+
input_filters=new_task.input_filters,
|
104
|
+
db=db,
|
105
|
+
)
|
107
106
|
|
108
107
|
await db.close()
|
109
108
|
|
@@ -212,17 +211,8 @@ async def update_workflowtask(
|
|
212
211
|
if not actual_args:
|
213
212
|
actual_args = None
|
214
213
|
setattr(db_wf_task, key, actual_args)
|
215
|
-
elif key
|
216
|
-
|
217
|
-
current_meta_parallel.update(value)
|
218
|
-
setattr(db_wf_task, key, current_meta_parallel)
|
219
|
-
elif key == "meta_non_parallel":
|
220
|
-
current_meta_non_parallel = (
|
221
|
-
deepcopy(db_wf_task.meta_non_parallel) or {}
|
222
|
-
)
|
223
|
-
current_meta_non_parallel.update(value)
|
224
|
-
setattr(db_wf_task, key, current_meta_non_parallel)
|
225
|
-
# FIXME handle `input_filters`
|
214
|
+
elif key in ["meta_parallel", "meta_non_parallel", "input_filters"]:
|
215
|
+
setattr(db_wf_task, key, value)
|
226
216
|
else:
|
227
217
|
raise HTTPException(
|
228
218
|
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
File without changes
|
File without changes
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_local/__init__.py
RENAMED
@@ -49,7 +49,8 @@ def _process_workflow(
|
|
49
49
|
|
50
50
|
Schedules the workflow using a `FractalThreadPoolExecutor`.
|
51
51
|
|
52
|
-
Cf.
|
52
|
+
Cf.
|
53
|
+
[process_workflow][fractal_server.app.runner.v1._local.process_workflow]
|
53
54
|
for the call signature.
|
54
55
|
"""
|
55
56
|
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v1/_slurm/__init__.py
RENAMED
@@ -66,7 +66,8 @@ def _process_workflow(
|
|
66
66
|
workflow working dir and user to impersonate. It then schedules the
|
67
67
|
workflow tasks and returns the output dataset metadata.
|
68
68
|
|
69
|
-
Cf.
|
69
|
+
Cf.
|
70
|
+
[process_workflow][fractal_server.app.runner.v1._local.process_workflow]
|
70
71
|
|
71
72
|
Returns:
|
72
73
|
output_dataset_metadata: Metadata of the output dataset
|
@@ -132,7 +133,8 @@ async def process_workflow(
|
|
132
133
|
"""
|
133
134
|
Process workflow (SLURM backend public interface)
|
134
135
|
|
135
|
-
Cf.
|
136
|
+
Cf.
|
137
|
+
[process_workflow][fractal_server.app.runner.v1._local.process_workflow]
|
136
138
|
"""
|
137
139
|
|
138
140
|
# Set values of first_task_index and last_task_index
|
@@ -12,7 +12,7 @@
|
|
12
12
|
"""
|
13
13
|
Submodule to define _slurm_submit_setup, which is also the reference
|
14
14
|
implementation of `submit_setup_call` in
|
15
|
-
[fractal_server.app.runner._common][]).
|
15
|
+
[fractal_server.app.runner.v1._common][]).
|
16
16
|
"""
|
17
17
|
from pathlib import Path
|
18
18
|
|
@@ -38,7 +38,7 @@ def _slurm_submit_setup(
|
|
38
38
|
|
39
39
|
For now, this is the reference implementation for the argument
|
40
40
|
`submit_setup_call` of
|
41
|
-
[fractal_server.app.runner._common.execute_tasks][].
|
41
|
+
[fractal_server.app.runner.v1._common.execute_tasks][].
|
42
42
|
|
43
43
|
Arguments:
|
44
44
|
wftask:
|
@@ -248,7 +248,7 @@ async def submit_workflow(
|
|
248
248
|
job,
|
249
249
|
dataset,
|
250
250
|
workflow,
|
251
|
-
|
251
|
+
logger_name=logger_name,
|
252
252
|
failed_wftask=failed_wftask,
|
253
253
|
)
|
254
254
|
latest_filters = assemble_filters_failed_job(job)
|
@@ -283,7 +283,7 @@ async def submit_workflow(
|
|
283
283
|
job,
|
284
284
|
dataset,
|
285
285
|
workflow,
|
286
|
-
|
286
|
+
logger_name=logger_name,
|
287
287
|
)
|
288
288
|
latest_filters = assemble_filters_failed_job(job)
|
289
289
|
if latest_filters is not None:
|
@@ -313,7 +313,7 @@ async def submit_workflow(
|
|
313
313
|
job,
|
314
314
|
dataset,
|
315
315
|
workflow,
|
316
|
-
|
316
|
+
logger_name=logger_name,
|
317
317
|
)
|
318
318
|
latest_filters = assemble_filters_failed_job(job)
|
319
319
|
if latest_filters is not None:
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_local/__init__.py
RENAMED
@@ -45,7 +45,8 @@ def _process_workflow(
|
|
45
45
|
|
46
46
|
Schedules the workflow using a `FractalThreadPoolExecutor`.
|
47
47
|
|
48
|
-
Cf.
|
48
|
+
Cf.
|
49
|
+
[process_workflow][fractal_server.app.runner.v2._local.process_workflow]
|
49
50
|
for the call signature.
|
50
51
|
"""
|
51
52
|
|
@@ -91,21 +92,21 @@ async def process_workflow(
|
|
91
92
|
Args:
|
92
93
|
workflow:
|
93
94
|
The workflow to be run
|
94
|
-
|
95
|
-
|
96
|
-
workflow
|
97
|
-
output_path:
|
98
|
-
The destination path for the last task of the workflow
|
99
|
-
input_metadata:
|
100
|
-
Initial metadata, passed to the first task
|
101
|
-
logger_name:
|
102
|
-
Name of the logger to log information on the run to
|
95
|
+
dataset:
|
96
|
+
Initial dataset.
|
103
97
|
workflow_dir:
|
104
98
|
Working directory for this run.
|
105
99
|
workflow_dir_user:
|
106
100
|
Working directory for this run, on the user side. This argument is
|
107
101
|
present for compatibility with the standard backend interface, but
|
108
102
|
for the `local` backend it cannot be different from `workflow_dir`.
|
103
|
+
first_task_index:
|
104
|
+
Positional index of the first task to execute; if `None`, start
|
105
|
+
from `0`.
|
106
|
+
last_task_index:
|
107
|
+
Positional index of the last task to execute; if `None`, proceed
|
108
|
+
until the last task.
|
109
|
+
logger_name: Logger name
|
109
110
|
slurm_user:
|
110
111
|
Username to impersonate to run the workflow. This argument is
|
111
112
|
present for compatibility with the standard backend interface, but
|
@@ -123,12 +124,6 @@ async def process_workflow(
|
|
123
124
|
to the backend executor. This argument is present for compatibility
|
124
125
|
with the standard backend interface, but is ignored in the `local`
|
125
126
|
backend.
|
126
|
-
first_task_index:
|
127
|
-
Positional index of the first task to execute; if `None`, start
|
128
|
-
from `0`.
|
129
|
-
last_task_index:
|
130
|
-
Positional index of the last task to execute; if `None`, proceed
|
131
|
-
until the last task.
|
132
127
|
|
133
128
|
Raises:
|
134
129
|
TaskExecutionError: wrapper for errors raised during tasks' execution
|
{fractal_server-2.0.0a2 → fractal_server-2.0.0a4}/fractal_server/app/runner/v2/_slurm/__init__.py
RENAMED
@@ -56,7 +56,8 @@ def _process_workflow(
|
|
56
56
|
workflow working dir and user to impersonate. It then schedules the
|
57
57
|
workflow tasks and returns the new dataset attributes
|
58
58
|
|
59
|
-
Cf.
|
59
|
+
Cf.
|
60
|
+
[process_workflow][fractal_server.app.runner.v2._local.process_workflow]
|
60
61
|
|
61
62
|
Returns:
|
62
63
|
new_dataset_attributes:
|
@@ -112,7 +113,8 @@ async def process_workflow(
|
|
112
113
|
"""
|
113
114
|
Process workflow (SLURM backend public interface)
|
114
115
|
|
115
|
-
Cf.
|
116
|
+
Cf.
|
117
|
+
[process_workflow][fractal_server.app.runner.v2._local.process_workflow]
|
116
118
|
"""
|
117
119
|
|
118
120
|
# Set values of first_task_index and last_task_index
|
@@ -11,8 +11,7 @@
|
|
11
11
|
# Zurich.
|
12
12
|
"""
|
13
13
|
Submodule to define _slurm_submit_setup, which is also the reference
|
14
|
-
implementation of `submit_setup_call
|
15
|
-
[fractal_server.app.runner._common][]).
|
14
|
+
implementation of `submit_setup_call`.
|
16
15
|
"""
|
17
16
|
from pathlib import Path
|
18
17
|
from typing import Literal
|
@@ -40,7 +39,7 @@ def _slurm_submit_setup(
|
|
40
39
|
|
41
40
|
For now, this is the reference implementation for the argument
|
42
41
|
`submit_setup_call` of
|
43
|
-
[fractal_server.app.runner.
|
42
|
+
[fractal_server.app.runner.v2.runner][].
|
44
43
|
|
45
44
|
Arguments:
|
46
45
|
wftask:
|