Files
scrap/TODO.md
2026-01-14 07:03:38 +01:00

7.0 KiB
Executable File

TODO - PriceWatch

Liste des tâches priorisées pour le développement de PriceWatch.

Légende

  • À faire
  • Terminé
  • [~] En cours

Phase 1 : Fondations CLI

Étape 1 : Documentation et structure

  • Créer README.md complet
  • Créer TODO.md (ce fichier)
  • Créer CHANGELOG.md
  • Créer structure des dossiers du projet
  • Créer pyproject.toml avec dépendances

Étape 2 : Modèle de données

  • Implémenter ProductSnapshot (Pydantic) dans core/schema.py
    • Champs métadonnées (source, url, fetched_at)
    • Champs produit (title, price, currency, shipping_cost, stock_status, reference, images, category, specs)
    • Champs debug (method, errors, notes, status)
    • Validation et serialization JSON

Étape 3 : Core utilitaires

  • Implémenter core/logging.py
    • Configuration logger avec niveaux (DEBUG, INFO, ERROR)
    • Formatage des logs
  • Implémenter core/io.py
    • Lecture YAML (scrap_url.yaml)
    • Écriture JSON (scraped_store.json)
    • Validation des fichiers

Étape 4 : Architecture des stores

  • Implémenter BaseStore abstrait (stores/base.py)
    • Méthode match(url) -> float
    • Méthode canonicalize(url) -> str
    • Méthode extract_reference(url) -> str
    • Méthode fetch(url, method, options) -> str
    • Méthode parse(html, url) -> ProductSnapshot
  • Implémenter Registry (core/registry.py)
    • Enregistrement dynamique des stores
    • Détection automatique du store depuis URL
    • Méthode get_best_store(url)

Étape 5 : Scraping

  • Implémenter scraping/http_fetch.py
    • Fonction fetch_http(url, timeout, headers)
    • Gestion des erreurs (403, timeout, connexion)
    • User-Agent rotation
    • Logging détaillé
  • Implémenter scraping/pw_fetch.py
    • Fonction fetch_playwright(url, options)
    • Support headless/headful
    • Sauvegarde HTML optionnelle
    • Screenshot optionnel
    • Timeout configurable
    • Logging détaillé

Étape 6 : Store Amazon

  • Créer structure stores/amazon/
  • Implémenter stores/amazon/store.py (AmazonStore)
    • match() : détection amazon.fr/amazon.com
    • canonicalize() : nettoyage URL vers /dp/{ASIN}
    • extract_reference() : extraction ASIN
    • parse() : parsing HTML vers ProductSnapshot
  • Créer stores/amazon/selectors.yml
    • Sélecteurs pour title
    • Sélecteurs pour price
    • Sélecteurs pour currency
    • Sélecteurs pour shipping_cost
    • Sélecteurs pour stock_status
    • Sélecteurs pour images
    • Sélecteurs pour category
    • Sélecteurs pour specs
  • Ajouter fixtures HTML dans stores/amazon/fixtures/

Étape 7 : Store Cdiscount

  • Créer structure stores/cdiscount/
  • Implémenter stores/cdiscount/store.py (CdiscountStore)
    • match() : détection cdiscount.com
    • canonicalize() : nettoyage URL
    • extract_reference() : extraction SKU
    • parse() : parsing HTML vers ProductSnapshot
  • Créer stores/cdiscount/selectors.yml
    • Sélecteurs pour tous les champs ProductSnapshot
  • Ajouter fixtures HTML dans stores/cdiscount/fixtures/

Étape 8 : CLI

  • Implémenter cli/main.py avec Typer
    • Commande pricewatch run
    • Commande pricewatch detect
    • Commande pricewatch fetch
    • Commande pricewatch parse
    • Commande pricewatch doctor
    • Flag --debug global
    • Logging vers console

