mriusero
fix: add binary files via LFS only
698ce3e
"""
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")