"""Constantes partagées de la couche données.""" import os # Surchargeable via FORGE_PROJECTS_DIR (même schéma que # auth/connection.py::FORGE_USERS_DB_PATH) — utilisé par le serveur # joueur autonome (publish/player_app_template.py), qui pose cette # variable AVANT d'importer db/ pour pointer vers son propre dossier # "projects/" embarqué plutôt que celui, réel, du poste de développement. # Résolu ici, à l'IMPORT (pas par un appel de fonction) : la variable # d'environnement doit donc déjà être posée avant le tout premier # `import db`. PROJECTS_DIR = os.environ.get("FORGE_PROJECTS_DIR") or os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "projects" ) # Types de champ exposés dans l'interface -> type de colonne SQLite réel. FIELD_TYPES = { "texte": {"label": "Texte court", "sql": "TEXT"}, "texte_long": {"label": "Texte long", "sql": "TEXT"}, "nombre_entier": {"label": "Nombre entier", "sql": "INTEGER"}, "nombre_decimal": {"label": "Nombre décimal", "sql": "REAL"}, "booleen": {"label": "Oui / Non", "sql": "INTEGER"}, "date": {"label": "Date", "sql": "TEXT"}, "relation": {"label": "Relation vers un autre objet", "sql": "INTEGER"}, } # Types disponibles pour une variable globale (voir db/global_vars/) — un # sous-ensemble de FIELD_TYPES : ni "relation" (une variable globale n'a pas # d'objet à pointer) ni "texte_long"/"date" (pas gérés par # apply_variable_action.py, qui ne coerce que ces 4 types). "objet"/ # "tableau" sont, eux, propres aux variables (pas de colonne SQL réelle, # contrairement à un champ d'objet) : la valeur est stockée telle quelle # (colonne TEXT) sous forme de JSON, lue via un chemin ".champ"/"[index]" # (voir _resolve_variable_path dans screens/rendering/filter_repeater_rows.py). GLOBAL_VARIABLE_TYPES = { "texte": FIELD_TYPES["texte"], "nombre_entier": FIELD_TYPES["nombre_entier"], "nombre_decimal": FIELD_TYPES["nombre_decimal"], "booleen": FIELD_TYPES["booleen"], "objet": {"label": "Objet (JSON)"}, "tableau": {"label": "Tableau (JSON)"}, }