Aller au contenu
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.

Application webAPIDocker
PythonDjangoDjango REST frameworkChannelsDaphneCeleryPostgreSQLRedisMinIOOllamaWagtail
  • Mis à jour

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.py garde un SimulationManager par simulation. Tant que l’état est ongoing, 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, random ou monte_carlo dans logic/noise_patterns/). Chaque chandelle est enregistrée dans StockPriceHistory puis poussée vers la couche WebSocket.
  • Cycle de vie. manage.py start_simulation <ids> passe les simulations à l’état ongoing, 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.py sert ws/simulation/<room>/ et relaie cours, actualités, événements et déclencheurs vers le tableau de jeu.
  • Échanges. simulation/api/portfolio.py traite 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.py peut rédiger actualités, événements, déclencheurs, entreprises ou scénarios complets avec un modèle Ollama (OLLAMA_MODEL, llama3 par 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.

Diagramme de cas d’utilisation de Simulateur : Créer un scénario; Lancer une simulation; Générer du contenu par IA; Rejoindre une équipe; Acheter et vendre des actions; Suivre les cours en directSimulateurCréer un scénarioLancer une simulationGénérer du contenu par IARejoindre une équipeAcheter et vendre des actionsSuivre les cours en directAdmin de simulationJoueur«système»LLM Ollama
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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

  1. 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.
  2. Démarrer le serveur ASGI et la simulation 1 avec python3 run.py --start-simulation 1 (Daphne sur le port 8000).
  3. Se connecter en admin et ouvrir /dashboard/admin pour revoir le scénario, les réglages et la fonction de bruit.
  4. Ouvrir /dashboard/game : les chandelles arrivent par le WebSocket ws/simulation/ à chaque pas de temps.
  5. 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églageClasseClôtureHaut et bas
brownianBrownianMotionP + N(0, σ)max/min de l’ouverture et de la clôture, élargis de U(0, 2σ)
perlinPerlinP + pnoise1(0.1 · t) · 10σmêmes mèches que brownian
random_walkRandomWalkP ± U(0, 5σ), signe tiré à pile ou facemax/min de l’ouverture et de la clôture, sans mèche
fbmFbmuniforme entre le bas et le hautP + U(0, 5σ) et P − U(0, 5σ)
randomRandomCandlemême code que fbmmême code que fbm
monte_carloMonteCarlomoyenne de 100 trajectoires simuléesmax 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.pnoise1 renvoie une valeur lisse et continue pour une entrée donnée : les chandelles successives dérivent par vagues au lieu de sauter. t est 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éfaut time_horizon=1, toutefois, la boucle for t in range(1, 1) ne s’exécute jamais : toutes les trajectoires restent à P et 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.

Tableau admin avec le formulaire de scénario en cinq étapes et trois simulations aux états ongoing et published
Tableau admin : étape 1 du formulaire de scénario (pas de temps, intervalle, fonction de bruit) et liste des simulations avec leurs boutons de transition d’état.

Tableau de jeu avec des graphiques en chandelles en direct pour trois actions et le fil des ordres
Tableau de jeu : chandelles en direct reçues par WebSocket, à côté du fil des transactions. Les modèles de bruit additifs laissent le cours de CCFC passer sous zéro.

Vue du marché listant entreprises, événements, actualités, transactions récentes, équipes et déclencheurs
Vue du marché : entreprises, événements, actualités, transactions, équipes et déclencheurs du scénario.

Tableau utilisateur avec le formulaire d’achat et de vente, les positions, l’historique des ordres et des diagrammes circulaires de rendement
Tableau utilisateur : formulaire d’achat et de vente, positions avec variation de prix, historique des ordres et rendement par secteur, industrie et pays.

Tableau d’équipe avec le solde, le bouton de lien d’invitation et les fiches des membres
Tableau d’équipe : solde de l’équipe, génération du lien d’invitation et soldes des membres.

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_database et createsuperadmin.
  • 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.txt fixe 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 dynamic s’appuie sur logic/broker.py, qui importe le module BuySellQueue au lieu de la classe et omet l’argument simulation_manager ; ce chemin semble inachevé. Le mode par défaut est static.
  • 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 other comme fonction de bruit et le gestionnaire accepte random ; aucune des deux listes ne contient l’autre valeur, et choisir other lève Unsupported noise function.
  • Le modèle monte_carlo renvoie 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 lit messageData.news_items et messageData.transactions : sur cette page, actualités et transactions reçues par WebSocket valent undefined.
  • Le réglage interval est enregistré et réappliqué, mais la boucle ne dort que timer_step.
  • La vue d’achat et de vente accepte un champ price venant de la requête et ne revient à la dernière clôture que s’il est absent.
  • backtesting/batchbacktesting.py importe des modules src.data et strategies absents du dépôt.
  • Les points d’accès IA exigent un serveur Ollama joignable ; entrypoint.sh en 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), et scripts/ contient un certificat et une clé pour localhost.

