|
|
import os |
|
|
import sqlite3 |
|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
import requests |
|
|
|
|
|
|
|
|
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}" |
|
|
|
|
|
|
|
|
st.cache_data.clear() |
|
|
|
|
|
def download_latest_db(): |
|
|
"""Télécharge le fichier rasff_data.db avec le hash du 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 |
|
|
|
|
|
|
|
|
commits = response.json() |
|
|
latest_commit_hash = commits[0]["sha"] |
|
|
st.write(f"📋 **Dernier commit :** {latest_commit_hash}") |
|
|
|
|
|
|
|
|
download_url = RAW_URL_TEMPLATE.format(repo=REPO, commit=latest_commit_hash, file=FILE_PATH) |
|
|
st.write(f"📥 **Téléchargement depuis :** {download_url}") |
|
|
|
|
|
|
|
|
response = requests.get(download_url) |
|
|
if response.status_code != 200: |
|
|
st.error("❌ Erreur lors du téléchargement du fichier.") |
|
|
return False |
|
|
|
|
|
|
|
|
with open(FILE_PATH, "wb") as file: |
|
|
file.write(response.content) |
|
|
|
|
|
|
|
|
file_size = os.path.getsize(FILE_PATH) / (1024 * 1024) |
|
|
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: |
|
|
|
|
|
conn = sqlite3.connect(FILE_PATH) |
|
|
|
|
|
|
|
|
query = "SELECT * FROM rasff_notifications" |
|
|
df = pd.read_sql(query, conn) |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
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.") |
|
|
|
|
|
|
|
|
if download_latest_db(): |
|
|
|
|
|
df = get_data_from_db() |
|
|
if not df.empty: |
|
|
st.write("📊 **Aperçu des données complètes:**") |
|
|
st.dataframe(df.head(10)) |
|
|
|
|
|
|
|
|
check_years_presence(df) |
|
|
else: |
|
|
st.warning("⚠️ Aucune donnée disponible dans 'rasff_notifications'.") |
|
|
else: |
|
|
st.error("❌ Le téléchargement a échoué.") |
|
|
|