diff --git a/src/murfey/client/contexts/spa.py b/src/murfey/client/contexts/spa.py index 6f9f48993..17db68027 100644 --- a/src/murfey/client/contexts/spa.py +++ b/src/murfey/client/contexts/spa.py @@ -431,12 +431,15 @@ def _position_analysis( grid_square_metadata_file, grid_square, ) + metadata_source_as_str = ( + "/".join(source.parts[:-2]) + + f"/{environment.visit}/" + + source.parts[-2] + ) metadata_source = Path( - ( - "/".join(source.parts[:-2]) - + f"/{environment.visit}/" - + source.parts[-2] - )[1:] + metadata_source_as_str[1:] + if metadata_source_as_str.startswith("//") + else metadata_source_as_str ) image_path = ( _file_transferred_to(environment, metadata_source, Path(gs.image)) @@ -471,12 +474,15 @@ def _position_analysis( foil_hole, grid_square, ) + metadata_source_as_str = ( + "/".join(source.parts[:-2]) + + f"/{environment.visit}/" + + source.parts[-2] + ) metadata_source = Path( - ( - "/".join(source.parts[:-2]) - + f"/{environment.visit}/" - + source.parts[-2] - )[1:] + metadata_source_as_str[1:] + if metadata_source_as_str.startswith("//") + else metadata_source_as_str ) image_path = ( _file_transferred_to(environment, metadata_source, Path(fh.image)) diff --git a/src/murfey/client/contexts/spa_metadata.py b/src/murfey/client/contexts/spa_metadata.py index c4d3e978d..cb388c035 100644 --- a/src/murfey/client/contexts/spa_metadata.py +++ b/src/murfey/client/contexts/spa_metadata.py @@ -44,7 +44,7 @@ def _foil_hole_positions(xml_path: Path, grid_square: int) -> Dict[str, FoilHole required_key = key break if not required_key: - logger.warning(f"Required key not found for {str(xml_path)}") + logger.info(f"Required key not found for {str(xml_path)}") return {} foil_holes = {} for fh_block in serialization_array[required_key]: @@ -163,10 +163,13 @@ def post_transfer( atlas=Path(partial_path), sample=sample ) url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/register_data_collection_group" - dcg_search_dir = "/" + "/".join( - p - for p in transferred_file.parent.parts[1:] - if p != environment.visit + dcg_search_dir = "/".join( + p for p in transferred_file.parent.parts if p != environment.visit + ) + dcg_search_dir = ( + dcg_search_dir[1:] + if dcg_search_dir.startswith("//") + else dcg_search_dir ) dcg_images_dirs = sorted( Path(dcg_search_dir).glob("Images-Disc*"), @@ -215,11 +218,16 @@ def post_transfer( ): # Make sure we have a data collection group before trying to register grid square url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/register_data_collection_group" - dcg_search_dir = "/" + "/".join( + dcg_search_dir = "/".join( p - for p in transferred_file.parent.parent.parts[1:] + for p in transferred_file.parent.parent.parts if p != environment.visit ) + dcg_search_dir = ( + dcg_search_dir[1:] + if dcg_search_dir.startswith("//") + else dcg_search_dir + ) dcg_images_dirs = sorted( Path(dcg_search_dir).glob("Images-Disc*"), key=lambda x: x.stat().st_ctime, @@ -241,6 +249,8 @@ def post_transfer( ) fh_positions = _foil_hole_positions(transferred_file, int(gs_name)) source = _get_source(transferred_file, environment=environment) + if source is None: + return None visitless_source_search_dir = str(source).replace( f"/{environment.visit}", "" ) @@ -261,12 +271,15 @@ def post_transfer( transferred_file, int(gs_name), ) + metadata_source_as_str = ( + "/".join(source.parts[:-2]) + + f"/{environment.visit}/" + + source.parts[-2] + ) metadata_source = Path( - ( - "/".join(Path(visitless_source).parts[:-2]) - + f"/{environment.visit}/" - + Path(visitless_source).parts[-2] - )[1:] + metadata_source_as_str[1:] + if metadata_source_as_str.startswith("//") + else metadata_source_as_str ) image_path = ( _file_transferred_to( diff --git a/src/murfey/client/multigrid_control.py b/src/murfey/client/multigrid_control.py index e12d95400..01ef1d635 100644 --- a/src/murfey/client/multigrid_control.py +++ b/src/murfey/client/multigrid_control.py @@ -143,7 +143,7 @@ def _start_rsyncer_multigrid( source, destination, force_metadata=self.processing_enabled, - analyse=not extra_directory and use_suggested_path and analyse, + analyse=analyse, remove_files=remove_files, tag=tag, limited=limited, diff --git a/src/murfey/instrument_server/__init__.py b/src/murfey/instrument_server/__init__.py index bb17695a8..1bf239827 100644 --- a/src/murfey/instrument_server/__init__.py +++ b/src/murfey/instrument_server/__init__.py @@ -5,6 +5,8 @@ from rich.logging import RichHandler import murfey +from murfey.client import read_config +from murfey.client.customlogging import CustomHandler from murfey.util import LogFilter logger = logging.getLogger("murfey.instrument_server") @@ -33,6 +35,14 @@ def run(): logging.getLogger("fastapi").addHandler(rich_handler) logging.getLogger("uvicorn").addHandler(rich_handler) + ws = murfey.client.websocket.WSApp( + server=read_config()["Murfey"].get("server"), + id=0, + ) + + handler = CustomHandler(ws.send) + logging.getLogger().addHandler(handler) + logger.info( f"Starting Murfey server version {murfey.__version__}, listening on {args.host}:{args.port}" ) diff --git a/src/murfey/instrument_server/api.py b/src/murfey/instrument_server/api.py index a094fce39..2dad52893 100644 --- a/src/murfey/instrument_server/api.py +++ b/src/murfey/instrument_server/api.py @@ -21,7 +21,7 @@ from murfey.client.multigrid_control import MultigridController from murfey.client.rsync import RSyncer from murfey.client.watchdir_multigrid import MultigridDirWatcher -from murfey.util import sanitise, sanitise_nonpath, secure_path +from murfey.util import posix_path, sanitise, sanitise_nonpath, secure_path from murfey.util.instrument_models import MultigridWatcherSpec from murfey.util.models import File, Token @@ -291,7 +291,7 @@ def upload_gain_reference( ).json() cmd = [ "rsync", - safe_gain_path, + posix_path(Path(safe_gain_path)), f"{urlparse(_get_murfey_url(), allow_fragments=False).hostname}::{machine_config.get('rsync_module', 'data')}/{safe_visit_path}/{safe_destination_dir}/{secure_filename(gain_reference.gain_path.name)}", ] gain_rsync = subprocess.run(cmd) diff --git a/src/murfey/util/__init__.py b/src/murfey/util/__init__.py index c1610c98c..450fa9858 100644 --- a/src/murfey/util/__init__.py +++ b/src/murfey/util/__init__.py @@ -74,9 +74,14 @@ def sanitise_nonpath(in_string: str) -> str: def secure_path(in_path: Path, keep_spaces: bool = False) -> Path: if keep_spaces: - secured_parts = [ - secure_filename(p) if " " not in p else p for p in in_path.parts - ] + secured_parts = [] + for p, part in enumerate(in_path.parts): + if " " in part: + secured_parts.append(part) + elif ":" in part and not p: + secured_parts.append(secure_filename(part) + ":") + else: + secured_parts.append(secure_filename(part)) else: secured_parts = [ (