Spaces:
Runtime error
Runtime error
from dash import Input, Output | |
import plotly.express as px | |
import os | |
from helpers.processor import Processor | |
from helpers.s3 import S3Client | |
from helpers.models import S3Config | |
from global_vars import BUCKET_NAME | |
from app import app | |
from dotenv import load_dotenv | |
load_dotenv(".env") | |
print("*********************c") | |
print(os.getenv("AWS_ENDPOINT_URL_S3")) | |
# Initialisation des clients | |
s3_config = S3Config( | |
bucket_name=BUCKET_NAME, | |
endpoint_url=os.getenv("AWS_ENDPOINT_URL_S3"), | |
access_key=os.getenv("AWS_ACCESS_KEY_ID"), | |
secret_key=os.getenv("AWS_SECRET_ACCESS_KEY") | |
) | |
s3_client = S3Client(config=s3_config) | |
processor = Processor() | |
def update_dropdowns(chapter_value): | |
df_contributions = processor.get_contribution_data(s3_client) | |
if df_contributions.empty: | |
return [], [] | |
# chapitres unique | |
chapters = sorted(df_contributions["chapter"].unique()) | |
chapter_options = [{"label": "Tous les chapitres", "value": "all"}] + [ | |
{"label": ch, "value": ch} for ch in chapters | |
] | |
# Récupération des pages en fonction du chapitre sélectionné | |
if chapter_value and chapter_value != "all": | |
pages = sorted( | |
df_contributions[df_contributions["chapter"] == chapter_value]["page"].unique() | |
) | |
else: | |
pages = sorted(df_contributions["page"].unique()) | |
page_options = [{"label": "Toutes les pages", "value": "all"}] + [ | |
{"label": p, "value": p} for p in pages | |
] | |
return chapter_options, page_options | |
def update_graph(chapter, page, mode): | |
df_contributions = processor.get_contribution_data(s3_client) | |
if df_contributions.empty: | |
return px.bar(title="Aucune donnée disponible."), "Aucune donnée chargée." | |
filtered_df_contributions = df_contributions.copy() | |
if chapter != "all": | |
filtered_df_contributions = filtered_df_contributions[ | |
filtered_df_contributions["chapter"] == chapter | |
] | |
if page != "all": | |
filtered_df_contributions = filtered_df_contributions[ | |
filtered_df_contributions["page"] == page | |
] | |
contributions = ( | |
filtered_df_contributions.groupby("user_id").size().reset_index(name="value") | |
) | |
if mode == "percentage": | |
total = contributions["value"].sum() | |
contributions["value"] = (contributions["value"] / total * 100).round(2) | |
value_label = "Contributions (%)" | |
else: | |
value_label = "Nombre de Contributions" | |
fig = px.bar( | |
contributions, | |
y="user_id", | |
x="value", | |
labels={"user_id": "Contributeur", "value": value_label}, | |
title=f"Résumé des Contributions ({chapter}/{page})", | |
text="value", | |
orientation="h", # Barre horizontale | |
) | |
fig.update_traces(textposition="outside") | |
fig.update_layout( | |
xaxis_title=value_label, yaxis_title="ID Contributeur", bargap=0.2 | |
) | |
summary = f"Affichage de {len(filtered_df_contributions)} contributions de {len(contributions)} contributeurs." | |
return fig, summary | |