"""Constantes partagées de la couche données.""" import os PROJECTS_DIR = 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)"}, }