fabriquedoc/frontend/main.py

91 lines
3.6 KiB
Python
Raw Normal View History

2024-12-31 22:00:07 +00:00
"""
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 <https://www.gnu.org/licenses/>.
"""
# 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
2025-01-01 02:01:12 +00:00
st.session_state['fabriquedoc_endpoint'] = os.environ.get("FABRIQUEDOC_ENDPOINT", "http://127.0.0.1:8080")
2024-12-31 22:00:07 +00:00
# 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