No description
  • Python 71.2%
  • JavaScript 14.1%
  • CSS 9%
  • HTML 4.6%
  • Dockerfile 1%
  • Other 0.1%
Find a file
François Boulogne 6cc76f9d47 debug
2026-08-19 21:28:10 +02:00
scripts start project 2026-08-19 19:57:44 +02:00
src/stocktracker debug 2026-08-19 21:28:10 +02:00
tests Sort companies alphabetically and add 3Y/5Y/10Y variations 2026-08-19 21:15:18 +02:00
.dockerignore start project 2026-08-19 19:57:44 +02:00
.gitignore start project 2026-08-19 19:57:44 +02:00
.python-version start project 2026-08-19 19:57:44 +02:00
docker-compose.yml add password 2026-08-19 20:28:11 +02:00
Dockerfile add password 2026-08-19 20:28:11 +02:00
pyproject.toml add password 2026-08-19 20:28:11 +02:00
README.md debug 2026-08-19 21:28:10 +02:00
uv.lock add password 2026-08-19 20:28:11 +02:00

Stocktracker

Tableau de bord boursier synthétique par code ISIN, en Python (FastAPI), hébergeable avec Docker Compose.

Fonctionnalités

  • Ajoutez des codes ISIN et retrouvez automatiquement le titre associé (résolution via l'API OpenFIGI, avec repli sur Yahoo Finance).
  • Pour chaque titre : graphique interactif (Plotly : zoom, survol, curseur de période sur 2 ans) à gauche, et à droite les variations jour / semaine / mois / trimestre / année / 3 ans / 5 ans / 10 ans (vert si positif, rouge si négatif), avec le dernier cours et la devise.
  • Les entreprises d'une page sont affichées par ordre alphabétique.
  • Organisez les ISIN en plusieurs pages nommables pour ne pas surcharger une seule vue.
  • Données mises en cache (15 min par défaut) pour limiter les appels aux API de cours.
  • Accès protégé par mot de passe : toute la navigation et l'API sont derrière un écran de connexion (session sécurisée par cookie signé, 30 jours).

Démarrage rapide avec Docker

docker compose up -d --build

Puis ouvrez http://localhost:8001 (port hôte configurable dans docker-compose.yml) et connectez-vous avec le mot de passe (défaut : admin, voir STOCKTRACKER_PASSWORD ci-dessous).

Les données (pages, ISIN, cache de résolution) sont persistées dans le volume ./data (base SQLite). Un docker compose up -d --build recrée le conteneur mais ne touche pas à ./data : la base survit aux rebuilds. Au démarrage, le conteneur affiche dans les logs le chemin et le contenu de la base utilisée (ex. Database ready at /app/data/stocktracker.db: 2 pages, 7 ISINs).

Démarrage local (développement)

uv sync
uv run stocktracker

Serveur sur http://localhost:8000. Tests : uv run pytest.

Configuration

Variables d'environnement (définies par défaut dans docker-compose.yml) :

Variable Défaut Description
STOCKTRACKER_HOST 0.0.0.0 Adresse d'écoute du serveur
STOCKTRACKER_PORT 8000 Port d'écoute
STOCKTRACKER_DB data/stocktracker.db Chemin de la base SQLite
STOCKTRACKER_TTL_MINUTES 15 Durée du cache des cours en minutes
STOCKTRACKER_PASSWORD admin Mot de passe de connexion à l'interface
STOCKTRACKER_SESSION_SECRET stocktracker-session Clé de signature des cookies de session

Changez STOCKTRACKER_PASSWORD (et idéalement STOCKTRACKER_SESSION_SECRET) pour toute installation réelle, par exemple via STOCKTRACKER_PASSWORD=motdepasse docker compose up -d --build.

Structure

src/stocktracker/
├── main.py      # Application FastAPI + routes API + middleware d'authentification
├── auth.py      # Mot de passe (bcrypt) et sessions signées (itsdangerous)
├── db.py        # Persistance SQLite (pages, ISIN, cache ISIN→ticker)
├── market.py    # Résolution ISIN et historique des cours (yfinance)
├── metrics.py   # Calcul des variations sur les périodes
├── charts.py    # Génération des figures Plotly
└── static/      # Interface web (HTML, CSS, JS vanilla)

Versions

Bump automatique au format AAAA.MM.JJ.N : uv run bumpver update --patch.