Étape 9 : Tests

  • Configurer pytest dans pyproject.toml
  • Tests core/schema.py (29 tests - 100% coverage)
    • Validation ProductSnapshot
    • Serialization JSON
  • Tests core/registry.py (40 tests - 100% coverage)
    • Enregistrement stores
    • Détection automatique
    • Tests d'intégration avec 4 stores réels
  • Tests core/io.py (36 tests - 97% coverage)
    • Lecture/écriture YAML/JSON
    • Sauvegarde debug HTML/screenshots
  • Tests stores/amazon/ (33 tests - 89% coverage)
    • match() avec différentes URLs
    • canonicalize()
    • extract_reference()
    • parse() sur fixtures HTML
  • Tests stores/cdiscount/ (30 tests - 72% coverage)
    • Tests complets avec fixtures réels
  • Tests stores/backmarket/ (25 tests - 85% coverage)
    • Tests complets avec fixtures réels
  • Tests stores/aliexpress/ (32 tests - 85% coverage)
    • Tests complets avec fixtures réels
  • Tests scraping/ (42 tests)
    • http_fetch avec mock (21 tests - 100% coverage)
    • pw_fetch avec mock (21 tests - 91% coverage)

Étape 10 : Intégration et validation

  • Créer scrap_url.yaml exemple
  • Tester pipeline complet YAML → JSON
  • Tester avec vraies URLs Amazon
  • Tester avec vraies URLs Cdiscount
  • Vérifier tous les modes de debug
  • Valider sauvegarde HTML/screenshots
  • Documentation finale

PHASE 1 TERMINÉE À 100%

État final: 295 tests passent / 295 tests totaux (100%) Coverage global: 76%

Détail par module:

  • core/schema.py: 100% coverage
  • core/registry.py: 100% coverage (40 tests)
  • core/io.py: 97% coverage (36 tests)
  • scraping/http_fetch.py: 100% coverage (21 tests)
  • scraping/pw_fetch.py: 91% coverage (21 tests)
  • stores/amazon/: 89% coverage (33 tests)
  • stores/aliexpress/: 85% coverage (32 tests)
  • stores/backmarket/: 85% coverage (25 tests)
  • stores/cdiscount/: 72% coverage (30 tests)

4 stores opérationnels: Amazon, Cdiscount, Backmarket, AliExpress


Phase 2 : Base de données (En cours)

Persistence

  • Schéma PostgreSQL
  • Migrations Alembic
  • Models SQLAlchemy
  • Connexion DB (engine, session, init)
  • Tests DB de base
  • Repository pattern (ProductRepository)
  • ScrapingPipeline (persistence optionnelle)
  • CLI --save-db/--no-db
  • Tests end-to-end CLI + DB
  • CRUD produits
  • Historique prix

Configuration

  • Fichier config (DB credentials)
  • Variables d'environnement
  • Docker Compose PostgreSQL/Redis

Phase 3 : Worker et automation (En cours)

Worker

  • Setup Redis
  • Worker RQ
  • Queue de scraping
  • Retry policy

Planification

  • Cron ou scheduler intégré
  • Scraping quotidien automatique
  • Logs des runs

Phase 4 : Web UI (Future)

Backend API

  • FastAPI endpoints
  • Authentification
  • CORS

Frontend

  • Framework (React/Vue?)
  • Design responsive
  • Dark theme Gruvbox
  • Graphiques historique prix
  • Gestion alertes

Phase 5 : Alertes (Future)

Notifications

  • Système d'alertes (baisse prix, retour stock)
  • Email
  • Webhooks
  • Push notifications

Améliorations techniques

Performance

  • Cache Redis pour résultats
  • Rate limiting par store
  • Parallélisation scraping

Robustesse

  • Retry automatique sur échec
  • Circuit breaker
  • Monitoring (Prometheus?)

Extensibilité

  • Plugin system pour nouveaux stores
  • Configuration stores externe
  • API publique

Dernière mise à jour: 2026-01-14