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")