Table des matières
Simulateur
Simulateur est une plateforme de simulation boursière construite avec Django : un administrateur prépare un scénario avec des entreprises fictives, des actualités et des événements, puis des équipes de joueurs échangent les actions simulées pendant que les cours bougent en temps réel. C’est un dépôt AlgoÉTS pour les groupes qui veulent animer un jeu de marché, avec une interface d’administration qui règle les paramètres et le déroulement de chaque simulation.
1. Aperçu
Le projet Django se trouve dans simulateur/. simulateur/settings.py déclare deux applications locales, simulation et backtesting, et utilise SQLite sauf si DATABASE_ENGINE=postgresql est défini.
- Moteur de prix.
simulation/logic/simulation_manager.pygarde unSimulationManagerpar simulation. Tant que l’état estongoing, il attend le pas de temps configuré, saute au besoin les heures de fermeture de la Bourse de New York et écrit une chandelle OHLC par action à partir du modèle de bruit choisi (brownian,perlin,random_walk,fbm,randomoumonte_carlodanslogic/noise_patterns/). Chaque chandelle est enregistrée dansStockPriceHistorypuis poussée vers la couche WebSocket. - Cycle de vie.
manage.py start_simulation <ids>passe les simulations à l’étatongoing, vérifie leur état toutes les cinq secondes et applique les réglages modifiés. Les états sont initialized, created, published, ongoing, stopped et finished. - Mises à jour en direct.
simulation/channels/consumers.pysertws/simulation/<room>/et relaie cours, actualités, événements et déclencheurs vers le tableau de jeu. - Échanges.
simulation/api/portfolio.pytraite les ordres d’achat et de vente selon le dernier prix et le solde du portefeuille, et expose positions, rendement et classements. - Création de scénarios. Le tableau de bord admin suit cinq étapes (réglages, entreprises et actions, équipes, événements, révision).
simulation/api/ai_llm.pypeut rédiger actualités, événements, déclencheurs, entreprises ou scénarios complets avec un modèle Ollama (OLLAMA_MODEL,llama3par défaut). - Application de backtesting.
backtesting/ajoute une recherche de graphiques, la gestion de stratégies et une page bac à sable, des points d’accès de données nommés pour FMP, CoinGecko et yfinance, ainsi que des tâches Celery pour exécuter les stratégies.
run.py relie le tout : il installe les dépendances, applique les migrations, crée un superadmin, charge les CSV de data/, puis démarre Daphne (et, au besoin, les simulations et le CMS Wagtail sur le port 8001) dans des fils d’exécution séparés. Dans l’image Docker, run.sh exécute les mêmes étapes de migration, de chargement et de superadmin avant run.py --start-simulation 1.
2. Cas d’utilisation
Jeu boursier Django : les admins lancent des scénarios scriptés et les équipes échangent des actions simulées en direct.
- Créer un scénario
- Admin de simulation
Le tableau de bord admin suit cinq étapes de formulaire (réglages, entreprises et actions, équipes, événements, révision) appuyées sur les API de scénario et de gestionnaire de simulation.
- Lancer une simulation
- Admin de simulation
manage.py start_simulation passe une simulation à l’état en cours ; SimulationManager écrit ensuite des chandelles OHLC à partir du modèle de bruit choisi (brownien, Perlin, marche aléatoire, fBm, Monte-Carlo) à chaque pas.
- Générer du contenu par IA
- Admin de simulationLLM Ollama
simulation/api/ai_llm.py expose create-news-ai, create-event-ai, create-trigger-ai, create-company-stock-ai et create-scenario-ai, qui interrogent un modèle Ollama (OLLAMA_MODEL, llama3 par défaut).
- Rejoindre une équipe
- Joueur
Un membre génère un lien d’invitation depuis le tableau d’équipe (team/generate-join-link/) et les autres joueurs s’en servent pour entrer ; la même page affiche membres et classements.
- Acheter et vendre des actions
- Joueur
Depuis /dashboard/, le formulaire d’ordre appelle POST /api/stock/buy/ ou /api/stock/sell/, qui vérifient le solde au dernier prix, enregistrent l’ordre et mettent à jour les positions.
- Suivre les cours en direct
- Joueur
Le tableau de jeu ouvre ws/simulation/<id>/ et Django Channels pousse les mises à jour de cours, actualités, événements et déclencheurs depuis SimulationConsumer.
2.1. Scénario : Lancer la simulation de démonstration
- Dans simulateur/, copier env-default vers .env et exécuter python3 run.py --install pour installer, migrer, créer admin/admin et charger les CSV.
- Démarrer le serveur ASGI et la simulation 1 avec python3 run.py --start-simulation 1 (Daphne sur le port 8000).
- Se connecter en admin et ouvrir /dashboard/admin pour revoir le scénario, les réglages et la fonction de bruit.
- Ouvrir /dashboard/game : les chandelles arrivent par le WebSocket ws/simulation/ à chaque pas de temps.
- Depuis /dashboard/, choisir la simulation et une action puis cliquer sur Buy, qui appelle POST /api/stock/buy/ ; consulter ensuite positions et classements.
Fichiers consultésREADME.mdsimulateur/run.pysimulateur/entrypoint.shsimulateur/docker-compose.ymlsimulateur/requirements.txtsimulateur/simulateur/settings.pysimulateur/simulateur/urls.pysimulateur/simulation/urls.pysimulateur/simulation/logic/simulation_manager.pysimulateur/simulation/logic/broker.pysimulateur/simulation/logic/BuySellQueue.pysimulateur/simulation/api/portfolio.pysimulateur/simulation/api/ai_llm.pysimulateur/simulation/channels/consumers.pysimulateur/simulation/management/commands/start_simulation.pysimulateur/simulation/management/commands/seed_database.pydocs/diagrams/actors.plantumlsimulateur/simulation/templates/dashboard/user_dashboard.html
3. Comment bougent les cours
À chaque pas, SimulationManager.apply_changes lit la dernière clôture P de l’action (ou 0.0 si l’action n’a pas encore d’historique) et demande une chandelle au modèle de bruit choisi. Chaque modèle implémente NoiseStrategy.generate_noise(price, fluctuation_rate, time_index). Dans les formules ci-dessous, σ est le fluctuation_rate de la simulation (0,1 par défaut), N(0, σ) un tirage normal et U(a, b) un tirage uniforme. L’ouverture vaut toujours P.
| Réglage | Classe | Clôture | Haut et bas |
|---|---|---|---|
brownian | BrownianMotion | P + N(0, σ) | max/min de l’ouverture et de la clôture, élargis de U(0, 2σ) |
perlin | Perlin | P + pnoise1(0.1 · t) · 10σ | mêmes mèches que brownian |
random_walk | RandomWalk | P ± U(0, 5σ), signe tiré à pile ou face | max/min de l’ouverture et de la clôture, sans mèche |
fbm | Fbm | uniforme entre le bas et le haut | P + U(0, 5σ) et P − U(0, 5σ) |
random | RandomCandle | même code que fbm | même code que fbm |
monte_carlo | MonteCarlo | moyenne de 100 trajectoires simulées | max et min de ces trajectoires |
Ce que chaque modèle donne en pratique :
- Mouvement brownien. Chaque clôture ajoute un pas gaussien à la précédente. Les pas sont indépendants : la série erre sans mémoire ni tendance. Le pas est absolu (en dollars), pas un pourcentage.
- Bruit de Perlin.
noise.pnoise1renvoie une valeur lisse et continue pour une entrée donnée : les chandelles successives dérivent par vagues au lieu de sauter.test un compteur unique partagé par toutes les actions de la simulation et incrémenté après chaque chandelle ; avec trois actions, chacune lit donc un échantillon sur trois de la même courbe. - Marche aléatoire. Un pile ou face choisit la hausse ou la baisse, puis un montant uniforme jusqu’à
5σfixe l’amplitude. Les chandelles ont un corps mais pas d’ombres. - « Mouvement brownien fractionnaire » et aléatoire. Les deux tirent un haut et un bas autour de l’ouverture, puis placent la clôture n’importe où entre les deux. Rien ne relie l’accroissement d’une chandelle à celui de la suivante : la corrélation à long terme qui définit le mouvement brownien fractionnaire n’est pas modélisée, et les deux classes sont identiques ligne pour ligne.
- Monte-Carlo. La classe simule 100 trajectoires de mouvement brownien géométrique sans dérive,
S(t) = S(t−1) · exp(−σ²/2 · dt + σ · √dt · Z), et les résume en une chandelle. C’est le seul modèle multiplicatif, donc le seul qui ne peut pas passer sous zéro. Avec l’horizon par défauttime_horizon=1, toutefois, la bouclefor t in range(1, 1)ne s’exécute jamais : toutes les trajectoires restent àPet la chandelle est plate.
Comme les cinq premiers modèles ajoutent un pas absolu au prix, rien n’empêche un cours de devenir négatif. La capture du tableau de jeu ci-dessous le montre : l’action Cambridge City Football Club s’échange autour de −146.
4. Cycle de vie d’une simulation
SimulationManager.state est un champ Django TextChoices. ChangeSimulationManagerState, dans simulation/api/simulation_manager.py, n’accepte que les transitions ci-dessous, et les boutons « Move to … » du tableau admin proposent la même liste. La boucle de simulation réagit à l’état qu’elle lit dans la base : elle démarre sur ongoing, sort de sa boucle sur stopped ou finished, et le fil de surveillance s’arrête définitivement sur finished.
stateDiagram-v2
[*] --> initialized
initialized --> created
created --> published
published --> ongoing: l’admin lance la partie
ongoing --> stopped: l’admin met en pause
stopped --> ongoing: l’admin reprend
stopped --> finished: l’admin termine la partie
ongoing --> finished: run_duration atteint (posé par la boucle)
finished --> [*]
Deux boucles pilotent ce cycle. manage.py start_simulation <ids> passe chaque simulation à ongoing dans une transaction select_for_update, puis lance un fil par simulation qui relit la ligne toutes les cinq secondes, appelle start_simulation() quand l’état est ongoing et réapplique les SimulationSettings quand ils changent. Dans start_simulation(), chaque itération relit la ligne, vérifie l’état, saute le calcul des prix pendant la fermeture de la Bourse de New York (fins de semaine, et hors de 9 h à 16 h, heure de l’Est) si close_stock_market_at_night est activé, écrit les chandelles, puis dort timer_step × unité secondes (10 secondes par défaut). Après run_duration (100 000 secondes), la boucle écrit elle-même finished.
5. Mises à jour en direct par WebSocket
Les cours arrivent au navigateur par Django Channels, avec une couche de canaux Redis pub/sub (channels_redis.pubsub.RedisPubSubChannelLayer, hôte redis par défaut).
sequenceDiagram
participant Sim as Boucle SimulationManager
participant DB as PostgreSQL
participant Layer as Couche de canaux Redis
participant Consumer as SimulationConsumer
participant Browser as Tableau de jeu
Browser->>Consumer: connexion ws/simulation/<simulation_manager_id>/
Consumer->>Layer: group_add("simulation_<id>")
loop à chaque pas de temps
Sim->>Sim: le modèle de bruit produit une chandelle OHLC
Sim->>DB: StockPriceHistory.objects.create(...)
Sim->>Layer: group_send("simulation_1", type="stock_update")
Layer->>Consumer: stock_update(event)
Consumer->>Browser: JSON {ticker, open, high, low, close, timestamp}
Browser->>Browser: bufferUpdate() redessine le graphique
end
Browser->>Consumer: JSON type news avec un message
Consumer->>Layer: group_send(type="news_update")
Layer->>Consumer: news_update(event)
Consumer->>Browser: JSON type news avec le message
Le consommateur (simulation/channels/consumers.py) rejoint un groupe par salle et répartit les messages entrants selon leur type : stock, news, trigger, event et transaction. Chaque gestionnaire rediffuse au groupe, et la méthode *_update correspondante renvoie le contenu à chaque navigateur connecté. Le tableau de jeu (templates/dashboard/game_dashboard.html) lit l’identifiant de simulation dans le paramètre simulation_manager_id de l’URL (1 par défaut), se reconnecte jusqu’à dix fois toutes les cinq secondes et envoie au tampon du graphique les messages qui portent un ticker et un timestamp.
6. Écrans
Ces captures viennent du README du dépôt.





