91 lines
No EOL
3.6 KiB
Python
91 lines
No EOL
3.6 KiB
Python
"""
|
|
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
|
|
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 |