Ruff-Cleanup: ganzes MC2-Repo lint-grün + projekt-passende ruff.toml
Die Ampel-Nachruestung deckte 317/337 vorbestehende ruff-Verstoesse im ganzen Repo auf. Aufgeraeumt: - ruff.toml: intentionale Muster als Projekt-Politik ausgenommen (BLE001 blind-except, S110/S112 try-except-pass/continue, PLW1510 subprocess-best-effort, B008 FastAPI- Depends/File-Idiom, EXE001 Shebang, + wenige Stil-Regeln). __init__.py-Re-Exports geschuetzt (F401). - ruff --fix: 128 mechanische (Import-Sortierung, PEP585/604-Annotationen, tote Imports, ueberfluessige noqa) auto-behoben. - 12 echte Reste von Hand: PERF402/102, PLC3002 (Lambda->walrus), ISC004 (String-Concat geklammert), F841/RUF059 (ungenutzte Vars), PIE810 (startswith-Tuple), UP031 (f-string), UP035 (veraltete typing-Imports). Ergebnis: 'ruff check .' = 0, 'compileall' grün. Kein Verhaltenswechsel (nur Stil/Modernisierung). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -109,7 +109,7 @@ def _kurz(text: str, max_len: int = 80) -> str:
|
||||
return (schnitt or t[:max_len]) + "…"
|
||||
|
||||
|
||||
_TITEL_PRAEFIX_RX = re.compile(r"^\s*(idee|projekt|bitte)\s*[:\-–]?\s*", re.I)
|
||||
_TITEL_PRAEFIX_RX = re.compile(r"^\s*(idee|projekt|bitte)\s*[:\-–]?\s*", re.IGNORECASE)
|
||||
|
||||
|
||||
def _projekt_titel(titles: list[str]) -> str:
|
||||
@@ -220,7 +220,7 @@ def _ketten_anreichern(items: list[dict]) -> list[dict]:
|
||||
for it in items:
|
||||
familien.setdefault(boss(it["id"]), []).append(it)
|
||||
projekte = []
|
||||
for wurzel, mitglieder in familien.items():
|
||||
for mitglieder in familien.values():
|
||||
if len(mitglieder) < 2:
|
||||
continue
|
||||
mitglieder.sort(key=lambda i: i.get("erstellt") or 0)
|
||||
@@ -752,8 +752,8 @@ def _lokales_konzept(text: str, titel: str = "") -> tuple | None:
|
||||
if not kandidaten and titel and _KONZEPT_DIR.is_dir():
|
||||
worte = {w for w in re.findall(r"[a-z0-9]{3,}", titel.lower())}
|
||||
treffer = [p.name for p in _KONZEPT_DIR.glob("*.md")
|
||||
if (lambda g: len(g) >= 2 or any(len(w) >= 6 for w in g))(
|
||||
worte & set(re.findall(r"[a-z0-9]{3,}", p.stem.lower())))]
|
||||
if len(g := worte & set(re.findall(r"[a-z0-9]{3,}", p.stem.lower()))) >= 2
|
||||
or any(len(w) >= 6 for w in g)]
|
||||
if len(treffer) == 1:
|
||||
kandidaten.append(treffer[0])
|
||||
for name in kandidaten:
|
||||
@@ -935,7 +935,7 @@ def _konzept_und_name(task_id: str) -> tuple:
|
||||
quell_titel = _TITEL_PRAEFIX_RX.sub("", str(t.get("title") or "").strip())
|
||||
if not quell_titel:
|
||||
return {}, "", "Quell-Karte hat keinen Titel."
|
||||
h1 = re.search(r"^#\s+(.+)$", konz["konzept"], re.M)
|
||||
h1 = re.search(r"^#\s+(.+)$", konz["konzept"], re.MULTILINE)
|
||||
kurz = h1.group(1).strip() if h1 else re.split(r"(?<=[.!?])\s", quell_titel)[0]
|
||||
return konz, _kurz(kurz, 85), ""
|
||||
|
||||
@@ -1052,9 +1052,9 @@ def konzept_ueberarbeiten(task_id: str, hinweis: str) -> dict:
|
||||
"als `KONZEPT.md` hinein (klonen, schreiben, pushen, Push beweisen)."
|
||||
if konz.get("repo") else ""))
|
||||
|
||||
teile = [f"{_UEBERARBEITEN_KOPF}\n{quelle}\n"
|
||||
f"· SO SOLL ES ANDERS WERDEN — Wortlaut des Commanders:\n „{hinweis}“\n"
|
||||
f"{_UEBERARBEITEN_FUSS}",
|
||||
teile = [(f"{_UEBERARBEITEN_KOPF}\n{quelle}\n"
|
||||
f"· SO SOLL ES ANDERS WERDEN — Wortlaut des Commanders:\n „{hinweis}“\n"
|
||||
f"{_UEBERARBEITEN_FUSS}"),
|
||||
_INFRA_LXC]
|
||||
titel = f"Konzept nachschärfen: {kurz}"[:200]
|
||||
args = ["create", titel, "--body", "\n\n".join(teile)[:4000], "--assignee", "projektstart",
|
||||
@@ -1098,7 +1098,7 @@ def log_of(task_id: str) -> dict:
|
||||
|
||||
try:
|
||||
r = _hermes(["log", task_id])
|
||||
except Exception as exc:
|
||||
except Exception:
|
||||
log.warning("ideen: kanban log fehlgeschlagen", exc_info=True)
|
||||
return {"available": True, "lines": []}
|
||||
if r.returncode != 0:
|
||||
|
||||
Reference in New Issue
Block a user