import logging import time from datetime import datetime, timedelta from pathlib import Path import h5py from . import protocols logger = logging.getLogger(__name__) def start_processing( file_path: Path, csi_callback: protocols.CSICallback | None = None, ) -> None: logger.info(f"Replaying CSI data from {file_path}") with h5py.File(file_path, "r") as file: try: for key in file: datetime.fromisoformat(key) except ValueError as e: logger.exception( "The file provided was not generated using this software", e ) start_time = datetime.fromisoformat(list(file.keys())[0]) target_offset = datetime.now() - start_time for key in file: logger.debug(f"Sending data from {key} at {datetime.now().isoformat()}") csi_callback(file[key][:]) curr_time_virtual = datetime.fromisoformat(key) new_offset = datetime.now() - curr_time_virtual logger.debug(f"New offset {new_offset}, target is {target_offset}") if new_offset > target_offset + timedelta(seconds=1): logger.warning( f"Data is {new_offset - target_offset} behind, lagging behind..." ) time.sleep(max(0, (target_offset - new_offset).total_seconds()))