diff --git a/README.md b/README.md index 9c9f140..dfe646f 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Le code proposé répond à la partie outillage, avec une architecture modulaire Le projet est bâti sur un backeng Gitea pour la gestion des fiches et des tickets d'évolution. (Accéder au backend)[https://fabnum-git.peccini.fr/FabNum/Fiches] -Le serveur qui héberge l'application héberge aussi le service Gitea, ce qui permet d'éliminer les temps de latence dus au réseau. +Le serveur qui héberge l'application héberge aussi le service Gitea, ce qui permet d'éliminer les temps de latence dus au réseau. Les fiches sont toutefois mise en cache localement en générant les fichiers markdown (référence), html (affichage) et pdf (download). L'application est écrite en python et utilise majoritairement streamlit. @@ -26,11 +26,14 @@ Le fichier **requirements.txt** permet d'installer tout ce qui est nécessaire p python -m venv venv source venv/bin/activate + # Installation depuis le fichier pip install -r requirements.txt + # Génération du fichier + pipreqs requirements.txt ### Environnement -Le fichier **.env.local** qui contient GITEA_TOKEN n'est pas dans le dépôt car il contient la clé pour accéder au backend. +Le fichier **.env.local** qui contient GITEA_TOKEN n'est pas dans le dépôt car il contient la clé pour accéder au backend. Il doit donc être créé ainsi que le Token. Le TOken doit permetre l'accès en lecture au dépôt et en lecture/écriture au gestionnaire des tickets. Pour l'environnement de pré-production, (https://fabnum-dev.peccini.fr)[https://fabnum-dev.peccini.fr] : @@ -52,7 +55,7 @@ Pour l'environnement de production, (https://fabnum.peccini.fr)[https://fabnum.p PORT=8501 -La différence entre les deux environnements se fait au travers de la configuration du proxy Nginx (ici celle de dev ; il suffit de changer dev en public pour l'environnement de production) : +La différence entre les deux environnements se fait au travers de la configuration du proxy Nginx (ci-après celle de dev ; il suffit de changer dev en public pour l'environnement de production) : # Ajout d'un en-tête personnalisé pour indiquer l'environnement add_header X-Environment "dev" always; @@ -106,11 +109,19 @@ Le cœur de l'application. Ce script sert de point d'entrée et d'orchestrateur Ce fichier est conçu de manière modulaire, déléguant les fonctionnalités spécifiques aux modules spécialisés, ce qui facilite la maintenance et les évolutions futures. +Dans la sidebar, l'application indique une estimation des émissions de gaz à effet de serre. Pour cela, un mécanisme est mis en place dans la configuration Nginx pour enregistrer dans le fichier : + /var/log/nginx/fabnum-dev.access.log +les informations d'octets transférés. + +Ce système est basé sur la création d'un cookie de session, utilisé ensuite pour distinguer les utilisations. + +<<<<<<<<<<<à compléter avec la configuration Nginx>>>>>>>>>>> + ## Architecture et principes de conception ### Modularité et simplification -L'application a été restructurée selon les principes suivants : +L'application a été structurée selon les principes suivants : 1. **Séparation des responsabilités** : Chaque module a une fonction bien définie 2. **Modularité** : Les fonctionnalités sont décomposées en composants réutilisables @@ -149,43 +160,56 @@ L'application est organisée de façon modulaire, avec une structure simplifiée ``` fabnum-dev/ -├── fabnum.py # Point d'entrée principal -├── config.py # Configuration et variables d'environnement -├── app/ # Modules fonctionnels principaux -│ ├── analyse/ # Module d'analyse des chaînes de dépendance -│ │ ├── interface.py # Interface utilisateur pour l'analyse -│ │ ├── sankey.py # Génération des diagrammes Sankey -│ │ └── README.md # Documentation du module -│ ├── fiches/ # Gestion et affichage des fiches -│ │ ├── interface.py # Interface utilisateur pour les fiches -│ │ ├── generer.py # Génération des fiches -│ │ ├── utils/ # Utilitaires spécifiques aux fiches -│ │ └── README.md # Documentation du module -│ ├── personnalisation/ # Personnalisation de la chaîne -│ │ ├── interface.py # Interface principale -│ │ ├── ajout.py # Ajout de produits -│ │ ├── modification.py # Modification de produits -│ │ ├── import_export.py # Import/export de configurations -│ │ └── README.md # Documentation du module -│ └── visualisations/ # Visualisations graphiques -│ ├── interface.py # Interface des visualisations -│ ├── graphes.py # Gestion des graphes à visualiser -│ └── README.md # Documentation du module -├── components/ # Composants d'interface réutilisables -│ ├── sidebar.py # Barre latérale de navigation -│ ├── header.py # En-tête de l'application -│ ├── footer.py # Pied de page -│ └── README.md # Documentation des composants -├── utils/ # Utilitaires partagés -│ ├── gitea.py # Connexion API Gitea -│ ├── graph_utils.py # Manipulation des graphes -│ └── README.md # Documentation des utilitaires -├── assets/ # Ressources statiques -│ ├── styles/ # Feuilles de style CSS -│ └── impact_co2.js # Calcul d'impact environnemental -├── .env # Configuration versionnée -├── .env.local # Configuration locale (non versionnée) -└── requirements.txt # Dépendances Python +├── fabnum.py # Point d'entrée principal +├── config.py # Configuration et variables d'environnement +├── app/ # Modules fonctionnels principaux +│ ├── analyse/ # Module d'analyse des chaînes de dépendance +│ │ ├── interface.py # Interface utilisateur pour l'analyse +│ │ ├── sankey.py # Génération des diagrammes Sankey +│ │ └── README.md # Documentation du module +│ ├── fiches/ # Gestion et affichage des fiches +│ │ ├── interface.py # Interface utilisateur pour les fiches +│ │ ├── generer.py # Génération des fiches +│ │ ├── utils/ # Utilitaires spécifiques aux fiches +│ │ ├── utils/dynamic # Gestion de la génération et affichage des fiches par type d'opération +│ │ ├── utils/tickets # Gestion de l'affichage et de la création des tickets +│ │ ├── utils/fiches_utils.py # Outils de gestion et rendu des fiches +│ │ └── README.md # Documentation du module +│ ├── personnalisation/ # Personnalisation de la chaîne +│ │ ├── interface.py # Interface principale +│ │ ├── ajout.py # Ajout de produits +│ │ ├── modification.py # Modification de produits +│ │ ├── import_export.py # Import/export de configurations +│ │ └── README.md # Documentation du module +│ └── visualisations/ # Visualisations graphiques +│ ├── interface.py # Interface des visualisations +│ ├── graphes.py # Gestion des graphes à visualiser +│ └── README.md # Documentation du module +├── components/ # Composants d'interface réutilisables +│ ├── sidebar.py # Barre latérale de navigation +│ ├── header.py # En-tête de l'application +│ ├── footer.py # Pied de page +│ ├── connexion.py # Module de connexion à partir d'un token Gitea +│ └── README.md # Documentation des composants +├── utils/ # Utilitaires partagés +│ ├── gitea.py # Connexion API Gitea +│ ├── graph_utils.py # Manipulation des graphes +│ ├── translations.py # Module de gestion de l'internationalisation +│ ├── visualisations.py # Manipulation des graphes de l'onglet Visualisations +│ └── README.md # Documentation des utilitaires +├── assets/ # Ressources statiques +│ ├── locales/ # Gestion de l'internationalisation +│ ├── styles/ # Feuilles de style CSS +│ ├── confir.yaml # Définition des seuils pour les indices +│ ├── fiches_labels.csv # Dictionnaire d'association entre les fiches et leurs labels (tickets) +│ ├── impact_co2.js # Calcul d'impact environnemental +│ ├── licence.md # Licence ajoutée à toutes les fiches +│ └── weakness.png # Icône de l'onglet dans le navigateur +├── .env # Configuration versionnée +├── .env.local # Configuration locale (non versionnée) +└── requirements.txt # Dépendances Python +├── .streamlit/ # Configuration streamlit côté serveur +│ └── config.toml # Fichier de configuration : important theme.base = light ``` Chaque module dispose de sa propre documentation détaillée dans un fichier README.md. diff --git a/assets/README.md b/assets/README.md index 0140a86..1c8bc9d 100644 --- a/assets/README.md +++ b/assets/README.md @@ -2,9 +2,12 @@ ## Styles -Le fichier **styles.css** a été construit pour agir sur le styme produit par Streamlit ou pour décorer des éléments construits par fabnum.py +Le fichier **base.css** a été construit pour agir sur le style produit par Streamlit ou pour décorer des éléments construits par fabnum.py, indépendamment du thème choisi +Les deux fichiers **theme-light.css** et **theme-dark.css** contiennent les variables utilisées par base.css pour afficher les couleurs. -Il sera important de regarder s'il est possible d'interagir avec le css de Streamlit sans passer par des déclarations !important +Streamlit utilise le theme par défaut du système du poste de travail de l'internaute. Afin de maîtriser complètement le thème avec base.css, il est important que la configuration côté serveur de Streamlit soit forcée au thème light dans le fichier .streamlit/config.toml : + [theme] + base = "light" ## Icone @@ -37,4 +40,4 @@ La dernière colonne donne le label de l'item associé à la fiche. Les labels associés aux fiches dans ce fichier doivent, bien évidemment, être **totalement égaux** aux labels de la gestion des tickets. -Ces labels avec en plus la branche permettent de faire le lien exact entre une fiche présentée dans l'application et le système de gestion des tickets. \ No newline at end of file +Ces labels avec en plus la branche permettent de faire le lien exact entre une fiche présentée dans l'application et le système de gestion des tickets. diff --git a/components/README.md b/components/README.md index 99d5b45..0905368 100644 --- a/components/README.md +++ b/components/README.md @@ -10,11 +10,12 @@ Le module components comprend plusieurs fichiers clés : - **header.py** : Composant d'en-tête unifié pour toutes les pages - **footer.py** : Pied de page standardisé incluant les mentions légales et informations de contact - **fiches.py** : Composants spécifiques à l'affichage et à la manipulation des fiches +- **connexion.py** : Composants spécifiques à la gestion de la connexion / déconnexion sur la base d'un token Gitea ## Fonctionnalités ### Barre latérale (sidebar.py) -- Menu de navigation principal entre les différentes sections +- Menu de navigation prin>>>>>>>>>>>>> cipal entre les différentes sections - Options de configuration et de personnalisation - Affichage des informations sur l'impact environnemental - Gestion du thème (clair/sombre) @@ -45,4 +46,4 @@ afficher_menu() afficher_pied_de_page() ``` -Cette approche modulaire permet de maintenir une interface cohérente tout en facilitant les mises à jour de l'interface utilisateur. \ No newline at end of file +Cette approche modulaire permet de maintenir une interface cohérente tout en facilitant les mises à jour de l'interface utilisateur. diff --git a/components/connexion.py b/components/connexion.py index a5edc98..40d6dbd 100644 --- a/components/connexion.py +++ b/components/connexion.py @@ -42,6 +42,7 @@ def connexion(): with st.form("auth_form"): # Ajout d'un champ identifiant fictif pour activer l'autocomplétion navigateur # et permettre de stocker le token comme un mot de passe par le navigateur + # L'identifiant n'est donc pas utilisé par la suite ; il est caché en CSS identifiant = st.text_input(str(_("auth.username")), value="fabnum-connexion", key="nom_utilisateur") token = st.text_input(str(_("auth.token")), type="password") submitted = st.form_submit_button(str(_("auth.login")))