File size: 4,569 Bytes
c1f79bc |
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 111 112 113 |
import io
import os
import json
import streamlit as st
import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload, MediaIoBaseUpload
# Environment variables
FOLDER_ID = os.getenv("FOLDER_ID")
GOOGLE_CREDENTIALS = os.environ.get("GOOGLE_CREDENTIALS")
def create_new_file_in_drive(username, dataframe_to_upload, credentials_json, folder_id):
"""Crée un nouveau fichier CSV dans Google Drive à partir d'un DataFrame Pandas."""
creds_dict = json.loads(credentials_json)
# Charger les informations d'identification du compte de service
creds = service_account.Credentials.from_service_account_info(creds_dict)
# Construire le service API Drive
service = build('drive', 'v3', credentials=creds)
# Convertir le DataFrame en fichier CSV en mémoire
csv_buffer = io.BytesIO()
dataframe_to_upload.to_csv(csv_buffer, index=False, sep=';', encoding='utf-8')
csv_buffer.seek(0)
# Créer les métadonnées du fichier
filename = f"rating-results-{username}.csv"
file_metadata = {
'name': filename,
'parents': [folder_id]
}
# Télécharger le fichier CSV sur Google Drive
media = MediaIoBaseUpload(csv_buffer, mimetype='text/csv', resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
print(f"File '{filename}' created successfully.")
def main():
st.title("Problematic Rating App")
# Initialiser st.session_state.user et st.session_state.page si ce n'est pas déjà fait
if 'user' not in st.session_state:
st.session_state.user = None
if 'page' not in st.session_state:
st.session_state.page = 0 # 0 = page accueil, 1 = page notation
# Page d'accueil pour saisir le nom de l'utilisateur
if st.session_state.page == 0:
st.session_state.user = st.text_input("Enter your name:")
if st.session_state.user:
st.session_state.page = 1
st.rerun() # important
else:
st.stop()
# Charger le fichier CSV
try:
df = pd.read_csv("evaluation_dataset.csv", sep=';')
except FileNotFoundError:
st.error("evaluation_dataset.csv not found. Please upload the file.")
return
# Initialisation des variables de session
if 'problem_index' not in st.session_state:
st.session_state.problem_index = 0
if 'formulation_index' not in st.session_state:
st.session_state.formulation_index = 0
if 'results' not in st.session_state:
st.session_state.results = []
# Afficher la problématique à noter
if st.session_state.problem_index < len(df):
problem = df.iloc[st.session_state.problem_index]
formulation_types = ['original_form', 'perspective_shift', 'paraphrase', 'structural_transformation']
current_formulation = formulation_types[st.session_state.formulation_index]
st.write(f"Technical problem {st.session_state.problem_index + 1}/{len(df)}")
st.write(f"Formulation {st.session_state.formulation_index + 1}/4")
st.write(problem[current_formulation])
# Menu déroulant pour la notation
score = st.radio("Rate the problem:", options=[0, 1, 2, 3, 4, 5, "Don't know"], index=None,)
# Bouton pour passer à la formulation suivante ou à la problématique suivante
if st.button("Next"):
# Vérifier si le nom d'utilisateur est défini
if st.session_state.user:
st.session_state.results.append({
'user': st.session_state.user,
'formulation': current_formulation,
'problematic': problem[current_formulation],
'score': score
})
st.session_state.formulation_index += 1
if st.session_state.formulation_index == 4:
st.session_state.formulation_index = 0
st.session_state.problem_index += 1
st.rerun()
else:
st.warning("Please enter your name before proceeding.")
else:
# Afficher un message de remerciement et générer le fichier CSV
st.write("Thanks for rating the problems!")
st.session_state.results_df = pd.DataFrame(st.session_state.results)
create_new_file_in_drive(st.session_state.user, st.session_state.results_df, GOOGLE_CREDENTIALS, FOLDER_ID)
if __name__ == "__main__":
main() |