7. Démarrage
Le parcours Docker Compose du README lance Django, Celery, PostgreSQL, un serveur Dragonfly compatible Redis et MinIO. Le fichier Compose et son .env se trouvent dans simulateur/ :
cd simulateur
cp env-default .env
docker compose --profile all down
docker compose --profile all up -d --build
Sans Docker, passez par run.py (le README écrit python3 -m run.py, mais le script se lance directement) :
cd simulateur
python3 run.py --install
python3 run.py --start-simulation 1
--install crée un superadmin de développement local avec l’identifiant d’exemple du README (admin/admin) et remplit la base ; changez-le avant d’exposer l’application. Pour créer un autre superadmin avec vos propres valeurs :
python3 manage.py createsuperadmin --username=<nom> --password=<mot-de-passe> --email=<courriel>
Les tests Django de simulation/tests/ se lancent avec python3 manage.py test. Les pages Swagger et ReDoc sont servies à /swagger/ et /redoc/.
8. Guide du dépôt
simulateur/run.py: installation, migrations, données initiales et démarrage de Daphne, des simulations ou du CMS.simulateur/simulateur/: réglages, routes racines, point d’entrée ASGI (asgi.py) et application Celery.simulateur/simulation/logic/: boucle de simulation, modèles de bruit, courtier et file d’achat et de vente.simulateur/simulation/api/: vues REST des entreprises, actions, scénarios, gestionnaires de simulation, actualités, événements, déclencheurs, équipes, portefeuilles et génération par IA.simulateur/simulation/channels/: consommateur WebSocket et routage.simulateur/simulation/models/: modèles de scénario, entreprise, action, équipe, portefeuille, ordre et réglages.simulateur/simulation/management/commands/:start_simulation,seed_databaseetcreatesuperadmin.simulateur/simulation/templates/: tableaux de bord admin, jeu, équipe et utilisateur, composés de gabarits partiels.simulateur/simulation/tests/: tests de l’API, des modèles, de la logique, des canaux et des commandes.simulateur/backtesting/: vues, API de données, modèles et tâches Celery de backtesting.simulateur/cms/: un projet Wagtail distinct.simulateur/data/: données initiales en CSV (entreprises, actions, scénarios, équipes, utilisateurs, événements, déclencheurs …).notebooks/: prototypes du courtier, des agents, du bruit, des graphiques et des stratégies.docs/diagrams/: diagrammes PlantUML de cas d’utilisation et de séquence.
9. Fonctionnalités
- créer des entreprises avec leur historique, des actions, des équipes et des profils de joueurs ;
- régler par simulation le pas de temps, le taux de fluctuation, la fermeture hors séance et le modèle de bruit ;
- démarrer, arrêter et terminer les simulations depuis le tableau admin ou en ligne de commande ;
- diffuser chandelles OHLC, actualités, événements et déclencheurs aux joueurs par WebSocket ;
- acheter et vendre des actions selon le solde du portefeuille, puis suivre positions et rendement ;
- classer joueurs et équipes et inviter des joueurs avec un lien d’équipe ;
- rédiger le contenu d’un scénario avec un modèle Ollama local ;
- se connecter avec un compte local ou Google, GitHub, Microsoft et Notion grâce à django-allauth ;
- exposer des vérifications de santé, des métriques Prometheus et une description OpenAPI.
10. Limites
- Le README indique Django 4.2.13 ;
requirements.txtfixe Django 5.0.8. Le badge du README annonce Python 3.12, alors que l’image Docker utilise Python 3.10. - Les cours sont diffusés dans la salle WebSocket
1, quel que soit l’identifiant de simulation : tel qu’écrit, seule la simulation 1 reçoit les mises à jour en direct. - Le mode d’échange
dynamics’appuie surlogic/broker.py, qui importe le moduleBuySellQueueau lieu de la classe et omet l’argumentsimulation_manager; ce chemin semble inachevé. Le mode par défaut eststatic. logic/noise_patterns/contient aussi des modèles GBM, Heston, Ornstein-Uhlenbeck et Vasicek que le gestionnaire de simulation ne propose pas.- Le formulaire de réglages propose
othercomme fonction de bruit et le gestionnaire accepterandom; aucune des deux listes ne contient l’autre valeur, et choisirotherlèveUnsupported noise function. - Le modèle
monte_carlorenvoie des chandelles plates avec son horizon par défaut d’un pas, et les modèles additifs permettent des cours négatifs (voir Comment bougent les cours). - Le consommateur envoie les actualités sous la forme
{"type": "news", "message": …}, mais le tableau de jeu litmessageData.news_itemsetmessageData.transactions: sur cette page, actualités et transactions reçues par WebSocket valentundefined. - Le réglage
intervalest enregistré et réappliqué, mais la boucle ne dort quetimer_step. - La vue d’achat et de vente accepte un champ
pricevenant de la requête et ne revient à la dernière clôture que s’il est absent. backtesting/batchbacktesting.pyimporte des modulessrc.dataetstrategiesabsents du dépôt.- Les points d’accès IA exigent un serveur Ollama joignable ;
entrypoint.shen démarre un et télécharge un modèle, mais ni le Dockerfile ni le fichier Compose ne l’utilisent. - Les valeurs par défaut reposent sur des identifiants de démonstration faibles (
admin/admin,minioadmin,postgres), etscripts/contient un certificat et une clé pour localhost.
11. Sources
- Dépôt GitHub
- README
simulateur/run.pysimulateur/simulation/logic/simulation_manager.pysimulateur/simulation/logic/noise_patterns/simulateur/simulation/api/simulation_manager.pysimulateur/simulation/channels/consumers.pysimulateur/simulation/management/commands/start_simulation.pysimulateur/simulation/urls.pysimulateur/simulation/api/portfolio.pysimulateur/docker-compose.yml
12. Pipeline CI/CD
Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.
Généré à partir du code au commit 77f9e70.
13. Schéma de déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
image["Image Docker<br/>FROM python:3.10-slim"]
subgraph compose["Docker Compose"]
svc_django["django"]
svc_redis["redis"]
svc_minio["minio"]
svc_minio_client["minio-client"]
svc_db["db"]
svc_celery["celery"]
end
repo -->|"docker build"| image
image -->|"docker compose up"| compose
14. Dépendances externes
193 paquets déclarés (193 à l’exécution, 0 pour le développement) dans simulateur/requirements.txt, simulateur/cms/requirements.txt.
Tableau des paquets 80 / 193
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
amqp | ==5.2.0 | exécution | Low-level AMQP client for Python (fork of amqplib). | pypi.org |
annotated-types | ==0.7.0 | exécution | Reusable constraint types to use with typing.Annotated | pypi.org |
anyio | ==4.4.0 | exécution | High-level concurrency and networking framework on top of asyncio or Trio | pypi.org |
asgiref | ==3.8.1 | exécution | ASGI specs, helper code, and adapters | pypi.org |
async-timeout | ==4.0.3 | exécution | Timeout context manager for asyncio programs | pypi.org |
attrs | ==24.2.0 | exécution | Validation des données | pypi.org |
babel | ==2.16.0 | exécution | Outils de build | pypi.org |
beautifulsoup4 | ==4.12.3 | exécution | Extraction web et analyse | pypi.org |
bleach | ==6.1.0 | exécution | An easy safelist-based HTML-sanitizing tool. | pypi.org |
build | ==1.2.1 | exécution | Outils de build | pypi.org |
cachecontrol | ==0.14.0 | exécution | httplib2 caching for requests | pypi.org |
certifi | ==2023.11.17 | exécution | Python package for providing Mozilla's CA Bundle. | pypi.org |
cffi | ==1.17.0 | exécution | Foreign Function Interface for Python calling C code. | pypi.org |
channels | ==4.1.0 | exécution | Messagerie temps réel | pypi.org |
channels-redis | — | exécution | Accès aux données | pypi.org |
chardet | ==5.2.0 | exécution | Universal character encoding detector | pypi.org |
charset-normalizer | ==3.3.2 | exécution | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet. | pypi.org |
cleo | ==2.1.0 | exécution | Cleo allows you to create beautiful and testable command-line interfaces. | pypi.org |
click | ==8.1.7 | exécution | Ligne de commande | pypi.org |
click-didyoumean | ==0.3.1 | exécution | Enables git-like *did-you-mean* feature in click | pypi.org |
colorama | ==0.4.6 | exécution | Ligne de commande | pypi.org |
constantly | ==23.10.4 | exécution | Symbolic constants in Python | pypi.org |
contourpy | ==1.2.1 | exécution | Python library for calculating contours of 2D quadrilateral grids | pypi.org |
crashtest | ==0.4.1 | exécution | Tests | pypi.org |
cryptography | ==43.0.0 | exécution | Authentification et sécurité | pypi.org |
cssselect2 | ==0.7.0 | exécution | CSS selectors for Python ElementTree | pypi.org |
cycler | ==0.12.1 | exécution | Composable style cycles | pypi.org |
daphne | ==2.5.0 | exécution | Django ASGI (HTTP/WebSocket) server | pypi.org |
defusedxml | ==0.8.0rc2 | exécution | XML bomb protection for Python stdlib modules | pypi.org |
distlib | ==0.3.8 | exécution | Distribution utilities | pypi.org |
django | ==5.0.8 | exécution | Cadriciel web | pypi.org |
django-allauth | ==64.1.0 | exécution | Cadriciel web | pypi.org |
django-allauth-ui | ==1.4.1 | exécution | Cadriciel web | pypi.org |
django-any-urlfield | ==2.7.post1 | exécution | Cadriciel web | pypi.org |
django-appconf | ==1.0.6 | exécution | Cadriciel web | pypi.org |
django-check-seo | ==1.0.1 | exécution | Cadriciel web | pypi.org |
django-classy-tags | ==4.1.0 | exécution | Cadriciel web | pypi.org |
django-cms | ==3.11.6 | exécution | Cadriciel web | pypi.org |
django-colorfield | ==0.11.0 | exécution | Cadriciel web | pypi.org |
django-cors-headers | ==4.4.0 | exécution | Cadriciel web | pypi.org |
django-easy-audit | ==1.3.6 | exécution | Cadriciel web | pypi.org |
django-extensions | ==3.2.3 | exécution | Cadriciel web | pypi.org |
django-filer | ==3.1.4 | exécution | Cadriciel web | pypi.org |
django-formtools | ==2.5.1 | exécution | Cadriciel web | pypi.org |
django-guest-user | ==0.5.5 | exécution | Cadriciel web | pypi.org |
django-health-check | ==3.18.3 | exécution | Cadriciel web | pypi.org |
django-imagekit | ==5.0.0 | exécution | Cadriciel web | pypi.org |
django-jet-reboot | ==1.3.7 | exécution | Cadriciel web | pypi.org |
django-meta | ==2.4.2 | exécution | Cadriciel web | pypi.org |
django-money | ==3.5.3 | exécution | Cadriciel web | pypi.org |
django-organizations | ==2.4.1 | exécution | Cadriciel web | pypi.org |
django-perf-rec | ==4.26.0 | exécution | Cadriciel web | pypi.org |
django-pictures | ==1.3.3 | exécution | Cadriciel web | pypi.org |
django-polymorphic | ==3.1.0 | exécution | Cadriciel web | pypi.org |
django-prometheus | ==2.3.1 | exécution | Cadriciel web | pypi.org |
django-pwa | ==2.0.0 | exécution | Cadriciel web | pypi.org |
django-robots | ==6.1 | exécution | Cadriciel web | pypi.org |
django-rq | ==2.10.2 | exécution | Cadriciel web | pypi.org |
django-sekizai | ==4.1.0 | exécution | Cadriciel web | pypi.org |
django-sslserver | ==0.22 | exécution | Cadriciel web | pypi.org |
django-storages | ==1.12.3 | exécution | Cadriciel web | pypi.org |
django-tinymce | ==4.1.0 | exécution | Cadriciel web | pypi.org |
django-treebeard | ==4.7.1 | exécution | Cadriciel web | pypi.org |
django-typer | ==2.2.1 | exécution | Cadriciel web | pypi.org |
django-webpack-loader | ==3.1.0 | exécution | Cadriciel web | pypi.org |
django-widget-tweaks | ==1.5.0 | exécution | Cadriciel web | pypi.org |
djangocms-admin-style | ==3.3.1 | exécution | Cadriciel web | pypi.org |
djangocms-page-meta | ==1.4.4 | exécution | Cadriciel web | pypi.org |
djangorestframework | ==3.15.2 | exécution | Cadriciel web | pypi.org |
drf-yasg | ==1.21.7 | exécution | Automated generation of real Swagger/OpenAPI 2.0 schemas from Django Rest Framework code. | pypi.org |
dulwich | ==0.21.7 | exécution | Python Git Library | pypi.org |
easy-thumbnails | ==2.9 | exécution | Easy thumbnails for Django | pypi.org |
fastjsonschema | ==2.20.0 | exécution | Validation des données | pypi.org |
feedparser | ==6.0.11 | exécution | Extraction web et analyse | pypi.org |
filelock | ==3.15.4 | exécution | A platform independent file lock. | pypi.org |
fonttools | ==4.53.1 | exécution | Tools to manipulate font files | pypi.org |
google-api-python-client | ==1.4.1 | exécution | Google API Client Library for Python | pypi.org |
h11 | ==0.14.0 | exécution | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1 | pypi.org |
hiredis | ==3.0.0 | exécution | Accès aux données | pypi.org |
hyperlink | ==21.0.0 | exécution | A featureful, immutable, and correct URL for Python. | pypi.org |
113 autres paquets figurent dans les manifestes.
15. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
API
Une interface par laquelle des composants logiciels échangent des requêtes et des résultats. Une API n’utilise pas nécessairement HTTP.
HTTP
Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.
Session
Un état conservé entre plusieurs requêtes, souvent pour suivre un utilisateur connecté. L’authentification et les permissions restent des vérifications distinctes.
Conteneur
Un environnement de processus isolé créé à partir d’une image. Les données persistantes nécessitent un stockage hors de son système de fichiers temporaire.
Docker Compose
Un format de configuration et un outil pour lancer des conteneurs, réseaux et volumes associés. L’ordre de démarrage ne garantit pas qu’un service est prêt.
Port publié
Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
Compilation
Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.
Intégration continue
Des vérifications automatiques lors des changements de source, comme la compilation, les tests et l’analyse statique. Elles ne couvrent que ce qu’elles vérifient.
Mermaid
Un langage de diagrammes textuel. Les nœuds et liens décrivent un modèle ; le diagramme n’exécute pas le projet.
Maillage
Une surface représentée par des sommets et des éléments reliés, souvent des triangles. Sa géométrie est distincte de son matériau ou de sa texture.
Base de données
Un système de stockage et d’interrogation de données structurées. Son schéma, ses règles d’accès et sa persistance déterminent comment l’application utilise ces données.
16. Références
- AlgoÉTS. (2026, 5 novembre). [Web page] github.com.
- AlgoETS. (2026, 5 novembre). Simulateur. [Software repository] github.com.
- AlgoETS. (2026, 5 novembre). README. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/run.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/simulation/logic/simulation_manager.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/simulation/logic/noise_patterns/. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/simulation/api/simulation_manager.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/simulation/channels/consumers.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/simulation/management/commands/start_simulation.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/simulation/urls.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/simulation/api/portfolio.py. [Source file or documentation] github.com.
- AlgoETS. (2026, 5 novembre). simulateur/docker-compose.yml. [Source file or documentation] github.com.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.