11. Sources

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
Dépendances externes
PaquetVersionUsageRôleRegistre
amqp==5.2.0exécutionLow-level AMQP client for Python (fork of amqplib).pypi.org
annotated-types==0.7.0exécutionReusable constraint types to use with typing.Annotatedpypi.org
anyio==4.4.0exécutionHigh-level concurrency and networking framework on top of asyncio or Triopypi.org
asgiref==3.8.1exécutionASGI specs, helper code, and adapterspypi.org
async-timeout==4.0.3exécutionTimeout context manager for asyncio programspypi.org
attrs==24.2.0exécutionValidation des donnéespypi.org
babel==2.16.0exécutionOutils de buildpypi.org
beautifulsoup4==4.12.3exécutionExtraction web et analysepypi.org
bleach==6.1.0exécutionAn easy safelist-based HTML-sanitizing tool.pypi.org
build==1.2.1exécutionOutils de buildpypi.org
cachecontrol==0.14.0exécutionhttplib2 caching for requestspypi.org
certifi==2023.11.17exécutionPython package for providing Mozilla's CA Bundle.pypi.org
cffi==1.17.0exécutionForeign Function Interface for Python calling C code.pypi.org
channels==4.1.0exécutionMessagerie temps réelpypi.org
channels-redis—exécutionAccès aux donnéespypi.org
chardet==5.2.0exécutionUniversal character encoding detectorpypi.org
charset-normalizer==3.3.2exécutionThe Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.pypi.org
cleo==2.1.0exécutionCleo allows you to create beautiful and testable command-line interfaces.pypi.org
click==8.1.7exécutionLigne de commandepypi.org
click-didyoumean==0.3.1exécutionEnables git-like *did-you-mean* feature in clickpypi.org
colorama==0.4.6exécutionLigne de commandepypi.org
constantly==23.10.4exécutionSymbolic constants in Pythonpypi.org
contourpy==1.2.1exécutionPython library for calculating contours of 2D quadrilateral gridspypi.org
crashtest==0.4.1exécutionTestspypi.org
cryptography==43.0.0exécutionAuthentification et sécuritépypi.org
cssselect2==0.7.0exécutionCSS selectors for Python ElementTreepypi.org
cycler==0.12.1exécutionComposable style cyclespypi.org
daphne==2.5.0exécutionDjango ASGI (HTTP/WebSocket) serverpypi.org
defusedxml==0.8.0rc2exécutionXML bomb protection for Python stdlib modulespypi.org
distlib==0.3.8exécutionDistribution utilitiespypi.org
django==5.0.8exécutionCadriciel webpypi.org
django-allauth==64.1.0exécutionCadriciel webpypi.org
django-allauth-ui==1.4.1exécutionCadriciel webpypi.org
django-any-urlfield==2.7.post1exécutionCadriciel webpypi.org
django-appconf==1.0.6exécutionCadriciel webpypi.org
django-check-seo==1.0.1exécutionCadriciel webpypi.org
django-classy-tags==4.1.0exécutionCadriciel webpypi.org
django-cms==3.11.6exécutionCadriciel webpypi.org
django-colorfield==0.11.0exécutionCadriciel webpypi.org
django-cors-headers==4.4.0exécutionCadriciel webpypi.org
django-easy-audit==1.3.6exécutionCadriciel webpypi.org
django-extensions==3.2.3exécutionCadriciel webpypi.org
django-filer==3.1.4exécutionCadriciel webpypi.org
django-formtools==2.5.1exécutionCadriciel webpypi.org
django-guest-user==0.5.5exécutionCadriciel webpypi.org
django-health-check==3.18.3exécutionCadriciel webpypi.org
django-imagekit==5.0.0exécutionCadriciel webpypi.org
django-jet-reboot==1.3.7exécutionCadriciel webpypi.org
django-meta==2.4.2exécutionCadriciel webpypi.org
django-money==3.5.3exécutionCadriciel webpypi.org
django-organizations==2.4.1exécutionCadriciel webpypi.org
django-perf-rec==4.26.0exécutionCadriciel webpypi.org
django-pictures==1.3.3exécutionCadriciel webpypi.org
django-polymorphic==3.1.0exécutionCadriciel webpypi.org
django-prometheus==2.3.1exécutionCadriciel webpypi.org
django-pwa==2.0.0exécutionCadriciel webpypi.org
django-robots==6.1exécutionCadriciel webpypi.org
django-rq==2.10.2exécutionCadriciel webpypi.org
django-sekizai==4.1.0exécutionCadriciel webpypi.org
django-sslserver==0.22exécutionCadriciel webpypi.org
django-storages==1.12.3exécutionCadriciel webpypi.org
django-tinymce==4.1.0exécutionCadriciel webpypi.org
django-treebeard==4.7.1exécutionCadriciel webpypi.org
django-typer==2.2.1exécutionCadriciel webpypi.org
django-webpack-loader==3.1.0exécutionCadriciel webpypi.org
django-widget-tweaks==1.5.0exécutionCadriciel webpypi.org
djangocms-admin-style==3.3.1exécutionCadriciel webpypi.org
djangocms-page-meta==1.4.4exécutionCadriciel webpypi.org
djangorestframework==3.15.2exécutionCadriciel webpypi.org
drf-yasg==1.21.7exécutionAutomated generation of real Swagger/OpenAPI 2.0 schemas from Django Rest Framework code.pypi.org
dulwich==0.21.7exécutionPython Git Librarypypi.org
easy-thumbnails==2.9exécutionEasy thumbnails for Djangopypi.org
fastjsonschema==2.20.0exécutionValidation des donnéespypi.org
feedparser==6.0.11exécutionExtraction web et analysepypi.org
filelock==3.15.4exécutionA platform independent file lock.pypi.org
fonttools==4.53.1exécutionTools to manipulate font filespypi.org
google-api-python-client==1.4.1exécutionGoogle API Client Library for Pythonpypi.org
h11==0.14.0exécutionA pure-Python, bring-your-own-I/O implementation of HTTP/1.1pypi.org
hiredis==3.0.0exécutionAccès aux donnéespypi.org
hyperlink==21.0.0exécutionA 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

  1. AlgoÉTS. (2026, 5 novembre). [Web page] github.com.
  2. AlgoETS. (2026, 5 novembre). Simulateur. [Software repository] github.com.
  3. AlgoETS. (2026, 5 novembre). README. [Source file or documentation] github.com.
  4. AlgoETS. (2026, 5 novembre). simulateur/run.py. [Source file or documentation] github.com.
  5. AlgoETS. (2026, 5 novembre). simulateur/simulation/logic/simulation_manager.py. [Source file or documentation] github.com.
  6. AlgoETS. (2026, 5 novembre). simulateur/simulation/logic/noise_patterns/. [Source file or documentation] github.com.
  7. AlgoETS. (2026, 5 novembre). simulateur/simulation/api/simulation_manager.py. [Source file or documentation] github.com.
  8. AlgoETS. (2026, 5 novembre). simulateur/simulation/channels/consumers.py. [Source file or documentation] github.com.
  9. AlgoETS. (2026, 5 novembre). simulateur/simulation/management/commands/start_simulation.py. [Source file or documentation] github.com.
  10. AlgoETS. (2026, 5 novembre). simulateur/simulation/urls.py. [Source file or documentation] github.com.
  11. AlgoETS. (2026, 5 novembre). simulateur/simulation/api/portfolio.py. [Source file or documentation] github.com.
  12. 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.