fix: Mi2-Mi4 + Mi1 partial — version pins, file-lock, catalog lock, __main__ tests

- Mi2: requirements.txt — Obergrenzen hinzugefügt (<3.0, <5.0, etc.)
- Mi3: cmd_scan() — File-Lock via fcntl (data_dir/.scan.lock)
- Mi4: refresh_catalog() — Cache-Check unter self._lock (thread-safe)
- Mi1: tests/test_main.py — 17 neue Tests (__main__ Coverage 10% → 18%)
- 294/294 Tests grün
This commit is contained in:
Dieter Schlüter 2026-06-14 21:36:24 +02:00
commit de5be23d23
5 changed files with 287 additions and 12 deletions

View file

@ -163,14 +163,16 @@ class ModelRouter:
def refresh_catalog(self) -> None:
"""OpenRouter /models + lokale Server /models ziehen (24 h gecacht).
Failsafe: blockiert nie."""
Failsafe: blockiert nie. Thread-safe via self._lock."""
if not self._refresh:
return
fetched_at = self._catalog.get("fetched_at")
slugs = self._catalog.get("slugs") or []
servers = self._catalog.get("servers") or {}
if fetched_at and (slugs or servers) and (time.time() - fetched_at) < 86400:
return # Cache frisch
# Cache-Check unter Lock — vermeidet doppelte Fetches bei parallelen Scans
with self._lock:
fetched_at = self._catalog.get("fetched_at")
slugs = self._catalog.get("slugs") or []
servers = self._catalog.get("servers") or {}
if fetched_at and (slugs or servers) and (time.time() - fetched_at) < 86400:
return # Cache frisch
new_slugs, new_servers = [], {}
# 1. OpenRouter-Katalog (primär)