"""Small filesystem helpers shared by backend services.""" import filecmp import hashlib import json from pathlib import Path def file_sha256(path: Path) -> str: digest = hashlib.sha256() with path.open("rb") as stream: for chunk in iter(lambda: stream.read(1024 * 1024), b""): digest.update(chunk) return digest.hexdigest() def files_match(file_a: Path, file_b: Path) -> bool: try: return file_a.is_file() and file_b.is_file() and filecmp.cmp(file_a, file_b, shallow=False) except OSError: return False def read_json(path: Path) -> dict: try: with path.open("r", encoding="utf-8") as stream: payload = json.load(stream) return payload if isinstance(payload, dict) else {} except (OSError, ValueError, TypeError): return {} def write_json(path: Path, payload: dict) -> None: path.parent.mkdir(parents=True, exist_ok=True) with path.open("w", encoding="utf-8") as stream: json.dump(payload, stream, indent=2)