fractal-server 2.14.0a3__tar.gz → 2.14.0a5__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.14.0a3 → fractal_server-2.14.0a5}/PKG-INFO +1 -1
- fractal_server-2.14.0a5/fractal_server/__init__.py +1 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/__main__.py +3 -1
- fractal_server-2.14.0a5/fractal_server/app/history/__init__.py +4 -0
- fractal_server-2.14.0a5/fractal_server/app/history/image_updates.py +124 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/history/status_enum.py +2 -2
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/__init__.py +6 -4
- fractal_server-2.14.0a5/fractal_server/app/models/v2/history.py +77 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/__init__.py +1 -1
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/__init__.py +4 -0
- fractal_server-2.14.0a5/fractal_server/app/routes/api/v2/_aux_functions_history.py +49 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/dataset.py +0 -12
- fractal_server-2.14.0a5/fractal_server/app/routes/api/v2/history.py +428 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/project.py +0 -25
- fractal_server-2.14.0a5/fractal_server/app/routes/api/v2/status_legacy.py +168 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/workflow.py +2 -17
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/workflowtask.py +41 -71
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/oauth.py +5 -3
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/local/runner.py +10 -55
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_sudo/runner.py +171 -108
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/__init__.py +0 -20
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/runner.py +45 -58
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/runner_functions.py +164 -22
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/_validators.py +13 -24
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/user.py +10 -7
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/user_settings.py +9 -21
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/dataset.py +8 -6
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/job.py +9 -5
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/manifest.py +2 -6
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/project.py +9 -7
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/task.py +41 -77
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/task_collection.py +14 -32
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/task_group.py +10 -9
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/workflow.py +10 -11
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/security/signup_email.py +2 -2
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/config.py +31 -32
- fractal_server-2.14.0a5/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +120 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/templates/2_pip_install.sh +1 -1
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/utils_templates.py +6 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/pyproject.toml +3 -3
- fractal_server-2.14.0a3/fractal_server/__init__.py +0 -1
- fractal_server-2.14.0a3/fractal_server/app/history/__init__.py +0 -4
- fractal_server-2.14.0a3/fractal_server/app/history/image_updates.py +0 -143
- fractal_server-2.14.0a3/fractal_server/app/models/v2/history.py +0 -53
- fractal_server-2.14.0a3/fractal_server/app/routes/api/v2/history.py +0 -305
- fractal_server-2.14.0a3/fractal_server/app/runner/executors/slurm_sudo/_executor_wait_thread.py +0 -130
- fractal_server-2.14.0a3/fractal_server/app/schemas/v2/history.py +0 -23
- fractal_server-2.14.0a3/fractal_server/migrations/versions/87cd72a537a2_add_historyitem_table.py +0 -68
- fractal_server-2.14.0a3/fractal_server/migrations/versions/954ddc64425a_image_status.py +0 -63
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/LICENSE +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/README.md +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/alembic.ini +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/db/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/linkusergroup.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/linkuserproject.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/security.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/user_settings.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/accounting.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/dataset.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/job.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/project.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/task.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/task_group.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/workflow.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/workflowtask.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/job.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/project.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/task.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/images.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/job.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/submit.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/task.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/task_group.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/current_user.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/group.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/login.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/register.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/router.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/auth/users.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/aux/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/aux/_job.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/aux/_runner.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/pagination.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/components.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/compress_folder.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/exceptions.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/base_runner.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/local/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/local/_local_config.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/local/_submit_setup.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/_batching.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/_job_states.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/_slurm_config.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/_submit_setup.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/get_slurm_config.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/remote.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_common/utils_executors.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_ssh/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_ssh/_executor_wait_thread.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_ssh/_slurm_job.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_ssh/executor.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_sudo/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_sudo/_check_jobs_status.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/extract_archive.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/filenames.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/run_subprocess.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/shutdown.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/task_files.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/_local.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/_slurm_ssh.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/_slurm_sudo.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/v2/task_interface.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/runner/versions.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/_filter_validators.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/user_group.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/accounting.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/dumps.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/status.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/security/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/user_settings.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/data_migrations/README.md +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/data_migrations/tools.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/gunicorn_fractal.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/images/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/images/models.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/images/tools.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/logger.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/main.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/env.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/naming_convention.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/py.typed +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/ssh/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/ssh/_fabric.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/string_tools.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/syringe.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/utils.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/local/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/local/_utils.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/local/collect.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/local/deactivate.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/local/reactivate.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/ssh/collect.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/utils_background.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/utils_database.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/utils_package_names.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/urls.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/utils.py +0 -0
- {fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/zip_tools.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__VERSION__ = "2.14.0a5"
|
@@ -123,7 +123,9 @@ def set_db(skip_init_data: bool = False):
|
|
123
123
|
asyncio.run(
|
124
124
|
_create_first_user(
|
125
125
|
email=settings.FRACTAL_DEFAULT_ADMIN_EMAIL,
|
126
|
-
password=
|
126
|
+
password=(
|
127
|
+
settings.FRACTAL_DEFAULT_ADMIN_PASSWORD.get_secret_value()
|
128
|
+
),
|
127
129
|
username=settings.FRACTAL_DEFAULT_ADMIN_USERNAME,
|
128
130
|
is_superuser=True,
|
129
131
|
is_verified=True,
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# from typing import Optional
|
2
|
+
# from sqlalchemy.orm import Session
|
3
|
+
# from sqlalchemy.orm.attributes import flag_modified
|
4
|
+
# from sqlmodel import select
|
5
|
+
# from fractal_server.app.db import get_sync_db
|
6
|
+
# from fractal_server.app.history.status_enum import HistoryItemImageStatus
|
7
|
+
# from fractal_server.app.models.v2 import HistoryItemV2
|
8
|
+
# from fractal_server.app.models.v2 import ImageStatus
|
9
|
+
# from fractal_server.logger import set_logger
|
10
|
+
# logger = set_logger(__name__)
|
11
|
+
# def _update_single_image_status(
|
12
|
+
# *,
|
13
|
+
# zarr_url: str,
|
14
|
+
# workflowtask_id: int,
|
15
|
+
# dataset_id: int,
|
16
|
+
# status: HistoryItemImageStatus,
|
17
|
+
# db: Session,
|
18
|
+
# commit: bool = True,
|
19
|
+
# logfile: Optional[str] = None,
|
20
|
+
# ) -> None:
|
21
|
+
# image_status = db.get(
|
22
|
+
# ImageStatus,
|
23
|
+
# (
|
24
|
+
# zarr_url,
|
25
|
+
# workflowtask_id,
|
26
|
+
# dataset_id,
|
27
|
+
# ),
|
28
|
+
# )
|
29
|
+
# if image_status is None:
|
30
|
+
# raise RuntimeError("This should have not happened")
|
31
|
+
# image_status.status = status
|
32
|
+
# if logfile is not None:
|
33
|
+
# image_status.logfile = logfile
|
34
|
+
# db.add(image_status)
|
35
|
+
# if commit:
|
36
|
+
# db.commit()
|
37
|
+
# def update_single_image(
|
38
|
+
# *,
|
39
|
+
# history_item_id: int,
|
40
|
+
# zarr_url: str,
|
41
|
+
# status: HistoryItemImageStatus,
|
42
|
+
# ) -> None:
|
43
|
+
# logger.debug(
|
44
|
+
# f"[update_single_image] {history_item_id=}, {status=}, {zarr_url=}"
|
45
|
+
# )
|
46
|
+
# # Note: thanks to `with_for_update`, a lock is acquired and kept
|
47
|
+
# # until `db.commit()`
|
48
|
+
# with next(get_sync_db()) as db:
|
49
|
+
# stm = (
|
50
|
+
# select(HistoryItemV2)
|
51
|
+
# .where(HistoryItemV2.id == history_item_id)
|
52
|
+
# .with_for_update(nowait=False)
|
53
|
+
# )
|
54
|
+
# history_item = db.execute(stm).scalar_one()
|
55
|
+
# history_item.images[zarr_url] = status
|
56
|
+
# flag_modified(history_item, "images")
|
57
|
+
# db.commit()
|
58
|
+
# _update_single_image_status(
|
59
|
+
# zarr_url=zarr_url,
|
60
|
+
# dataset_id=history_item.dataset_id,
|
61
|
+
# workflowtask_id=history_item.workflowtask_id,
|
62
|
+
# commit=True,
|
63
|
+
# status=status,
|
64
|
+
# db=db,
|
65
|
+
# )
|
66
|
+
# def update_single_image_logfile(
|
67
|
+
# *,
|
68
|
+
# history_item_id: int,
|
69
|
+
# zarr_url: str,
|
70
|
+
# logfile: str,
|
71
|
+
# ) -> None:
|
72
|
+
# logger.debug(
|
73
|
+
# "[update_single_image_logfile] "
|
74
|
+
# f"{history_item_id=}, {logfile=}, {zarr_url=}"
|
75
|
+
# )
|
76
|
+
# with next(get_sync_db()) as db:
|
77
|
+
# history_item = db.get(HistoryItemV2, history_item_id)
|
78
|
+
# image_status = db.get(
|
79
|
+
# ImageStatus,
|
80
|
+
# (
|
81
|
+
# zarr_url,
|
82
|
+
# history_item.workflowtask_id,
|
83
|
+
# history_item.dataset_id,
|
84
|
+
# ),
|
85
|
+
# )
|
86
|
+
# if image_status is None:
|
87
|
+
# raise RuntimeError("This should have not happened")
|
88
|
+
# image_status.logfile = logfile
|
89
|
+
# db.merge(image_status)
|
90
|
+
# db.commit()
|
91
|
+
# def update_all_images(
|
92
|
+
# *,
|
93
|
+
# history_item_id: int,
|
94
|
+
# status: HistoryItemImageStatus,
|
95
|
+
# logfile: Optional[str] = None,
|
96
|
+
# ) -> None:
|
97
|
+
# logger.debug(f"[update_all_images] {history_item_id=}, {status=}")
|
98
|
+
# # Note: thanks to `with_for_update`, a lock is acquired and kept
|
99
|
+
# # until `db.commit()`
|
100
|
+
# stm = (
|
101
|
+
# select(HistoryItemV2)
|
102
|
+
# .where(HistoryItemV2.id == history_item_id)
|
103
|
+
# .with_for_update(nowait=False)
|
104
|
+
# )
|
105
|
+
# with next(get_sync_db()) as db:
|
106
|
+
# history_item = db.execute(stm).scalar_one()
|
107
|
+
# new_images = {
|
108
|
+
# zarr_url: status for zarr_url in history_item.images.keys()
|
109
|
+
# }
|
110
|
+
# history_item.images = new_images
|
111
|
+
# flag_modified(history_item, "images")
|
112
|
+
# db.commit()
|
113
|
+
# # FIXME: Make this a bulk edit, if possible
|
114
|
+
# for ind, zarr_url in enumerate(history_item.images.keys()):
|
115
|
+
# _update_single_image_status(
|
116
|
+
# zarr_url=zarr_url,
|
117
|
+
# dataset_id=history_item.dataset_id,
|
118
|
+
# workflowtask_id=history_item.workflowtask_id,
|
119
|
+
# commit=False,
|
120
|
+
# status=status,
|
121
|
+
# logfile=logfile,
|
122
|
+
# db=db,
|
123
|
+
# )
|
124
|
+
# db.commit()
|
{fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/models/v2/__init__.py
RENAMED
@@ -5,8 +5,9 @@ from ..linkuserproject import LinkUserProjectV2
|
|
5
5
|
from .accounting import AccountingRecord
|
6
6
|
from .accounting import AccountingRecordSlurm
|
7
7
|
from .dataset import DatasetV2
|
8
|
-
from .history import
|
9
|
-
from .history import
|
8
|
+
from .history import HistoryImageCache
|
9
|
+
from .history import HistoryRun
|
10
|
+
from .history import HistoryUnit
|
10
11
|
from .job import JobV2
|
11
12
|
from .project import ProjectV2
|
12
13
|
from .task import TaskV2
|
@@ -27,6 +28,7 @@ __all__ = [
|
|
27
28
|
"TaskV2",
|
28
29
|
"WorkflowV2",
|
29
30
|
"WorkflowTaskV2",
|
30
|
-
"
|
31
|
-
"
|
31
|
+
"HistoryRun",
|
32
|
+
"HistoryUnit",
|
33
|
+
"HistoryImageCache",
|
32
34
|
]
|
@@ -0,0 +1,77 @@
|
|
1
|
+
from datetime import datetime
|
2
|
+
from typing import Any
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from pydantic import ConfigDict
|
6
|
+
from sqlalchemy import Column
|
7
|
+
from sqlalchemy import String
|
8
|
+
from sqlalchemy.dialects.postgresql import ARRAY
|
9
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
10
|
+
from sqlalchemy.types import DateTime
|
11
|
+
from sqlmodel import Field
|
12
|
+
from sqlmodel import SQLModel
|
13
|
+
|
14
|
+
from ....utils import get_timestamp
|
15
|
+
|
16
|
+
|
17
|
+
class HistoryRun(SQLModel, table=True):
|
18
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
19
|
+
|
20
|
+
id: Optional[int] = Field(default=None, primary_key=True)
|
21
|
+
dataset_id: int = Field(
|
22
|
+
foreign_key="datasetv2.id",
|
23
|
+
ondelete="CASCADE",
|
24
|
+
)
|
25
|
+
workflowtask_id: Optional[int] = Field(
|
26
|
+
foreign_key="workflowtaskv2.id",
|
27
|
+
default=None,
|
28
|
+
ondelete="SET NULL",
|
29
|
+
)
|
30
|
+
|
31
|
+
workflowtask_dump: dict[str, Any] = Field(
|
32
|
+
sa_column=Column(JSONB, nullable=False),
|
33
|
+
)
|
34
|
+
task_group_dump: dict[str, Any] = Field(
|
35
|
+
sa_column=Column(JSONB, nullable=False),
|
36
|
+
)
|
37
|
+
|
38
|
+
timestamp_started: datetime = Field(
|
39
|
+
sa_column=Column(DateTime(timezone=True), nullable=False),
|
40
|
+
default_factory=get_timestamp,
|
41
|
+
)
|
42
|
+
status: str
|
43
|
+
num_available_images: int
|
44
|
+
|
45
|
+
|
46
|
+
class HistoryUnit(SQLModel, table=True):
|
47
|
+
id: Optional[int] = Field(default=None, primary_key=True)
|
48
|
+
history_run_id: int = Field(
|
49
|
+
foreign_key="historyrun.id",
|
50
|
+
ondelete="CASCADE",
|
51
|
+
)
|
52
|
+
|
53
|
+
logfile: Optional[str]
|
54
|
+
status: str
|
55
|
+
zarr_urls: list[str] = Field(
|
56
|
+
sa_column=Column(ARRAY(String)),
|
57
|
+
default_factory=list,
|
58
|
+
)
|
59
|
+
|
60
|
+
|
61
|
+
class HistoryImageCache(SQLModel, table=True):
|
62
|
+
zarr_url: str = Field(primary_key=True)
|
63
|
+
dataset_id: int = Field(
|
64
|
+
primary_key=True,
|
65
|
+
foreign_key="datasetv2.id",
|
66
|
+
ondelete="CASCADE",
|
67
|
+
)
|
68
|
+
workflowtask_id: int = Field(
|
69
|
+
primary_key=True,
|
70
|
+
foreign_key="workflowtaskv2.id",
|
71
|
+
ondelete="CASCADE",
|
72
|
+
)
|
73
|
+
|
74
|
+
latest_history_unit_id: int = Field(
|
75
|
+
foreign_key="historyunit.id",
|
76
|
+
ondelete="CASCADE",
|
77
|
+
)
|
{fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/__init__.py
RENAMED
@@ -8,6 +8,7 @@ from .history import router as history_router_v2
|
|
8
8
|
from .images import router as images_routes_v2
|
9
9
|
from .job import router as job_router_v2
|
10
10
|
from .project import router as project_router_v2
|
11
|
+
from .status_legacy import router as status_legacy_router_v2
|
11
12
|
from .submit import router as submit_job_router_v2
|
12
13
|
from .task import router as task_router_v2
|
13
14
|
from .task_collection import router as task_collection_router_v2
|
@@ -29,6 +30,9 @@ router_api_v2.include_router(images_routes_v2, tags=["V2 Images"])
|
|
29
30
|
router_api_v2.include_router(project_router_v2, tags=["V2 Project"])
|
30
31
|
router_api_v2.include_router(submit_job_router_v2, tags=["V2 Job"])
|
31
32
|
router_api_v2.include_router(history_router_v2, tags=["V2 History"])
|
33
|
+
router_api_v2.include_router(
|
34
|
+
status_legacy_router_v2, tags=["V2 Status Legacy"]
|
35
|
+
)
|
32
36
|
|
33
37
|
|
34
38
|
settings = Inject(get_settings)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
|
3
|
+
from fastapi import HTTPException
|
4
|
+
from fastapi import status
|
5
|
+
|
6
|
+
from fractal_server.app.db import AsyncSession
|
7
|
+
from fractal_server.app.models import WorkflowTaskV2
|
8
|
+
from fractal_server.app.models.v2 import HistoryUnit
|
9
|
+
|
10
|
+
|
11
|
+
async def get_history_unit_or_404(
|
12
|
+
*, history_unit_id: int, db: AsyncSession
|
13
|
+
) -> HistoryUnit:
|
14
|
+
"""
|
15
|
+
Get an existing HistoryUnit or raise a 404.
|
16
|
+
|
17
|
+
Arguments:
|
18
|
+
history_unit_id: The `HistoryUnit` id
|
19
|
+
db: An asynchronous db session
|
20
|
+
"""
|
21
|
+
history_unit = await db.get(HistoryUnit, history_unit_id)
|
22
|
+
if history_unit is None:
|
23
|
+
raise HTTPException(
|
24
|
+
status_code=status.HTTP_404_NOT_FOUND,
|
25
|
+
detail=f"HistoryUnit {history_unit_id} not found",
|
26
|
+
)
|
27
|
+
return history_unit
|
28
|
+
|
29
|
+
|
30
|
+
def read_log_file(
|
31
|
+
*,
|
32
|
+
logfile: str | None,
|
33
|
+
wftask: WorkflowTaskV2,
|
34
|
+
dataset_id: int,
|
35
|
+
):
|
36
|
+
if logfile is None or not Path(logfile).exists():
|
37
|
+
return (
|
38
|
+
f"Logs for task '{wftask.task.name}' in dataset "
|
39
|
+
f"{dataset_id} are not available."
|
40
|
+
)
|
41
|
+
|
42
|
+
try:
|
43
|
+
with open(logfile, "r") as f:
|
44
|
+
return f.read()
|
45
|
+
except Exception as e:
|
46
|
+
return (
|
47
|
+
f"Error while retrieving logs for task '{wftask.task.name}' "
|
48
|
+
f"in dataset {dataset_id}. Original error: {str(e)}."
|
49
|
+
)
|
{fractal_server-2.14.0a3 → fractal_server-2.14.0a5}/fractal_server/app/routes/api/v2/dataset.py
RENAMED
@@ -5,14 +5,11 @@ from fastapi import Depends
|
|
5
5
|
from fastapi import HTTPException
|
6
6
|
from fastapi import Response
|
7
7
|
from fastapi import status
|
8
|
-
from sqlmodel import delete
|
9
8
|
from sqlmodel import select
|
10
9
|
|
11
10
|
from ....db import AsyncSession
|
12
11
|
from ....db import get_async_db
|
13
12
|
from ....models.v2 import DatasetV2
|
14
|
-
from ....models.v2 import HistoryItemV2
|
15
|
-
from ....models.v2 import ImageStatus
|
16
13
|
from ....models.v2 import JobV2
|
17
14
|
from ....models.v2 import ProjectV2
|
18
15
|
from ....schemas.v2 import DatasetCreateV2
|
@@ -223,15 +220,6 @@ async def delete_dataset(
|
|
223
220
|
for job in jobs:
|
224
221
|
job.dataset_id = None
|
225
222
|
|
226
|
-
# Cascade operations: delete history items and image status which are in
|
227
|
-
# relationship with the current dataset
|
228
|
-
|
229
|
-
stm = delete(HistoryItemV2).where(HistoryItemV2.dataset_id == dataset_id)
|
230
|
-
await db.execute(stm)
|
231
|
-
|
232
|
-
stm = delete(ImageStatus).where(ImageStatus.dataset_id == dataset_id)
|
233
|
-
await db.execute(stm)
|
234
|
-
|
235
223
|
# Delete dataset
|
236
224
|
await db.delete(dataset)
|
237
225
|
await db.commit()
|