""" File handling utilities for Cognitive Prism Automation Tests """ import os import time from pathlib import Path from config.config import DOWNLOAD_DIR, DOWNLOAD_TIMEOUT class FileHandlers: """Helper class for file operations""" @staticmethod def wait_for_download(filename, timeout=DOWNLOAD_TIMEOUT): """ Wait for file to be downloaded Args: filename: Name of the file to wait for timeout: Maximum time to wait in seconds Returns: Path: Path to downloaded file Raises: TimeoutError: If file is not downloaded within timeout """ download_path = Path(DOWNLOAD_DIR) / filename start_time = time.time() while not download_path.exists(): if time.time() - start_time > timeout: raise TimeoutError(f"File {filename} was not downloaded within {timeout} seconds") time.sleep(0.5) # Wait for file to be completely downloaded (no .crdownload extension) while download_path.suffix == ".crdownload" or download_path.name.endswith(".tmp"): if time.time() - start_time > timeout: raise TimeoutError(f"File {filename} download did not complete within {timeout} seconds") time.sleep(0.5) download_path = Path(DOWNLOAD_DIR) / filename return download_path @staticmethod def get_latest_downloaded_file(pattern="*"): """ Get the most recently downloaded file matching pattern Args: pattern: File pattern to match (e.g., "*.csv", "*.json") Returns: Path: Path to latest file or None if no file found """ download_path = Path(DOWNLOAD_DIR) files = list(download_path.glob(pattern)) if not files: return None # Sort by modification time and return the latest latest_file = max(files, key=lambda f: f.stat().st_mtime) return latest_file @staticmethod def cleanup_downloads(pattern="*", older_than_days=7): """ Clean up old downloaded files Args: pattern: File pattern to match older_than_days: Delete files older than this many days """ import time download_path = Path(DOWNLOAD_DIR) current_time = time.time() cutoff_time = current_time - (older_than_days * 24 * 60 * 60) for file in download_path.glob(pattern): if file.stat().st_mtime < cutoff_time: try: file.unlink() except Exception as e: print(f"Error deleting file {file}: {e}")