fix(api): F821-Regression in 6 weiteren Route-Dateien beheben
CI / detect-changes (pull_request) Successful in 5s
CI / branch-name (pull_request) Successful in 1s
CI / guardrail-integrity (pull_request) Successful in 5s
CI / secret-scan (pull_request) Successful in 8s
CI / dep-audit (pull_request) Failing after 57s
CI / sbom-scan (pull_request) Failing after 56s
CI / build-sha-integrity (pull_request) Successful in 6s
CI / validate-canonical-controls (pull_request) Successful in 5s
CI / loc-budget (pull_request) Successful in 22s
CI / go-lint (pull_request) Successful in 46s
CI / python-lint (pull_request) Failing after 17s
CI / nodejs-lint (pull_request) Failing after 1m8s
CI / nodejs-build (pull_request) Successful in 3m1s
CI / test-go (pull_request) Successful in 1m2s
CI / iace-gt-coverage (pull_request) Successful in 18s
CI / test-python-backend (pull_request) Successful in 25s
CI / test-python-document-crawler (pull_request) Successful in 14s
CI / test-python-dsms-gateway (pull_request) Successful in 10s

Gleiche Wurzel wie evidence_routes (Extract-Service-Refactor a638d0e5 ff.):
Signaturen/Imports halb umgestellt → undefined names → NameError beim Aufruf.

- routes.py: db-Param in get_control/update_control/review_control + EvidenceDB-Import
- dsfa_routes.py: db-Param in create_dsfa + HTTPException/text-Import
- dashboard_routes.py: timezone-Import
- canonical_control_routes.py: logger-Definition
- ai_routes.py: timezone in den lokalen datetime-Imports
- vvt_routes.py: HTTPException-Import

Verifiziert: ruff F821 0 über das gesamte compliance/api/, alle 6 py_compile,
294 Tests grün auf den betroffenen Modulen (die 2 dsfa-invalid-status/risk-Failures
sind vorbestehend = 400-vs-422, unabhängig von diesem Fix).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-06-30 10:51:00 +02:00
parent 79abf23ea8
commit 3389fa3e7a
6 changed files with 13 additions and 5 deletions
@@ -162,7 +162,7 @@ async def update_ai_system(
db: Session = Depends(get_db), db: Session = Depends(get_db),
): ):
"""Update an AI system.""" """Update an AI system."""
from datetime import datetime from datetime import datetime, timezone
system = db.query(AISystemDB).filter(AISystemDB.id == system_id).first() system = db.query(AISystemDB).filter(AISystemDB.id == system_id).first()
if not system: if not system:
@@ -226,7 +226,7 @@ async def assess_ai_system(
db: Session = Depends(get_db), db: Session = Depends(get_db),
): ):
"""Run AI Act risk assessment for an AI system.""" """Run AI Act risk assessment for an AI system."""
from datetime import datetime from datetime import datetime, timezone
system = db.query(AISystemDB).filter(AISystemDB.id == system_id).first() system = db.query(AISystemDB).filter(AISystemDB.id == system_id).first()
if not system: if not system:
@@ -47,6 +47,8 @@ from compliance.services.canonical_control_service import (
_control_row, # re-exported for legacy test imports _control_row, # re-exported for legacy test imports
) )
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/v1/canonical", tags=["canonical-controls"]) router = APIRouter(prefix="/v1/canonical", tags=["canonical-controls"])
@@ -14,7 +14,7 @@ Endpoints:
""" """
import logging import logging
from datetime import datetime, date, timedelta from datetime import datetime, date, timedelta, timezone
from calendar import month_abbr from calendar import month_abbr
from typing import Optional, Dict, Any, List from typing import Optional, Dict, Any, List
from decimal import Decimal from decimal import Decimal
@@ -26,10 +26,11 @@ versions). Module-level helpers re-exported for legacy tests.
import logging import logging
from typing import Any, List, Optional from typing import Any, List, Optional
from fastapi import APIRouter, Depends, Query from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel from pydantic import BaseModel
from fastapi.responses import Response from fastapi.responses import Response
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from sqlalchemy import text
from classroom_engine.database import get_db from classroom_engine.database import get_db
from compliance.api._http_errors import translate_domain_errors from compliance.api._http_errors import translate_domain_errors
@@ -484,6 +485,7 @@ async def list_dsfas(
async def create_dsfa( async def create_dsfa(
request: DSFACreate, request: DSFACreate,
tenant_id: Optional[str] = Query(None), tenant_id: Optional[str] = Query(None),
db: Session = Depends(get_db),
service: DSFAService = Depends(get_dsfa_service), service: DSFAService = Depends(get_dsfa_service),
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Neue DSFA erstellen.""" """Neue DSFA erstellen."""
@@ -24,6 +24,7 @@ from fastapi.responses import FileResponse
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from classroom_engine.database import get_db from classroom_engine.database import get_db
from ..db.models import EvidenceDB
from .audit_trail_utils import log_audit_trail from .audit_trail_utils import log_audit_trail
from ..db import ( from ..db import (
@@ -310,6 +311,7 @@ async def list_controls_paginated(
) )
async def get_control( async def get_control(
control_id: str, control_id: str,
db: Session = Depends(get_db),
svc: ControlExportService = Depends(get_ctrl_export_service), svc: ControlExportService = Depends(get_ctrl_export_service),
) -> ControlResponse: ) -> ControlResponse:
"""Get a specific control by control_id.""" """Get a specific control by control_id."""
@@ -354,6 +356,7 @@ async def get_control(
async def update_control( async def update_control(
control_id: str, control_id: str,
update: ControlUpdate, update: ControlUpdate,
db: Session = Depends(get_db),
svc: ControlExportService = Depends(get_ctrl_export_service), svc: ControlExportService = Depends(get_ctrl_export_service),
) -> ControlResponse: ) -> ControlResponse:
"""Update a control.""" """Update a control."""
@@ -443,6 +446,7 @@ async def update_control(
async def review_control( async def review_control(
control_id: str, control_id: str,
review: ControlReviewRequest, review: ControlReviewRequest,
db: Session = Depends(get_db),
svc: ControlExportService = Depends(get_ctrl_export_service), svc: ControlExportService = Depends(get_ctrl_export_service),
) -> ControlResponse: ) -> ControlResponse:
"""Mark a control as reviewed with new status.""" """Mark a control as reviewed with new status."""
@@ -21,7 +21,7 @@ Phase 1 Step 4 refactor: handlers delegate to VVTService.
import logging import logging
from typing import Any, List, Optional from typing import Any, List, Optional
from fastapi import APIRouter, Depends, Query, Request from fastapi import APIRouter, Depends, HTTPException, Query, Request
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
from sqlalchemy.orm import Session from sqlalchemy.orm import Session