neoava / app.py
giseldo's picture
Update app.py
3165733 verified
import streamlit as st
from streamlit_oauth import OAuth2Component
from dotenv import load_dotenv
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
import pandas as pd
import os
load_dotenv()
CLIENT_ID = os.environ["GOOGLE_CLIENT_ID"]
CLIENT_SECRET = os.environ["GOOGLE_CLIENT_SECRET"]
REDIRECT_URI = os.environ["GOOGLE_REDIRECT_URI"]
AUTHORIZE_URL = "https://accounts.google.com/o/oauth2/v2/auth"
TOKEN_URL = "https://oauth2.googleapis.com/token"
REFRESH_TOKEN_URL = "https://oauth2.googleapis.com/token"
REVOKE_TOKEN_URL = "https://oauth2.googleapis.com/revoke"
SCOPES = "openid profile email https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/classroom.courses https://www.googleapis.com/auth/drive.readonly.metadata https://www.googleapis.com/auth/classroom.announcements https://www.googleapis.com/auth/classroom.courses https://www.googleapis.com/auth/classroom.coursework.me https://www.googleapis.com/auth/classroom.coursework.students https://www.googleapis.com/auth/classroom.courseworkmaterials https://www.googleapis.com/auth/classroom.guardianlinks.students https://www.googleapis.com/auth/classroom.profile.emails https://www.googleapis.com/auth/classroom.profile.photos https://www.googleapis.com/auth/classroom.push-notifications https://www.googleapis.com/auth/classroom.rosters https://www.googleapis.com/auth/classroom.rosters.readonly https://www.googleapis.com/auth/classroom.topics"
oauth2 = OAuth2Component(CLIENT_ID, CLIENT_SECRET, AUTHORIZE_URL, TOKEN_URL, REFRESH_TOKEN_URL, REVOKE_TOKEN_URL)
st.title("NEOAVA")
st.success("Esse aplicativo é integrado com o Google Sala de aula. \n Portanto, é preciso efetuar login com a sua conta do Google.")
if 'token' not in st.session_state:
result = oauth2.authorize_button("Login", REDIRECT_URI, SCOPES)
if result and 'token' in result:
st.session_state.token = result.get('token')
st.rerun()
else:
token = st.session_state['token']
#st.json(token)
access_token = token.get("access_token")
st.success("Aguarde, pois estamos efetuando seu login e carregandos os dados do Google Sala de aula.")
# carregar as questoes do mslq
df_questoes_mslq = pd.read_csv("datasets/mslq.csv")
st.session_state["df_questoes_mslq"] = df_questoes_mslq
# carregar as dicas
df_dicas = pd.read_csv("datasets/dicas.csv")
st.session_state["df_dicas"] = df_dicas
creds = Credentials(token=access_token)
service = build('classroom', 'v1', credentials=creds)
def carregar_dataframe_autorregulacao_novo():
spreadsheet_id="19Bn8EFdhkSx71m0PkvoG8GbEUJW7vNRdJBdatfn6Keg"
creds = Credentials(token=access_token)
service = build('sheets', 'v4', credentials=creds)
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id, range="A1:AT10").execute()
rows = result.get('values', [])
panda_df = pd.DataFrame(data = rows[1:], columns=rows[0])
panda_df = panda_df.astype({panda_df.columns[2]: int, panda_df.columns[3]: int, panda_df.columns[4]: int, panda_df.columns[5]: int, panda_df.columns[6]: int, panda_df.columns[7]: int, panda_df.columns[8]: int, panda_df.columns[9]: int, panda_df.columns[10]: int,
panda_df.columns[11]: int, panda_df.columns[12]: int, panda_df.columns[13]: int, panda_df.columns[14]: int, panda_df.columns[15]: int, panda_df.columns[16]: int, panda_df.columns[17]: int, panda_df.columns[18]: int, panda_df.columns[19]: int, panda_df.columns[20]: int,
panda_df.columns[21]: int, panda_df.columns[22]: int, panda_df.columns[23]: int, panda_df.columns[24]: int, panda_df.columns[25]: int, panda_df.columns[26]: int, panda_df.columns[27]: int, panda_df.columns[28]: int, panda_df.columns[29]: int, panda_df.columns[30]: int,
panda_df.columns[31]: int, panda_df.columns[32]: int, panda_df.columns[33]: int, panda_df.columns[34]: int, panda_df.columns[35]: int, panda_df.columns[36]: int, panda_df.columns[37]: int, panda_df.columns[38]: int, panda_df.columns[39]: int, panda_df.columns[40]: int,
panda_df.columns[41]: int, panda_df.columns[42]: int, panda_df.columns[43]: int, panda_df.columns[44]: int, panda_df.columns[45]: int})
return panda_df
#return pd.read_csv("datasets/resposta_autorregulacao_v2.csv")
def carregar_dataframe_bigfive_novo():
spreadsheet_id="19Py0-JS3o2QDEdCX2EaJ2vV3M8uTUIgX8q52BQ4NiY4"
creds = Credentials(token=access_token)
service = build('sheets', 'v4', credentials=creds)
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id, range="A1:AT10").execute()
rows = result.get('values', [])
panda_df = pd.DataFrame(data = rows[1:], columns=rows[0])
panda_df = panda_df.astype({panda_df.columns[2]: int, panda_df.columns[3]: int, panda_df.columns[4]: int, panda_df.columns[5]: int, panda_df.columns[6]: int, panda_df.columns[7]: int, panda_df.columns[8]: int, panda_df.columns[9]: int, panda_df.columns[10]: int,
panda_df.columns[11]: int, panda_df.columns[12]: int, panda_df.columns[13]: int, panda_df.columns[14]: int, panda_df.columns[15]: int, panda_df.columns[16]: int, panda_df.columns[17]: int, panda_df.columns[18]: int, panda_df.columns[19]: int, panda_df.columns[20]: int,
panda_df.columns[21]: int, panda_df.columns[22]: int, panda_df.columns[23]: int, panda_df.columns[24]: int, panda_df.columns[25]: int, panda_df.columns[26]: int, panda_df.columns[27]: int, panda_df.columns[28]: int, panda_df.columns[29]: int, panda_df.columns[30]: int,
panda_df.columns[31]: int, panda_df.columns[32]: int, panda_df.columns[33]: int, panda_df.columns[34]: int, panda_df.columns[35]: int, panda_df.columns[36]: int, panda_df.columns[37]: int, panda_df.columns[38]: int, panda_df.columns[39]: int, panda_df.columns[40]: int,
panda_df.columns[41]: int, panda_df.columns[42]: int, panda_df.columns[43]: int, panda_df.columns[44]: int, panda_df.columns[45]: int})
return panda_df
#return pd.read_csv("datasets/resposta_bigfive_v2.csv")
# carregar as respostas de autorregulação
df_respostas = carregar_dataframe_autorregulacao_novo()
st.session_state["df_respostas"] = df_respostas
# carregar questoes do big five
df_respostas_big_five = carregar_dataframe_bigfive_novo()
st.session_state["df_respostas_big_five"] = df_respostas_big_five
st.session_state["limite"] = 4
results = service.courses().list(pageSize=10).execute()
courses = results.get("courses", [])
lista_curso = list()
for course in courses:
lista_curso.append([course['name'], course['id']])
df_cursos = pd.DataFrame(lista_curso, columns=["nome", "id"])
st.session_state["df_cursos"] = df_cursos
st.success("Selecione uma turma.")
curso_selecionado = st.selectbox(label="Selecione um curso do sala de aula para continuar:", options=df_cursos["nome"])
btn_carregar_curso = st.button("Carregar", key="btncarregarcurso")
def carregar_alunos(id_curso_selecionado):
creds = Credentials(token=access_token)
classroom = build('classroom', 'v1', credentials=creds)
results = classroom.courses().students().list(courseId=id_curso_selecionado).execute()
estudantes = results.get("students", [])
lista_estudante = list()
for estudante in estudantes:
lista_estudante.append([estudante['userId'], estudante["profile"]["name"]["fullName"], estudante["profile"]["emailAddress"]])
df_estudantes = pd.DataFrame(lista_estudante, columns=["userId", "nome", "email"])
st.session_state["df_estudantes"] = df_estudantes
#st.success("Todos os estudantes carregados!")
if btn_carregar_curso:
#st.write("Curso Selecionado: ", curso_selecionado)
df_curso = df_cursos[df_cursos["nome"]==curso_selecionado]
id_curso_selecionado = df_curso["id"].iloc[0]
#st.write("ID do curso selecionado: ", id_curso_selecionado)
st.session_state["id_curso_selecionado"] = id_curso_selecionado
carregar_alunos(id_curso_selecionado)
st.success("Todos os dados carregados!")