import logging from typing import Dict from fastapi import FastAPI, HTTPException, status from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel, Field from walloonTranslator import WalloonTranslator app = FastAPI( title="API de Traduction Français-Wallon carolo", description="API REST pour la traduction entre le français et le wallon", version="1.0.0") logger = logging.getLogger(__name__) class LanguageCodes: FRENCH = "fra_Latn" WALLOON = "wln_Latn" class TranslationRequest(BaseModel): text: str = Field(min_length=1, description="Texte à traduire") source_language: str = Field( default=LanguageCodes.FRENCH, description="Code de la langue source" ) target_language: str = Field( default=LanguageCodes.WALLOON, description="Code de la langue cible" ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) translator = WalloonTranslator() @app.post( "/translate", response_model=Dict[str, str], status_code=status.HTTP_200_OK, summary="Traduire un texte", description="Traduit le texte fourni de la langue source vers la langue cible" ) async def translate_text(request: TranslationRequest) -> Dict[str, str]: try: translated_text = translator.translate(request.text, request.source_language, request.target_language) return {"translated_text": translated_text} except ValueError as e: logger.warning(f"Requête invalide: {str(e)}") raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) except Exception as e: logger.error(f"Erreur lors de la traduction: {str(e)}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Une erreur est survenue lors de la traduction")