- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .streamlit | ||
| developpement | ||
| pages | ||
| static/fonts/mononoki_nerd_font | ||
| utils | ||
| .env | ||
| .envrc | ||
| .gitignore | ||
| .python-version | ||
| gestaches.py | ||
| lefthook.yml | ||
| menu.py | ||
| poetry.lock | ||
| pyproject.toml | ||
| readme.md | ||
| README.md | ||
| requirements.txt | ||
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 useavantpoetry install. Après unpoetry 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.dialogdirectement depuis unon_select_callback. Stocker l'intention dansst.session_stateet 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)surgrist_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 ; bouclewhile changedpour gérer les chaînes d'exceptions calendaires consécutives ; date de début de planification lue depuisParametres(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 dictrecords_indexpour un lookup enO(1)par identifiant Grist.
Automatisation Git
Hooks Git géré par lefthook workflow-inc-release-hotfix
Historique de bugs corrigés
- Format
RefListGrist 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