""" Fabrique à documents Copyright (C) 2023 François Pelletier Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale Affero GNU publiée par la Free Software Foundation, soit la version 3 de la Licence, ou (à votre gré) toute version ultérieure. Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISABILITÉ ou d'ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Publique Générale Affero GNU pour plus de détails. Vous devriez avoir reçu une copie de la Licence Publique Générale Affero GNU avec ce programme. Si ce n'est pas le cas, consultez . """ # Importation des modules nécessaires import streamlit as st # Pour créer l'interface utilisateur web from dotenv import load_dotenv # Pour charger les variables d'environnement import os # Pour interagir avec le système d'exploitation from typing import Callable # Pour le typage des fonctions import importlib # Pour charger dynamiquement des modules # Fonction pour initialiser les variables de session def init_session_state(): """ Initialise les variables de session si elles n'existent pas déjà. Charge également les variables d'environnement. """ if 'fabriquedoc_endpoint' not in st.session_state: load_dotenv() # Charge les variables d'environnement depuis un fichier .env # Définit l'URL du backend, avec une valeur par défaut si non spécifiée st.session_state['fabriquedoc_endpoint'] = os.environ.get("FABRIQUEDOC_ENDPOINT", "http://127.0.0.1:8080") # Initialise d'autres variables de session avec des valeurs par défaut for key, default_value in [('options', ""), ('bearer_token', ""), ('logged_in', False)]: if key not in st.session_state: st.session_state[key] = default_value # Dictionnaire définissant les onglets de l'application TABS = { "Markdown": "app_tab1", "Aperçu": "app_tab2", "Paramètres": "app_tab3", "Images": "app_tab4" } # Fonction pour charger dynamiquement les modules des onglets def load_tab_module(module_name: str) -> Callable: """ Charge dynamiquement un module et retourne sa fonction principale. Args: module_name (str): Nom du module à charger. Returns: Callable: Fonction principale du module chargé. """ module = importlib.import_module(module_name) return getattr(module, module_name) # Fonction principale de l'application def main(): """ Fonction principale qui gère le flux de l'application. """ init_session_state() # Initialise les variables de session st.title("Fabrique à documents") # Affiche le titre de l'application st.write(f"Endpoint : {st.session_state['fabriquedoc_endpoint']}") # Affiche l'URL du backend # Si l'utilisateur n'est pas connecté, affiche le formulaire de connexion if not st.session_state['logged_in']: login_form = importlib.import_module('login_form') login_form.login_form() # Si l'utilisateur est connecté, affiche les onglets de l'application if st.session_state['logged_in']: tabs = st.tabs(list(TABS.keys())) # Crée les onglets # Pour chaque onglet, charge et exécute la fonction correspondante for tab, (tab_name, module_name) in zip(tabs, TABS.items()): with tab: tab_function = load_tab_module(module_name) tab_function() # Point d'entrée du script if __name__ == "__main__": main() # Exécute la fonction principale