chore: ajoute ruff (lint) et corrige les violations

- Config ruff dans pyproject.toml : règles E/W/F/I/UP/B, whitelist des appels
  d'injection FastAPI (Depends/File/Form/Query) pour B008, B904 ignoré
  (traduction volontaire des exceptions en réponses HTTP)
- Auto-fixes : tri des imports, suppression d'imports inutilisés, annotations
  PEP 604, f-strings sans placeholder, modes open redondants
- Suppression de variables inutilisées (config.reset_setting, parser locataires)

ruff check . : All checks passed ; 61 tests OK

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 10:20:36 +02:00
parent 4606d6785b
commit d42bfecab4
34 changed files with 148 additions and 105 deletions

View File

@@ -10,16 +10,17 @@ from fastapi.staticfiles import StaticFiles
from .. import __version__
from ..database import init_db
from .routes import (
extraction_router,
documents_router,
tags_router,
analytics_router,
dashboard_router,
revenus_router,
ia_router,
config_router,
dashboard_router,
documents_router,
extraction_router,
ia_router,
revenus_router,
tags_router,
)
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Initialize database on application startup."""

View File

@@ -1,13 +1,13 @@
"""API Routes package."""
from .extraction import router as extraction_router
from .documents import router as documents_router
from .tags import router as tags_router
from .analytics import router as analytics_router
from .dashboard import router as dashboard_router
from .revenus import router as revenus_router
from .ia import router as ia_router
from .config import router as config_router
from .dashboard import router as dashboard_router
from .documents import router as documents_router
from .extraction import router as extraction_router
from .ia import router as ia_router
from .revenus import router as revenus_router
from .tags import router as tags_router
__all__ = [
"extraction_router",

View File

@@ -1,25 +1,25 @@
"""Analytics routes - Data analysis and reporting endpoints."""
from datetime import date
from collections import defaultdict
from datetime import date
from fastapi import APIRouter, Depends, Query
from sqlalchemy import distinct, func, select
from sqlalchemy.orm import Session
from sqlalchemy import select, func, distinct, extract
from ...database import get_session
from ...database.models import Depense, Document, Immeuble, Lot, Tag
from ..schemas.models import (
ImmeubleResponse,
LotResponse,
CategorySummary,
DepenseDetail,
DepensesSummary,
CategorySummary,
TagSummary,
MonthlySummary,
FournisseurSummary,
FournisseurResponse,
FournisseurSummary,
ImmeubleResponse,
LotResponse,
MonthlySummary,
TagResponse,
TagSummary,
)
router = APIRouter(prefix="/api", tags=["analytics"])

View File

@@ -4,13 +4,13 @@ from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from sqlalchemy.orm import Session
from ...database import get_session, DatabaseService
from ...database import DatabaseService, get_session
from ...database.models import Tag
from ...services.settings_service import (
SETTINGS_REGISTRY,
delete_setting,
get_all_settings,
set_setting,
delete_setting,
SETTINGS_REGISTRY,
)
router = APIRouter(prefix="/api/config", tags=["config"])
@@ -67,7 +67,7 @@ async def reset_setting(
"""Reset un setting au défaut (supprime l'override DB)."""
if key not in SETTINGS_REGISTRY:
raise HTTPException(status_code=404, detail=f"Setting inconnu : {key}")
deleted = delete_setting(session, key)
delete_setting(session, key)
# Return the resolved value after deletion
all_settings = get_all_settings(session)
return all_settings[key]

View File

@@ -1,21 +1,21 @@
"""Dashboard routes - Aggregated data for the home page."""
from datetime import date, timedelta
from collections import defaultdict
from datetime import date, timedelta
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from sqlalchemy import select, func, desc
from pydantic import BaseModel
from sqlalchemy import desc, func, select
from sqlalchemy.orm import Session
from ...database import get_session
from ...database.models import (
Depense,
Document,
Immeuble,
Lot,
Locataire,
Lot,
Revenu,
Depense,
)
router = APIRouter(prefix="/api/dashboard", tags=["dashboard"])

View File

@@ -4,17 +4,17 @@ import json
import logging
from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException, File, UploadFile, Form
from fastapi.responses import Response, JSONResponse
from sqlalchemy.orm import Session
from fastapi import APIRouter, Depends, File, Form, HTTPException, UploadFile
from fastapi.responses import JSONResponse, Response
from sqlalchemy import func, select
from sqlalchemy.orm import Session
from ...database import get_session, DatabaseService, storage
from ...database.models import Document, Immeuble, Lot, Locataire, Revenu, Depense
from ...database import DatabaseService, get_session, storage
from ...database.models import Depense, Document, Immeuble, Locataire, Lot, Revenu
from ...database.service import DuplicateDocumentError
from ...extractor import extract_compte_rendu
from ...utils.uploads import read_upload_limited, UploadTooLargeError
from ..schemas import SaveRequest, SaveResponse, DocumentSummary
from ...utils.uploads import UploadTooLargeError, read_upload_limited
from ..schemas import DocumentSummary, SaveRequest, SaveResponse
router = APIRouter(prefix="/api", tags=["documents"])

View File

@@ -7,7 +7,7 @@ from fastapi import APIRouter, File, HTTPException, UploadFile
from fastapi.responses import JSONResponse
from ...extractor import extract_compte_rendu
from ...utils.uploads import read_upload_limited, UploadTooLargeError
from ...utils.uploads import UploadTooLargeError, read_upload_limited
router = APIRouter(prefix="/api", tags=["extraction"])

View File

@@ -2,11 +2,10 @@
import logging
import httpx
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
import httpx
from ...services.ollama_service import ask_ollama, check_ollama_health
logger = logging.getLogger(__name__)

View File

@@ -1,19 +1,18 @@
"""Revenus routes - Dedicated endpoints for rental income analytics."""
from datetime import date, timedelta
from collections import defaultdict
from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from sqlalchemy import select, func, desc, and_
from pydantic import BaseModel
from sqlalchemy import and_, desc, func, select
from sqlalchemy.orm import Session
from ...database import get_session
from ...database.models import (
Document,
Immeuble,
Lot,
Locataire,
Lot,
Revenu,
)

View File

@@ -3,7 +3,7 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from ...database import get_session, DatabaseService
from ...database import DatabaseService, get_session
from ...services.tag_predictor import TagPredictor
from ..schemas import PredictTagsRequest

View File

@@ -1,14 +1,14 @@
"""Pydantic schemas for API request/response models."""
from .models import (
SaveRequest,
SaveResponse,
PredictTagsRequest,
DocumentSummary,
DepenseDetail,
DepensesSummary,
DocumentSummary,
ImmeubleResponse,
LotResponse,
PredictTagsRequest,
SaveRequest,
SaveResponse,
)
__all__ = [

View File

@@ -5,7 +5,6 @@ from typing import Any
from pydantic import BaseModel
# ============================================================
# Requests
# ============================================================