diff --git a/src/murfey/server/api/file_io_frontend.py b/src/murfey/server/api/file_io_frontend.py index 0356859b3..cc9e06f28 100644 --- a/src/murfey/server/api/file_io_frontend.py +++ b/src/murfey/server/api/file_io_frontend.py @@ -1,6 +1,9 @@ from logging import getLogger +from pathlib import Path from fastapi import APIRouter, Depends +from pydantic import BaseModel +from sqlmodel import Session, select from murfey.server.api.auth import ( MurfeySessionIDFrontend as MurfeySessionID, @@ -11,6 +14,7 @@ process_gain as _process_gain, ) from murfey.server.murfey_db import murfey_db +from murfey.util.config import get_machine_config logger = getLogger("murfey.server.api.file_io_frontend") @@ -28,3 +32,27 @@ async def process_gain( ): result = await _process_gain(session_id, gain_reference_params, db) return result + + +class SymlinkParameters(BaseModel): + target: Path # these are the paths without the rsync basepath as that is what the frontend has access to + symlink: Path + override: bool = False + + +@router.post("/sessions/{session_id}/symlink") +async def create_symlink( + session_id: MurfeySessionID, symlink_params: SymlinkParameters, db=murfey_db +) -> str: + murfey_session = db.exec(select(Session).where(Session.id == session_id)).one() + instrument_name = murfey_session.instrument_name + machine_config = get_machine_config(instrument_name=instrument_name)[ + instrument_name + ] + symlink_full_path = machine_config.rsync_basepath / symlink_params.symlink + if symlink_full_path.is_symlink() and symlink_params.override: + symlink_full_path.unlink() + if symlink_full_path.exists(): + return "" + symlink_full_path.symlink_to(symlink_params.target) + return str(symlink_params.symlink) diff --git a/src/murfey/util/route_manifest.yaml b/src/murfey/util/route_manifest.yaml index 409d9589f..1c998a336 100644 --- a/src/murfey/util/route_manifest.yaml +++ b/src/murfey/util/route_manifest.yaml @@ -477,6 +477,13 @@ murfey.server.api.file_io_frontend.router: type: int methods: - POST + - path: /file_io/frontend/sessions/{session_id}/symlink + function: create_symlink + path_params: + - name: session_id + type: int + methods: + - POST murfey.server.api.file_io_instrument.router: - path: /file_io/instrument/visits/{visit_name}/sessions/{session_id}/suggested_path function: suggest_path