Source code for ewoksfluo.io.output_uri

from typing import Optional
from typing import Sequence

from . import hdf5

DEFAULT_ENTRY_NAME = "results"
DEFAULT_FIT_NAME = "fit"


[docs] def compose_full_output_uri( output_root_uri: str, default_output_data_path: Optional[str] = None, extra_data_paths: Optional[Sequence[str]] = None, ) -> str: """ Compose a full HDF5 URI by combining a root URI with optional data path default and extra data paths. The function returns a URI in the form `file_path::/data/path`, merging: 1. The base file path from `output_root_uri`. 2. Default data path segments if the root path is shorter than expected. 3. Optional additional path segments from `extra_data_paths`. :param output_root_uri: The root HDF5 URI, e.g., "file.h5::/1.1/detector_name/fit". :param default_output_data_path: Optional default HDF5 data path to fill in missing segments. :param extra_end_path: Optional extra path components to append to the final data path. :return: The composed HDF5 URI with file path and full data path. Example: .. code-block:: python uri = compose_full_output_uri( "results.h5::/1.1", default_output_data_path="results/detector_name", extra_data_paths=("fit",), ) # Result: "results.h5::/1.1/detector_name/fit" """ if not default_output_data_path: default_output_data_path = DEFAULT_ENTRY_NAME file_path, data_path = hdf5.split_h5uri(output_root_uri) default_parts = hdf5.split_h5data_path(default_output_data_path) data_parts = hdf5.split_h5data_path(data_path) n = len(default_parts) - len(data_parts) if n > 0: data_parts += default_parts[-n:] for extra_data_path in extra_data_paths or []: if extra_data_path: data_parts += hdf5.split_h5data_path(extra_data_path) full_data_path = "/".join(data_parts) return f"{file_path}::{full_data_path}"