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:
@@ -1,6 +1,5 @@
|
||||
"""Datenbankverbindung (geteilte DB mit OSINT-Monitor)."""
|
||||
import aiosqlite
|
||||
import os
|
||||
from config import DB_PATH
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"""Pydantic Models für das Verwaltungsportal."""
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import json
|
||||
import logging
|
||||
from typing import Optional
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from fastapi import APIRouter, Depends
|
||||
from auth import get_current_admin
|
||||
from database import db_dependency
|
||||
import aiosqlite
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Magic-Link-Authentifizierung."""
|
||||
import logging
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request
|
||||
import aiosqlite
|
||||
|
||||
from auth import generate_magic_token, create_token
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import logging
|
||||
import uuid
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Request
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request
|
||||
from fastapi.responses import StreamingResponse
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
@@ -10,15 +10,13 @@ import aiosqlite
|
||||
|
||||
from auth import get_current_admin
|
||||
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 config import HEALTH_CHECK_USER_AGENT, HEALTH_CHECK_TIMEOUT_S
|
||||
from shared.source_rules import (
|
||||
discover_source,
|
||||
discover_all_feeds,
|
||||
evaluate_feeds_with_claude,
|
||||
_extract_domain,
|
||||
_detect_category,
|
||||
domain_to_display_name,
|
||||
)
|
||||
|
||||
@@ -683,7 +681,7 @@ async def update_suggestion(
|
||||
new_url = data.get("url")
|
||||
if source_id and new_url:
|
||||
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,
|
||||
# zugehörige deactivate_source-Vorschläge automatisch ablehnen
|
||||
@@ -741,7 +739,6 @@ async def run_health_check_stream(
|
||||
"""Health-Check mit Fortschrittsanzeige (SSE-Stream)."""
|
||||
import json as _json
|
||||
import asyncio
|
||||
from urllib.parse import urlparse
|
||||
|
||||
# Quellen laden
|
||||
cursor = await db.execute(
|
||||
@@ -806,8 +803,8 @@ async def run_health_check_stream(
|
||||
"message": f"Feed OK ({len(feed.entries)} Eintr.)"})
|
||||
except httpx.TimeoutException:
|
||||
checks.append({"type": "reachability", "status": "error", "message": "Timeout (15s)"})
|
||||
except httpx.ConnectError as e:
|
||||
checks.append({"type": "reachability", "status": "error", "message": f"Verbindung fehlgeschlagen"})
|
||||
except httpx.ConnectError:
|
||||
checks.append({"type": "reachability", "status": "error", "message": "Verbindung fehlgeschlagen"})
|
||||
except Exception as e:
|
||||
checks.append({"type": "reachability", "status": "error", "message": f"{type(e).__name__}"})
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from models import UserCreate, UserResponse
|
||||
from auth import get_current_admin
|
||||
from database import db_dependency
|
||||
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
|
||||
|
||||
router = APIRouter(prefix="/api/users", tags=["users"])
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren