Phase 9: Code-Hygiene - alle pyflakes-Issues fixen

15 pyflakes-Warnings entfernt:
- src/audit.py: HTTPException (in router import statt helper, war hier ungenutzt)
- src/routers/auth.py: status (FastAPI-status ungenutzt)
- src/routers/audit.py: HTTPException (ungenutzt)
- src/routers/users.py: MAGIC_LINK_EXPIRE_MINUTES (ungenutzt)
- src/routers/sources.py: row_to_dict, _extract_domain, _detect_category,
  urlparse, status (alle ungenutzt - status.HTTP_* wird nirgendwo aufgerufen)
- src/routers/sources.py: 2x f-string ohne Placeholder (URL aktualisiert,
  Verbindung fehlgeschlagen) zu normalen Strings
- src/routers/sources.py: except httpx.ConnectError as e -> e ungenutzt, weg
- src/database.py: os ungenutzt
- src/models.py: EmailStr ungenutzt

Audit-Coverage geprueft: alle write-Endpoints in users.py rufen
_toggle_field() auf, das die log_action-Aufrufe macht. Keine Audit-Luecken.
Alle anderen Routers (organizations/licenses/dashboard/token_usage)
hatten bereits saubere Audit-Coverage.

Mojibake-Diagnose ueber alle src/*.py: 0 Treffer.
Dieser Commit ist enthalten in:
claude-dev
2026-05-09 03:49:53 +00:00
Ursprung 52a18fd9ec
Commit 9000750df2
6 geänderte Dateien mit 9 neuen und 13 gelöschten Zeilen

Datei anzeigen

@@ -1,6 +1,5 @@
"""Datenbankverbindung (geteilte DB mit OSINT-Monitor).""" """Datenbankverbindung (geteilte DB mit OSINT-Monitor)."""
import aiosqlite import aiosqlite
import os
from config import DB_PATH from config import DB_PATH

Datei anzeigen

@@ -1,5 +1,5 @@
"""Pydantic Models für das Verwaltungsportal.""" """Pydantic Models für das Verwaltungsportal."""
from pydantic import BaseModel, EmailStr, Field from pydantic import BaseModel, Field
from typing import Optional from typing import Optional

Datei anzeigen

@@ -2,7 +2,7 @@
import json import json
import logging import logging
from typing import Optional from typing import Optional
from fastapi import APIRouter, Depends, HTTPException from fastapi import APIRouter, Depends
from auth import get_current_admin from auth import get_current_admin
from database import db_dependency from database import db_dependency
import aiosqlite import aiosqlite

Datei anzeigen

@@ -1,7 +1,7 @@
"""Magic-Link-Authentifizierung.""" """Magic-Link-Authentifizierung."""
import logging import logging
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from fastapi import APIRouter, Depends, HTTPException, Request, status from fastapi import APIRouter, Depends, HTTPException, Request
import aiosqlite import aiosqlite
from auth import generate_magic_token, create_token from auth import generate_magic_token, create_token

Datei anzeigen

@@ -2,7 +2,7 @@
import logging import logging
import uuid import uuid
from fastapi import APIRouter, Depends, HTTPException, status, Request from fastapi import APIRouter, Depends, HTTPException, Request
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from typing import Optional from typing import Optional
@@ -10,15 +10,13 @@ import aiosqlite
from auth import get_current_admin from auth import get_current_admin
from database import db_dependency from database import db_dependency
from audit import log_action, get_client_ip, row_to_dict from audit import log_action, get_client_ip
from source_meta import get_meta from source_meta import get_meta
from config import HEALTH_CHECK_USER_AGENT, HEALTH_CHECK_TIMEOUT_S from config import HEALTH_CHECK_USER_AGENT, HEALTH_CHECK_TIMEOUT_S
from shared.source_rules import ( from shared.source_rules import (
discover_source, discover_source,
discover_all_feeds, discover_all_feeds,
evaluate_feeds_with_claude, evaluate_feeds_with_claude,
_extract_domain,
_detect_category,
domain_to_display_name, domain_to_display_name,
) )
@@ -683,7 +681,7 @@ async def update_suggestion(
new_url = data.get("url") new_url = data.get("url")
if source_id and new_url: if source_id and new_url:
await db.execute("UPDATE sources SET url = ? WHERE id = ?", (new_url, source_id)) await db.execute("UPDATE sources SET url = ? WHERE id = ?", (new_url, source_id))
result_action = f"URL aktualisiert" result_action = "URL aktualisiert"
# Auto-Reject: Wenn fix_url oder add_source akzeptiert wird, # Auto-Reject: Wenn fix_url oder add_source akzeptiert wird,
# zugehörige deactivate_source-Vorschläge automatisch ablehnen # zugehörige deactivate_source-Vorschläge automatisch ablehnen
@@ -741,7 +739,6 @@ async def run_health_check_stream(
"""Health-Check mit Fortschrittsanzeige (SSE-Stream).""" """Health-Check mit Fortschrittsanzeige (SSE-Stream)."""
import json as _json import json as _json
import asyncio import asyncio
from urllib.parse import urlparse
# Quellen laden # Quellen laden
cursor = await db.execute( cursor = await db.execute(
@@ -806,8 +803,8 @@ async def run_health_check_stream(
"message": f"Feed OK ({len(feed.entries)} Eintr.)"}) "message": f"Feed OK ({len(feed.entries)} Eintr.)"})
except httpx.TimeoutException: except httpx.TimeoutException:
checks.append({"type": "reachability", "status": "error", "message": "Timeout (15s)"}) checks.append({"type": "reachability", "status": "error", "message": "Timeout (15s)"})
except httpx.ConnectError as e: except httpx.ConnectError:
checks.append({"type": "reachability", "status": "error", "message": f"Verbindung fehlgeschlagen"}) checks.append({"type": "reachability", "status": "error", "message": "Verbindung fehlgeschlagen"})
except Exception as e: except Exception as e:
checks.append({"type": "reachability", "status": "error", "message": f"{type(e).__name__}"}) checks.append({"type": "reachability", "status": "error", "message": f"{type(e).__name__}"})

Datei anzeigen

@@ -7,7 +7,7 @@ from models import UserCreate, UserResponse
from auth import get_current_admin from auth import get_current_admin
from database import db_dependency from database import db_dependency
from audit import log_action, get_client_ip, row_to_dict from audit import log_action, get_client_ip, row_to_dict
from config import MAGIC_LINK_BASE_URL, MAGIC_LINK_EXPIRE_MINUTES from config import MAGIC_LINK_BASE_URL
import aiosqlite import aiosqlite
router = APIRouter(prefix="/api/users", tags=["users"]) router = APIRouter(prefix="/api/users", tags=["users"])