Spaces:
Sleeping
Sleeping
File size: 2,303 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 |
"""
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") |