File size: 2,183 Bytes
698ce3e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
"""
Configuration du serveur FastAPI.
"""
import os
import logging
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from dotenv import load_dotenv
from app import __version__
from app.api.routes import router
# Chargement des variables d'environnement
load_dotenv()
# Configuration
API_HOST = os.getenv("API_HOST", "0.0.0.0")
API_PORT = int(os.getenv("API_PORT", 8000))
# Création de l'application FastAPI
app = FastAPI(
title="Web Scraper et Convertisseur Markdown API",
description="""
API pour scraper des sites web, nettoyer le contenu et le convertir en Markdown.
Idéal pour préparer des données pour les systèmes d'IA.
""",
version=__version__,
docs_url="/docs",
redoc_url="/redoc",
)
# Configuration CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Pour la production, limitez aux domaines autorisés
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Enregistrement des routes
app.include_router(router, prefix="/api")
# Gestionnaire d'exceptions
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
"""Gestionnaire global des exceptions."""
logging.error(f"Exception non gérée: {str(exc)}")
return JSONResponse(
status_code=500,
content={"detail": f"Erreur interne du serveur: {str(exc)}"}
)
# Route racine
@app.get("/", tags=["Informations"])
async def root():
"""Page d'accueil de l'API."""
return {
"name": "Web Scraper et Convertisseur Markdown API",
"version": __version__,
"docs": "/docs",
"redoc": "/redoc"
}
# Vérification de la santé de l'API
@app.get("/health", tags=["Informations"])
async def health_check():
"""Vérification de la santé de l'API."""
return {"status": "ok", "version": __version__}
def start():
"""Démarrage du serveur avec uvicorn."""
import uvicorn
uvicorn.run(
"app.api.server:app",
host=API_HOST,
port=API_PORT,
reload=True
)
if __name__ == "__main__":
start() |