before claude

This commit is contained in:
Gilles Soulier
2026-01-18 06:26:17 +01:00
parent dc19315e5d
commit 740c3d7516
60 changed files with 3815 additions and 354 deletions

View File

@@ -93,13 +93,52 @@ class ProductSnapshot(BaseModel):
reference: Optional[str] = Field(
default=None, description="Référence produit (ASIN, SKU, etc.)"
)
asin: Optional[str] = Field(
default=None, description="ASIN Amazon si disponible"
)
category: Optional[str] = Field(default=None, description="Catégorie du produit")
type: Optional[str] = Field(default=None, description="Type du produit")
description: Optional[str] = Field(default=None, description="Description produit")
# Données Amazon explicites (si disponibles)
rating_value: Optional[float] = Field(
default=None, description="Note moyenne affichée"
)
rating_count: Optional[int] = Field(
default=None, description="Nombre d'évaluations"
)
amazon_choice: Optional[bool] = Field(
default=None, description="Badge Choix d'Amazon présent"
)
amazon_choice_label: Optional[str] = Field(
default=None, description="Libellé du badge Choix d'Amazon"
)
discount_text: Optional[str] = Field(
default=None, description="Texte de réduction affiché"
)
stock_text: Optional[str] = Field(
default=None, description="Texte brut de stock"
)
in_stock: Optional[bool] = Field(
default=None, description="Disponibilité dérivée"
)
model_number: Optional[str] = Field(
default=None, description="Numéro du modèle de l'article"
)
model_name: Optional[str] = Field(
default=None, description="Nom du modèle explicite"
)
# Médias
images: list[str] = Field(
default_factory=list, description="Liste des URLs d'images du produit"
)
main_image: Optional[str] = Field(
default=None, description="Image principale du produit"
)
gallery_images: list[str] = Field(
default_factory=list, description="Images de galerie dédoublonnées"
)
# Caractéristiques techniques
specs: dict[str, str] = Field(
@@ -134,6 +173,12 @@ class ProductSnapshot(BaseModel):
"""Filtre les URLs d'images vides."""
return [url.strip() for url in v if url and url.strip()]
@field_validator("gallery_images")
@classmethod
def validate_gallery_images(cls, v: list[str]) -> list[str]:
"""Filtre les URLs de galerie vides."""
return [url.strip() for url in v if url and url.strip()]
model_config = ConfigDict(
use_enum_values=True,
json_schema_extra={