Source code for materia_epd.core.utils

import os
import re
from pathlib import Path
from typing import Optional, Tuple


[docs] def to_float(value, positive=False): """Convert to float; if positive=True, return None for <= 0.""" try: f = float(value) except (TypeError, ValueError): return None return f if (not positive or f > 0) else None
def _extract_version(name: str) -> Optional[Tuple[int, ...]]: """Extract version tuple from filename (e.g. 1.0.2) or None if absent.""" pattern = re.compile(r"version\.?(\d+(?:\.\d+)*)", re.IGNORECASE) match = pattern.search(name) if not match: return None return tuple(int(p) for p in match.group(1).split("."))
[docs] def sort_key(p: Path): v = _extract_version(p.name) return ( v is not None, v or tuple(), p.stat().st_mtime, )
[docs] def qn_uri(uri: str, name: str) -> str: return f"{{{uri}}}{name}"
[docs] def copy_except_folders(src_dir, dest_dir, exclude_folders): for root, dirs, files in os.walk(src_dir): dirs[:] = [d for d in dirs if d not in exclude_folders] rel_path = os.path.relpath(root, src_dir) target_root = os.path.join(dest_dir, rel_path) os.makedirs(target_root, exist_ok=True) for file in files: src_file = os.path.join(root, file) dest_file = os.path.join(target_root, file) with open(src_file, "rb") as f_src, open(dest_file, "wb") as f_dest: f_dest.write(f_src.read())