Aller au contenu

Initialisation Forge IoT : forge iot:init

Statut : commande de préparation. Elle copie la migration
SQL Forge IoT du package vers mvc/migrations/ du projet, mais
n'applique pas le SQL. C'est forge migration:apply qui le fait
ensuite, séparation volontaire pour rester lisible et relisible.

Objectif

Boucler le parcours du starter
Bonjour IoT : passer de la
réponse pédagogique

{"error": "iot_storage_not_ready"}

à une table iot_events prête à être créée par
forge migration:apply. Aucune connexion base, aucun SQL exécuté.

Usage

forge iot:init

Aucune option à ce ticket. Aide via :

forge iot:init --help

Flux recommandé

forge iot:doctor       # vérifier package, config, migration, API HTTP
forge iot:init         # copier la migration vers mvc/migrations/
forge migration:apply  # créer la table iot_events en base
forge run              # démarrer l'application

Avec ce parcours :

  • forge iot:doctor confirme que forge-mvc-iot est installé, que la
    configuration est correcte et que la migration est embarquée dans le
    package.
  • forge iot:init copie le .sql depuis le package vers
    mvc/migrations/ du projet. Idempotent.
  • forge migration:apply (commande Forge Core existante) crée la
    table.
  • forge run démarre le serveur ; les routes
    /welcome-optin-iot/events et /api/iot/events peuvent maintenant
    retourner des données réelles.

Comportement

Cas normal : fichier copié

[OK] Migration IoT copiée : mvc/migrations/20260528120000_create_iot_events.sql

[INFO] Lance maintenant : forge migration:apply

Exit code : 0.

Cas idempotent : déjà présent, contenu identique

[OK] Migration IoT déjà présente (identique) : mvc/migrations/20260528120000_create_iot_events.sql

[INFO] Lance maintenant : forge migration:apply

Exit code : 0. La commande est sûre à rejouer.

Cas conflit : fichier présent, contenu différent

[WARN] mvc/migrations/20260528120000_create_iot_events.sql existe et diffère - aucune modification.

Exit code : 0. Aucun écrasement : si l'utilisateur a modifié la
migration localement, la décision lui revient ; la commande ne touche
rien. Pour repartir de la version packagée, supprimer manuellement le
fichier puis relancer forge iot:init.

Cas dossier inexistant

Si mvc/ existe mais pas mvc/migrations/, le dossier est créé :

[INFO] Dossier mvc/migrations/ créé.
[OK] Migration IoT copiée : mvc/migrations/20260528120000_create_iot_events.sql

[INFO] Lance maintenant : forge migration:apply

Cas hors projet Forge

[ERREUR] Ce dossier ne ressemble pas à un projet Forge.
Conseil : lance cette commande à la racine du projet (dossier mvc/ attendu).

Exit code : 1.

Lecture des migrations packagées

La commande utilise importlib.resources pour lire les ressources
embarquées dans le package Python, fonctionne identiquement en
install éditable (depuis le monorepo) et en install PyPI réelle.

Le ticket
IOT-PACKAGE-DATA-MIGRATIONS-001
a embarqué les .sql via
[tool.setuptools.package-data] dans pyproject.toml, garantissant
que forge iot:init trouve toujours sa source quelle que soit
l'installation.

Hors périmètre

Sont volontairement hors périmètre de cette commande :

  • pas de forge migration:apply automatique : séparation explicite
    préparation / exécution ;
  • pas de connexion à MariaDB ;
  • pas de vérification que la table iot_events existe déjà ;
  • pas de rollback de migration ;
  • pas d'option interactive (--force, --diff, etc.) ;
  • pas de subscriber MQTT lancé ;
  • pas de modification de fichiers en dehors de mvc/migrations/.

Module opt-in absent

Si forge-mvc-iot n'est pas installé, forge iot:init retourne :

Erreur : module forge-mvc-iot non installé.
indice : installe le module opt-in : pip install forge-mvc-iot

Forge Core reste fonctionnel sans le module : l'import est paresseux
côté dispatcher (forge.py).

Voir aussi