Value-Props / tabs /google_drive_read_preprompt.py
Demosthene-OR's picture
Update google_drive_read_preprompt.py
a806342
import os
import requests
import streamlit as st
from googleapiclient.discovery import build
from google.auth.credentials import AnonymousCredentials
from google.auth.transport.requests import Request
from dotenv import load_dotenv
from google.oauth2.credentials import Credentials
if st.session_state.Cloud != 0:
load_dotenv()
# Charger les secrets depuis les variables d'environnement
CLIENT_ID = os.getenv("GOOGLE_CLIENT_ID")
CLIENT_SECRET = os.getenv("GOOGLE_CLIENT_SECRET")
REFRESH_TOKEN = os.getenv("GOOGLE_REFRESH_TOKEN")
GOOGLE_PREPROMPT_FILE_ID = os.getenv("GOOGLE_PREPROMPT_FILE_ID")
# URL pour rafraîchir le token
TOKEN_URL = "https://oauth2.googleapis.com/token"
# Fonction pour obtenir un token d'accès
def get_access_token():
data = {
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"refresh_token": REFRESH_TOKEN,
"grant_type": "refresh_token",
}
response = requests.post(TOKEN_URL, data=data)
response_data = response.json()
if "access_token" in response_data:
return response_data["access_token"]
else:
raise Exception(f"Erreur d'obtention du token d'accès : {response_data}")
# Obtenir le token d'accès
access_token = get_access_token()
# Fonction pour lire le contenu d'un Google Doc
def read_google_doc(doc_id):
try:
# Créer les credentials à partir du token d'accès
creds = Credentials(
token=access_token,
refresh_token=REFRESH_TOKEN,
token_uri="https://oauth2.googleapis.com/token",
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET
)
# Construire le service Google Docs avec les credentials
docs_service = build('docs', 'v1', credentials=creds)
# Requête pour obtenir le contenu du document
document = docs_service.documents().get(documentId=doc_id).execute()
content = document.get('body', {}).get('content', [])
# Initialiser une liste pour stocker chaque ligne
lines = []
# Extraire chaque ligne de texte
for element in content:
if 'paragraph' in element:
paragraph_text = ""
for paragraph in element['paragraph']['elements']:
t = paragraph.get('textRun', {}).get('content', '')
paragraph_text += t
if paragraph_text.strip():
lines.append(paragraph_text.strip())
return lines
except Exception as e:
raise Exception(f"Erreur lors de la lecture du document : {e}")
def read_param():
# Lire et afficher le contenu d'un fichier
try:
lines = read_google_doc(GOOGLE_PREPROMPT_FILE_ID)
return lines
except Exception as e:
st.write(f"Erreur : {e}")
def format_param():
try:
lines = read_param()
if not lines:
raise Exception("Le contenu du document est vide.")
label = []
question = []
options = [[] for _ in range(8)]
i = 0
for p in range(8):
while i < len(lines) and len(lines[i]) >= 3 and lines[i][:3] == "===":
i += 1
label.append(lines[i][8:])
i += 1
if p not in [0, 1, 2]:
question.append(lines[i])
i += 1
else:
question.append("")
while i < len(lines) and len(lines[i]) >= 3 and lines[i][:3] != "===":
options[p].append(lines[i])
i += 1
i += 1
while i < len(lines):
question.append(lines[i])
i += 1
except Exception as e:
st.write(f"Erreur : {e}")
return label, question, options