- Python 71.2%
- JavaScript 14.1%
- CSS 9%
- HTML 4.6%
- Dockerfile 1%
- Other 0.1%
| scripts | ||
| src/stocktracker | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| .python-version | ||
| docker-compose.yml | ||
| Dockerfile | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
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éalementSTOCKTRACKER_SESSION_SECRET) pour toute installation réelle, par exemple viaSTOCKTRACKER_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.