orga / pages /info.py
Lenylvt's picture
Upload 10 files
a01c266 verified
import streamlit as st
from pronotepy import Client
import datetime
def app(client: Client):
st.title('ℹ️ Informations et Enquêtes')
# Barre de recherche au-dessus des onglets
search_query = st.text_input("🔍 Recherche", "")
try:
# Récupérer toutes les informations
informations = client.information_and_surveys()
# Définir les noms des onglets, avec "Toutes les infos" en premier
mois_annee_scolaire_noms = ["✨ Toutes les infos", "1️⃣ Septembre", "2️⃣ Octobre", "3️⃣ Novembre", "4️⃣ Décembre",
"5️⃣ Janvier", "6️⃣ Février", "7️⃣ Mars", "8️⃣ Avril", "9️⃣ Mai", "🔟 Juin", "🔟 Juillet"]
# Créer dynamiquement les onglets
tabs = st.tabs(mois_annee_scolaire_noms)
for i, tab in enumerate(tabs):
with tab:
if i == 0: # Pour l'onglet "Toutes les infos"
display_monthly_info(informations, search_query)
else: # Pour les mois de septembre à juillet
mois = i + 8 if i < 5 else i - 4 # Ajustement pour l'année scolaire
infos_du_mois = [info for info in informations if info.creation_date and info.creation_date.month == mois]
display_monthly_info(infos_du_mois, search_query)
except Exception as e:
st.error("⚠️ Une erreur s'est produite lors de la récupération des informations.")
st.error(str(e))
def display_monthly_info(informations, search_query):
filtered_infos = search_informations(informations, search_query)
sorted_infos = sorted(filtered_infos, key=lambda x: x.creation_date, reverse=True)
if not sorted_infos: # Vérifier si la liste filtrée est vide
st.info("🔴 Aucune information trouvée.")
else:
for info in sorted_infos:
display_information(info)
def search_informations(informations, query):
return [info for info in informations if query.lower() in (info.content or '').lower()
or query.lower() in (info.category or '').lower()
or query.lower() in (info.author or '').lower()
or query in (info.creation_date.strftime('%Y-%m-%d') if info.creation_date else '')]
def display_information(info):
creation_date = info.creation_date.strftime('%Y-%m-%d') if info.creation_date else 'Inconnue'
content_formatted = info.content.replace('\n', '<br>')
with st.expander(f"{info.title} - {info.author}", expanded=not info.read):
st.markdown(f"""
- _**Auteur**: {info.author} | **Date de Création**: {creation_date} | **Catégorie**: {info.category}_
---
{content_formatted}
""", unsafe_allow_html=True)
if not info.read:
if st.button('Marquer comme lu', key=info.id):
info.mark_as_read(True)
st.rerun()