fractal-server 2.4.0a1__tar.gz → 2.4.1__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.4.0a1 → fractal_server-2.4.1}/PKG-INFO +1 -1
- fractal_server-2.4.1/fractal_server/__init__.py +1 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/group.py +18 -1
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/users.py +25 -1
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/user.py +4 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/user_group.py +8 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/pyproject.toml +2 -2
- fractal_server-2.4.0a1/fractal_server/__init__.py +0 -1
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/LICENSE +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/README.md +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/__main__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/alembic.ini +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/db/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/linkusergroup.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/linkuserproject.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/security.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v1/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v1/dataset.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v1/job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v1/project.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v1/state.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v1/task.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v1/workflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/collection_state.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/dataset.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/project.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/task.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/workflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/workflowtask.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/admin/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/admin/v1.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/admin/v2.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/dataset.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/project.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/task.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/workflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/dataset.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/images.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/project.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/status.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/submit.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/task.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/task_legacy.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/workflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/current_user.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/group_names.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/login.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/oauth.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/register.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/router.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/aux/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/aux/_job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/aux/_runner.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/.gitignore +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/async_wrap.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/components.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/compress_folder.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/exceptions.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/ssh/executor.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/sudo/executor.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/extract_archive.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/filenames.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/run_subprocess.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/shutdown.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/task_files.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_common.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/executor.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_slurm/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/common.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/executor.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_common/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_sudo/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/runner.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/runner_functions.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/task_interface.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/v1_compat.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/versions.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/_validators.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/dataset.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/dumps.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/manifest.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/project.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/state.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/task.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/task_collection.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/workflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/dataset.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/dumps.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/job.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/manifest.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/project.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/status.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/task.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/task_collection.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/workflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/security/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/config.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/data_migrations/2_4_0.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/data_migrations/README.md +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/gunicorn_fractal.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/images/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/images/models.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/images/tools.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/logger.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/main.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/README +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/env.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/script.py.mako +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/py.typed +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/ssh/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/ssh/_fabric.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/string_tools.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/syringe.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/utils.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/background_operations.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/endpoint_operations.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/get_collection_data.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/utils.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/_TaskCollectPip.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/__init__.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/_venv_pip.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/background_operations.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/background_operations_ssh.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/endpoint_operations.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_1_create_venv.sh +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_2_upgrade_pip.sh +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_3_pip_install.sh +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_4_pip_freeze.sh +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_5_pip_show.sh +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/utils.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/urls.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/utils.py +0 -0
- {fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/zip_tools.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__VERSION__ = "2.4.1"
|
@@ -5,6 +5,7 @@ from fastapi import APIRouter
|
|
5
5
|
from fastapi import Depends
|
6
6
|
from fastapi import HTTPException
|
7
7
|
from fastapi import status
|
8
|
+
from sqlalchemy.exc import IntegrityError
|
8
9
|
from sqlalchemy.ext.asyncio import AsyncSession
|
9
10
|
from sqlmodel import col
|
10
11
|
from sqlmodel import func
|
@@ -19,6 +20,9 @@ from ._aux_auth import _get_single_group_with_user_ids
|
|
19
20
|
from fractal_server.app.models import LinkUserGroup
|
20
21
|
from fractal_server.app.models import UserGroup
|
21
22
|
from fractal_server.app.models import UserOAuth
|
23
|
+
from fractal_server.logger import set_logger
|
24
|
+
|
25
|
+
logger = set_logger(__name__)
|
22
26
|
|
23
27
|
router_group = APIRouter()
|
24
28
|
|
@@ -133,7 +137,20 @@ async def update_single_group(
|
|
133
137
|
for user_id in group_update.new_user_ids:
|
134
138
|
link = LinkUserGroup(user_id=user_id, group_id=group_id)
|
135
139
|
db.add(link)
|
136
|
-
|
140
|
+
try:
|
141
|
+
await db.commit()
|
142
|
+
except IntegrityError as e:
|
143
|
+
error_msg = (
|
144
|
+
f"Cannot link users with IDs {group_update.new_user_ids} "
|
145
|
+
f"to group {group_id}. "
|
146
|
+
"Likely reason: one of these links already exists.\n"
|
147
|
+
f"Original error: {str(e)}"
|
148
|
+
)
|
149
|
+
logger.info(error_msg)
|
150
|
+
raise HTTPException(
|
151
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
152
|
+
detail=error_msg,
|
153
|
+
)
|
137
154
|
|
138
155
|
updated_group = await _get_single_group_with_user_ids(
|
139
156
|
group_id=group_id, db=db
|
@@ -8,6 +8,7 @@ from fastapi import status
|
|
8
8
|
from fastapi_users import exceptions
|
9
9
|
from fastapi_users import schemas
|
10
10
|
from fastapi_users.router.common import ErrorCode
|
11
|
+
from sqlalchemy.exc import IntegrityError
|
11
12
|
from sqlalchemy.ext.asyncio import AsyncSession
|
12
13
|
from sqlmodel import col
|
13
14
|
from sqlmodel import func
|
@@ -25,10 +26,14 @@ from fractal_server.app.models import UserOAuth
|
|
25
26
|
from fractal_server.app.routes.auth._aux_auth import _user_or_404
|
26
27
|
from fractal_server.app.security import get_user_manager
|
27
28
|
from fractal_server.app.security import UserManager
|
29
|
+
from fractal_server.logger import set_logger
|
28
30
|
|
29
31
|
router_users = APIRouter()
|
30
32
|
|
31
33
|
|
34
|
+
logger = set_logger(__name__)
|
35
|
+
|
36
|
+
|
32
37
|
@router_users.get("/users/{user_id}/", response_model=UserRead)
|
33
38
|
async def get_user(
|
34
39
|
user_id: int,
|
@@ -107,7 +112,21 @@ async def patch_user(
|
|
107
112
|
for new_group_id in user_update.new_group_ids:
|
108
113
|
link = LinkUserGroup(user_id=user_id, group_id=new_group_id)
|
109
114
|
db.add(link)
|
110
|
-
|
115
|
+
|
116
|
+
try:
|
117
|
+
await db.commit()
|
118
|
+
except IntegrityError as e:
|
119
|
+
error_msg = (
|
120
|
+
f"Cannot link groups with IDs {user_update.new_group_ids} "
|
121
|
+
f"to user {user_id}. "
|
122
|
+
"Likely reason: one of these links already exists.\n"
|
123
|
+
f"Original error: {str(e)}"
|
124
|
+
)
|
125
|
+
logger.info(error_msg)
|
126
|
+
raise HTTPException(
|
127
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
128
|
+
detail=error_msg,
|
129
|
+
)
|
111
130
|
|
112
131
|
patched_user = user_to_patch
|
113
132
|
|
@@ -132,6 +151,11 @@ async def patch_user(
|
|
132
151
|
"reason": e.reason,
|
133
152
|
},
|
134
153
|
)
|
154
|
+
except exceptions.UserAlreadyExists:
|
155
|
+
raise HTTPException(
|
156
|
+
status.HTTP_400_BAD_REQUEST,
|
157
|
+
detail=ErrorCode.UPDATE_USER_EMAIL_ALREADY_EXISTS,
|
158
|
+
)
|
135
159
|
else:
|
136
160
|
# Nothing to do, just continue
|
137
161
|
patched_user = user_to_patch
|
@@ -106,6 +106,10 @@ class UserUpdateStrict(BaseModel, extra=Extra.forbid):
|
|
106
106
|
class UserUpdateWithNewGroupIds(UserUpdate):
|
107
107
|
new_group_ids: Optional[list[int]] = None
|
108
108
|
|
109
|
+
_val_unique = validator("new_group_ids", allow_reuse=True)(
|
110
|
+
val_unique_list("new_group_ids")
|
111
|
+
)
|
112
|
+
|
109
113
|
|
110
114
|
class UserCreate(schemas.BaseUserCreate):
|
111
115
|
"""
|
@@ -4,6 +4,10 @@ from typing import Optional
|
|
4
4
|
from pydantic import BaseModel
|
5
5
|
from pydantic import Extra
|
6
6
|
from pydantic import Field
|
7
|
+
from pydantic import validator
|
8
|
+
|
9
|
+
from ._validators import val_unique_list
|
10
|
+
|
7
11
|
|
8
12
|
__all__ = (
|
9
13
|
"UserGroupRead",
|
@@ -55,3 +59,7 @@ class UserGroupUpdate(BaseModel, extra=Extra.forbid):
|
|
55
59
|
"""
|
56
60
|
|
57
61
|
new_user_ids: list[int] = Field(default_factory=list)
|
62
|
+
|
63
|
+
_val_unique = validator("new_user_ids", allow_reuse=True)(
|
64
|
+
val_unique_list("new_user_ids")
|
65
|
+
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "fractal-server"
|
3
|
-
version = "2.4.
|
3
|
+
version = "2.4.1"
|
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.4.
|
95
|
+
current_version = "2.4.1"
|
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.4.0a1"
|
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.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/linkuserproject.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
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/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
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/models/v2/workflowtask.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/__init__.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/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.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/task_collection.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/workflow.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v1/workflowtask.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/__init__.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/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
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/task_collection.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/task_legacy.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/workflow.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/api/v2/workflowtask.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/current_user.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/routes/auth/group_names.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
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/compress_folder.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/executors/slurm/remote.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
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/extract_archive.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
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/__init__.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/_local_config.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/_submit_setup.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_local/executor.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_slurm/__init__.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/_slurm/_submit_setup.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v1/handle_failed_job.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/__init__.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/_local_config.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/_submit_setup.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_local/executor.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/_slurm_sudo/__init__.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/deduplicate_list.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/handle_failed_job.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/merge_outputs.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/runner_functions.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/runner/v2/task_interface.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/applyworkflow.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v1/task_collection.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
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/task_collection.py
RENAMED
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/app/schemas/v2/workflowtask.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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/background_operations.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/endpoint_operations.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v1/get_collection_data.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/background_operations.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/background_operations_ssh.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/endpoint_operations.py
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_1_create_venv.sh
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_2_upgrade_pip.sh
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_3_pip_install.sh
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_4_pip_freeze.sh
RENAMED
File without changes
|
{fractal_server-2.4.0a1 → fractal_server-2.4.1}/fractal_server/tasks/v2/templates/_5_pip_show.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|