File size: 3,999 Bytes
759901e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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é.")