""" Modèles de données pour l'API. """ from typing import List, Optional, Dict, Union, Any from pydantic import BaseModel, HttpUrl, validator, Field class ScrapeRequest(BaseModel): """Modèle pour une requête de scraping.""" url: str = Field(..., description="URL à scraper") save: bool = Field(False, description="Sauvegarder le résultat en fichier Markdown") filename: Optional[str] = Field(None, description="Nom du fichier pour la sauvegarde") clean: bool = Field(True, description="Nettoyer le HTML avant conversion") @validator('url') def url_must_be_valid(cls, v): """Validation de l'URL.""" if not v.startswith(('http://', 'https://')): raise ValueError('URL doit commencer par http:// ou https://') return v class MultipleScrapeRequest(BaseModel): """Modèle pour une requête de scraping multiple.""" urls: List[str] = Field(..., description="Liste d'URLs à scraper") save: bool = Field(True, description="Sauvegarder les résultats en fichiers Markdown") @validator('urls') def urls_must_be_valid(cls, v): """Validation des URLs.""" for url in v: if not url.startswith(('http://', 'https://')): raise ValueError(f'URL {url} doit commencer par http:// ou https://') return v class ScrapeResponse(BaseModel): """Modèle pour la réponse de scraping.""" url: str = Field(..., description="URL scrapée") title: Optional[str] = Field(None, description="Titre de la page") markdown: Optional[str] = Field(None, description="Contenu en Markdown") saved: bool = Field(False, description="Indique si le fichier a été sauvegardé") saved_path: Optional[str] = Field(None, description="Chemin du fichier sauvegardé") success: bool = Field(..., description="Indique si le scraping a réussi") error: Optional[str] = Field(None, description="Message d'erreur éventuel") class MultipleScrapeResponse(BaseModel): """Modèle pour la réponse de scraping multiple.""" total: int = Field(..., description="Nombre total d'URLs traitées") success: int = Field(..., description="Nombre d'URLs traitées avec succès") results: List[ScrapeResponse] = Field(..., description="Résultats pour chaque URL")