Interface web, réalisé avec streamlit
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-28 22:50:13 +02:00
.streamlit chore: structure initiale du projet 2026-06-27 09:34:56 +02:00
developpement chore: structure initiale du projet 2026-06-27 09:34:56 +02:00
pages fix(webui): corrige des bugs mineurs de debogage sur chronologie et planification 2026-07-14 21:37:34 +02:00
static/fonts/mononoki_nerd_font chore: commit initial 2026-07-14 19:08:25 +02:00
utils fix(webui/plannification): corrige le formulaire d'ajout de tache et la planification 2026-07-14 20:15:04 +02:00
.env refactor(env): reorganise la configuration direnv 2026-07-14 20:29:54 +02:00
.envrc refactor(env): reorganise la configuration direnv 2026-07-14 20:29:54 +02:00
.gitignore refactor(env): reorganise la configuration direnv 2026-07-14 20:29:54 +02:00
.python-version build(env): aligne l'environnement sur Python 3.11 pour YunoHost 2026-07-15 11:39:29 +02:00
gestaches.py fix(env): corrige le KeyError sur les variables des fichiers .env* 2026-07-20 15:16:09 +02:00
lefthook.yml fix(ci): aligne la version du workflow lefthook 2026-07-22 12:35:54 +02:00
menu.py chore: structure initiale du projet 2026-06-27 09:34:56 +02:00
poetry.lock fix(env): corrige le KeyError sur les variables des fichiers .env* 2026-07-20 15:16:09 +02:00
pyproject.toml Merge hotfix 1.03.01: Ajoute la dépendance de 'python-dotenv' 2026-07-28 21:35:43 +02:00
readme.md docs: ajoute le readme 2026-07-27 15:31:29 +02:00
README.md test: verifie stage_fixed 2026-07-28 22:49:53 +02:00
requirements.txt build(deps): ajoute la dependance python-dotenv 2026-07-28 16:14:09 +02:00

gestaches

Système de gestion de tâches sur mesure, combinant un front-end Streamlit et un backend Grist, pensé pour la planification de tâches avec prise en compte des horaires de travail et une visualisation chronologique.

Architecture

  • Frontend : Streamlit, navigation multi-pages via st.Page / st.navigation
  • Backend : Grist (REST API + connecteur MCP)
  • Déploiement : YunoHost (auto-hébergé)
  • Code : forgejo (git.kanet.xyz)

Fonctionnalités

  • Planification de tâches avec prise en compte des plages horaires de travail
  • Visualisation chronologique
  • Gestion des projets, catégories et tags
  • Gestion des exceptions de calendrier (jours fériés, absences, etc.)

Structure du dépôt (gestaches.ui-streamlit)

Tables Grist

Table Rôle
Taches Tâches
Taches_Plannification Planification des tâches
Plages_Horaires Horaires de travail
Taches_Categories Catégories de tâches
Projets Projets
Parametres Paramètres globaux (dont date de début de planification)
Plannification_Exceptions Exceptions de calendrier
Pieces Pièces
Nomenclature Nomenclature
Liste_de_debit Listes de débit

Installation / environnement

YunoHost impose Python 3.11.2 (Debian Bookworm). Ordre correct de mise en place :

pyenv local 3.11.2
poetry env use $(pyenv which python3.11)
poetry env info                 # vérifier que le bon interpréteur est actif
rm poetry.lock && poetry lock && poetry install

⚠️ Toujours faire poetry env use avant poetry install. Après un poetry env remove --all, sauter cette étape fait revenir Poetry silencieusement au Python système.

Déploiement (YunoHost)

Après chaque changement de dépendances, régénérer requirements.txt :

poetry export -f requirements.txt --output requirements.txt --without-hashes

Points techniques à connaître

  • Format Grist RefList : toujours ["L", id1, id2, ...], jamais une liste nue ([id1, id2] est rejeté silencieusement ou mal interprété).

  • Timestamps Grist : secondes Unix. Conversion pandas :

    pd.to_datetime(df["colonne"], unit="s", utc=True).dt.tz_convert("Europe/Paris")
    
  • Dialogs Streamlit : ne jamais appeler une fonction décorée @st.dialog directement depuis un on_select_callback. Stocker l'intention dans st.session_state et déclencher le dialogue depuis un unique point d'entrée, sous peine d'erreur "Only one dialog allowed".

  • Cache : @st.cache_data(ttl=60) sur grist_data(), avec .clear() appelé après chaque écriture.

  • Formule de planification Grist : utilise PREVIOUS(rec, order_by="id") pour éviter un tri complet de la table ; dictionnaires de lookup pré-construits pour les horaires et les exceptions ; boucle while changed pour gérer les chaînes d'exceptions calendaires consécutives ; date de début de planification lue depuis Parametres (jamais en dur).

  • Débogage dans les dialogs : st.json(champs) + st.stop() pour inspecter les payloads envoyés à l'API Grist.

  • Sélection de colonnes : préférer une sélection explicite des colonnes à drop() pour les dataframes de synthèse par page.

  • Index Grist : df.set_index("id") combiné à un dict records_index pour un lookup en O(1) par identifiant Grist.

Automatisation Git

Hooks Git géré par lefthook workflow-inc-release-hotfix

Historique de bugs corrigés

  • Format RefList Grist incorrect (liste nue au lieu de ["L", ...])
  • Gestion d'erreurs améliorée dans grist_requetes.py (expose désormais le corps d'erreur détaillé renvoyé par Grist)

Stack technique

Streamlit · Grist (REST API + connecteur MCP) · Python / Poetry · pyenv · pandas · direnv · YunoHost · forgejo