Files
scrap/CHANGELOG.md
2026-01-13 19:49:04 +01:00

6.4 KiB
Executable File

CHANGELOG - PriceWatch

Toutes les modifications notables du projet sont documentées ici.

Le format est basé sur Keep a Changelog.


[Non publié]

En cours

  • Ajout de fixtures HTML réalistes pour tests pytest
  • Tests stores/cdiscount/
  • Tests scraping/ avec mocks

[0.2.0] - 2026-01-13

Ajouté

Tests pytest (Étape 9)

  • tests/core/test_schema.py : 29 tests pour ProductSnapshot
    • Validation Pydantic (URL, source, prix, shipping)
    • Serialization/deserialization JSON
    • Méthodes helper (is_complete, add_error, add_note)
    • Tests des enums (StockStatus, FetchMethod, DebugStatus)
  • tests/core/test_registry.py : 24 tests pour StoreRegistry
    • Enregistrement/désenregistrement de stores
    • Détection automatique avec scores
    • Gestion des doublons et erreurs
    • Tests des fonctions globales (singleton)
  • tests/stores/test_amazon.py : 33 tests pour AmazonStore
    • Tests de match() avec différents domaines Amazon
    • Tests de canonicalize() (normalisation URL)
    • Tests de extract_reference() (extraction ASIN)
    • Tests de parse() avec HTML simplifiés (27/33 passent)

Validation en production

  • Test réussi avec URL Amazon réelle (UGREEN Chargeur)
    • Extraction complète : titre, prix, ASIN, catégorie, images, specs
    • Pipeline HTTP → Parsing → JSON fonctionnel
    • 39.98 EUR, 5 images, 14 caractéristiques techniques extraites

Statistiques

  • 80 tests passent / 86 tests totaux (93%)
  • Configuration pytest complète avec couverture
  • Tests unitaires pour core et stores
  • 6 tests nécessitent fixtures HTML réalistes (priorité basse)

Infrastructure de test

  • pytest + pytest-cov + pytest-mock configurés
  • Fixtures et mock stores pour tests unitaires
  • Configuration dans pyproject.toml
  • Tests organisés par module

Prochaines étapes

  • Fixtures HTML réalistes Amazon/Cdiscount
  • Tests stores/cdiscount/
  • Tests scraping/ avec mocks HTTP/Playwright
  • Phase 2 : Base de données PostgreSQL

[0.1.0] - 2026-01-13

Ajouté

Documentation

  • README.md : documentation complète du projet, usage CLI, architecture
  • TODO.md : liste des tâches priorisées par phase
  • CHANGELOG.md : ce fichier de suivi des modifications
  • CLAUDE.md : guide pour futures instances de Claude Code
  • PROJECT_SPEC.md : spécifications détaillées du projet (français)
  • .gitignore : configuration pour ignorer fichiers temporaires
  • scrap_url.yaml : fichier exemple de configuration

Structure du projet

  • Architecture modulaire complète : pricewatch/app/{core,scraping,stores,cli}
  • Dossiers pour Amazon et Cdiscount avec fixtures
  • Dossier scraped/ pour HTML et screenshots de debug
  • Configuration pyproject.toml avec toutes les dépendances

Core (pricewatch/app/core/)

  • schema.py : Modèle Pydantic ProductSnapshot avec validation complète
    • Enums: StockStatus, FetchMethod, DebugStatus
    • DebugInfo pour traçabilité
    • Méthodes: to_dict(), to_json(), is_complete()
  • logging.py : Système de logging coloré avec niveaux configurables
  • io.py : Fonctions lecture YAML et écriture JSON
    • ScrapingConfig et ScrapingOptions (Pydantic)
    • Sauvegarde HTML et screenshots de debug
  • registry.py : Registry pour détection automatique des stores
    • Enregistrement dynamique
    • Méthode detect_store() avec scores

Scraping (pricewatch/app/scraping/)

  • http_fetch.py : Récupération HTTP avec requests
    • Rotation User-Agent
    • Gestion erreurs (403, 404, 429, timeout)
    • Logging détaillé (durée, taille, status)
  • pw_fetch.py : Récupération Playwright (fallback anti-bot)
    • Mode headless/headful
    • Screenshot optionnel
    • Timeout configurable
    • Fonction fetch_with_fallback() (HTTP → Playwright)

Stores (pricewatch/app/stores/)

  • base.py : Classe abstraite BaseStore
    • Méthodes: match(), canonicalize(), extract_reference(), parse()
    • Chargement automatique des sélecteurs depuis YAML
  • amazon/store.py : Implémentation complète AmazonStore
    • Détection Amazon.fr/Amazon.com
    • Extraction ASIN
    • Parsing avec BeautifulSoup
    • Détection captcha
  • amazon/selectors.yml : Sélecteurs CSS/XPath pour Amazon
  • cdiscount/store.py : Implémentation complète CdiscountStore
    • Détection Cdiscount.com
    • Extraction SKU
    • Support schema.org
  • cdiscount/selectors.yml : Sélecteurs CSS/XPath pour Cdiscount

CLI (pricewatch/app/cli/)

  • main.py : Application Typer complète avec 5 commandes
    • pricewatch run : Pipeline YAML → JSON
    • pricewatch detect : Détection store depuis URL
    • pricewatch fetch : Test récupération HTTP/Playwright
    • pricewatch parse : Test parsing d'un fichier HTML
    • pricewatch doctor : Vérification installation
    • Flag --debug global
    • Affichage avec Rich (tables, couleurs)

Fonctionnalités

  • Pipeline complet : lecture YAML → scraping → parsing → écriture JSON
  • Stratégie fallback automatique : HTTP d'abord, puis Playwright si échec
  • Détection automatique du store depuis l'URL
  • Normalisation des URLs vers forme canonique
  • Extraction des données produit : titre, prix, stock, images, specs
  • Sauvegarde HTML et screenshots pour debug
  • Logs détaillés avec timestamps et couleurs
  • Gestion robuste des erreurs (anti-bot, timeout, parsing)

Contexte technique

  • Python 3.12
  • Typer + Rich pour le CLI
  • Pydantic pour validation données
  • requests + Playwright pour scraping
  • BeautifulSoup4 + lxml pour parsing HTML
  • PyYAML pour configuration
  • pytest pour tests (à venir)

Justifications techniques principales

  1. HTTP prioritaire : Beaucoup plus rapide (~1s vs ~10s Playwright)
  2. Sélecteurs externalisés en YAML : Maintenance facile sans toucher au code
  3. Registry pattern : Extensibilité (ajouter stores sans modifier le core)
  4. ProductSnapshot canonique : Structure unifiée pour tous les stores
  5. Logging systématique : Observabilité cruciale face aux anti-bots
  6. Pas d'optimisation prématurée : Code simple et lisible

Prochaines étapes (Phase 2)

  • Tests pytest avec fixtures HTML
  • Base de données PostgreSQL + Alembic
  • Worker et planification (Redis + RQ/Celery)
  • Web UI responsive avec dark theme Gruvbox
  • Système d'alertes (baisse prix, retour stock)

Format des versions : [MAJOR.MINOR.PATCH]

  • MAJOR : changements incompatibles de l'API
  • MINOR : nouvelles fonctionnalités compatibles
  • PATCH : corrections de bugs compatibles