import os import sqlite3 import streamlit as st import pandas as pd import requests # Configuration du dépôt GitHub REPO = "M00N69/RASFFDB" FILE_PATH = "rasff_data.db" API_URL = f"https://api.github.com/repos/{REPO}/commits" RAW_URL_TEMPLATE = "https://raw.githubusercontent.com/{repo}/{commit}/{file}" # Effacer le cache des données pour forcer le rechargement st.cache_data.clear() def download_latest_db(): """Télécharge le fichier rasff_data.db avec le hash du dernier commit.""" # Récupérer le dernier commit response = requests.get(API_URL) if response.status_code != 200: st.error("❌ Erreur lors de la récupération du commit.") return False # Extraire le hash du dernier commit commits = response.json() latest_commit_hash = commits[0]["sha"] st.write(f"📋 **Dernier commit :** {latest_commit_hash}") # Construire l'URL du fichier basé sur le dernier commit download_url = RAW_URL_TEMPLATE.format(repo=REPO, commit=latest_commit_hash, file=FILE_PATH) st.write(f"📥 **Téléchargement depuis :** {download_url}") # Télécharger le fichier response = requests.get(download_url) if response.status_code != 200: st.error("❌ Erreur lors du téléchargement du fichier.") return False # Enregistrer le fichier with open(FILE_PATH, "wb") as file: file.write(response.content) # Vérifier la taille du fichier file_size = os.path.getsize(FILE_PATH) / (1024 * 1024) # Taille en Mo st.write(f"📁 **Taille du fichier téléchargé :** {file_size:.2f} Mo") return True def get_data_from_db(): """Récupère les données directement depuis la table 'rasff_notifications'.""" if not os.path.exists(FILE_PATH): st.error(f"⚠️ Le fichier '{FILE_PATH}' est introuvable.") return pd.DataFrame() try: # Connexion à la base de données conn = sqlite3.connect(FILE_PATH) # Charger les données query = "SELECT * FROM rasff_notifications" df = pd.read_sql(query, conn) # Nombre total d'enregistrements total_records = len(df) st.write(f"📊 **Nombre total d'enregistrements :** {total_records}") conn.close() return df except Exception as e: st.error(f"⚠️ Erreur lors du chargement des données: {e}") return pd.DataFrame() def check_years_presence(df): """Vérifie la présence des années 2024 et 2025 dans la colonne 'date'.""" if 'date' not in df.columns: st.warning("⚠️ Colonne 'date' introuvable.") return # Filtrer les données pour les années 2024 et 2025 dans la colonne 'date' df_2024 = df[df['date'].astype(str).str[:4] == '2024'] df_2025 = df[df['date'].astype(str).str[:4] == '2025'] if not df_2024.empty: st.success("✔️ Des données pour l'année 2024 sont présentes.") st.write(f"📊 **Nombre d'enregistrements pour 2024 :** {len(df_2024)}") else: st.warning("⚠️ Aucune donnée trouvée pour l'année 2024.") if not df_2025.empty: st.success("✔️ Des données pour l'année 2025 sont présentes.") st.write(f"📊 **Nombre d'enregistrements pour 2025 :** {len(df_2025)}") st.dataframe(df_2025.head(10)) else: st.warning("⚠️ Aucune donnée trouvée pour l'année 2025.") # 📥 Télécharger la base avec l'API GitHub et le dernier commit if download_latest_db(): # 🗂 Charger les données et afficher un aperçu si tout va bien df = get_data_from_db() if not df.empty: st.write("📊 **Aperçu des données complètes:**") st.dataframe(df.head(10)) # 🔍 Vérifier la présence des années 2024 et 2025 check_years_presence(df) else: st.warning("⚠️ Aucune donnée disponible dans 'rasff_notifications'.") else: st.error("❌ Le téléchargement a échoué.")