def verify_master_user():
	print('Iniciando a verificação de usuário Master')
	#Instanciando a autenticação da tabela de usuários da api
	auth = Authentication(table = 'users_api')
	#Verifica se o usuário master existe na tabela de usuários da api
	username = '******'
	print('Consultando se o usuário master existe')
	query = auth.verify_user(username)
	print('A consulta retornou ' + str(query))
	if query.empty == True:
		#Data da criação do usuário
		createdAt = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
		list_datas = [username, createdAt]
		list_labels = ['username','createdAt','password']
		#Lendo a senha que foi passada como variável de ambiente
		password = os.environ['PASSWORD_MASTER_USER']
		print('A senha do usuário Master que foi passada é: ' + password)
		try:
			print('Inserindo no banco de dados o usuário Master')
			#Inserindo o usuário master
			auth.insert_new_user(username_json = username,
			  					 password_json = password,
			  					 list_datas = list_datas,
			  					 list_labels = list_labels
			  					 )
			print('Inserção foi um sucesso')
			return 'Successful authentication.'
		except Exception as e:
			print('Erro na inserção do usuário Master')
			raise ValueError(str(e))
def forgot_password():
	#Lê o username do usuário que quer ser alterado e os dados do usuário da api
	try:
	    user_api = request.json['user_api']
	    password_user_api = request.json['password_user_api']
	    username = request.json['username']
	    table = request.json['table']
	except Exception as e:
	    raise ValueError('Error: read json. ' + str(e))
	try:
		#Instancia a classe de autenticação na tabela que o front passar
		auth = Authentication(table = table)
		auth.authenticate_user(user_api, password_user_api)
	except Exception as e:
	    raise ValueError(str(e))
	try:
		#Coletando dados desse usuário
		query = auth.verify_user(username)
		#Coletando email do usuário
		email_user = query['email']
		#Envia email do usuário
		email.send_email(type_message = 'forgot_password', 
						 subject = email_user,
						 name_addressee = username,
						 token = '123',
						 email_address = email_user
						 )
		return 'Successful send email.'
	except Exception as e:
	    raise ValueError('Error: user does not exist. ' + str(e))
def register_user_student():
	#Instanciando a autenticação da tabela de estudantes do frontend
	auth_users_api = Authentication(table = 'users_api')
	auth_users_students = Authentication(table = 'users_students')
	try:
		user = request.json['user']
		username = request.json['username']
		password = request.json['password']
		name = request.json['name']
		registration = request.json['registration']
		email = request.json['email']
		user_api = request.json['user_api']
		password_user_api = request.json['password_user_api']
	except Exception as e:
		raise ValueError('Error: read json. ' + str(e))
	#Data da criação do usuário
	createdAt = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
	#Verifica se o usuário mestre passado no post é o que permite
	#cadastro no banco de dados, se for correto, o cadastro do usuário 
	#prossegue
	try:
		auth_users_api.authenticate_user(user_api, password_user_api)
	except Exception as e:
		raise ValueError(str(e))		
	list_datas = [username, user, name, registration, email, createdAt]
	list_labels = ['username','user', 'name', 'registration', 'email','createdAt','password']
	try:
		auth_users_students.insert_new_user(username_json = username,
				   	  					    password_json = password,
						  					list_datas = list_datas,
						  				    list_labels = list_labels
						  					)
		return 'New user student successfully inserted.'
	except Exception as e:
		raise ValueError(e)		
def authenticate_user_teacher():
	#Instancia a autenticação na tabela de professores
	auth_users_teachers = Authentication(table = 'users_teachers')
	try:
		username = request.json['username']
		password = request.json['password']
	except Exception as e:	
		raise ValueError('Error: read json. ' + str(e))
	try:
		#Verifica se usuario existe na tabela
		auth_users_teachers.authenticate_user(username, password)
		return 'Successful authentication.'
	except Exception as e:
		raise ValueError(str(e))
def update_user():
	try:
		user_api = request.json['user_api']
		password_user_api = request.json['password_user_api']
		username = request.json['username']
		new_password = request.json['new_password']
		table = request.json['table']
	except Exception as e:
	    raise ValueError('Error: read json. ' + str(e))
	try:
		#Instancia a classe de autenticação na tabela que o front passar
		auth = Authentication(table = table)
		auth.authenticate_user(user_api, password_user_api)
	except Exception as e:
	    raise ValueError(str(e))
	new_password = auth.generate_hash(password)
	try:
		auth.update_user(table = table, 
						 column_new_data = 'password',
						 column_reference = 'username',
						 new_data = username, 
						 data_reference = new_password)
		return 'Successful update user.'
	except Exception as e:
	    raise ValueError('Error: update password. ' + str(e))
示例#6
0
def post_graphs():
  try:
    id_class = request.json['id_class']
    user_api = request.json['user_api']
    password_user_api = request.json['password_user_api']
  except Exception as e:
    raise ValueError('Error: read json. ' + str(e))
  #Verifica se o usuário mestre passado no post é o que permite
  #cadastro no banco de dados, se for correto, o cadastro do usuário 
  #prossegue
  try:
    auth_users_api = Authentication(table = 'users_api')
    auth_users_api.authenticate_user(user_api, password_user_api)
  except Exception as e:
    raise ValueError(str(e))
  #Cria o dataframe com a turma informada
  data = pd.DataFrame([id_class], columns = ['id_class'])
  try:
    condition = "WHERE id_class = '" + data.iloc[0,0] + "'"
    df_submission = psql.search(table='submissions', condition = condition)
    df_lop_lists = psql.search(table='lists', condition = condition)
    df_lop_tests = psql.search(table='tests', condition = condition) 
    df_question_data = psql.search(table='questions')
    df_class = psql.search(table='teachers_classes')
  except Exception as e:
    raise ValueError('Error: consult at database. ' + str(e))
  #Se não tiver nenhuma submissão na turma
  if df_submission.empty:
    raise ValueError('Error: class without data')
  #Selecionando apenas as questões dessa turma
  df_questions_selected = lop.select_questions(df_question_data, df_lop_lists, df_lop_tests)
  #Dados de lista
  try:
    #Dados de performance
    df_performance_list = lop.performance_list_test(df_submission, 'list', df_lop_lists, df_lop_tests, df_question_data)
    df_performance_difficulty_list = lop.performance_difficulty_list_test(df_submission, df_questions_selected,'list')
    df_performance_subject_list = lop.performance_subject_list_test(df_submission, df_questions_selected, 'list')
    #Grafico 1, desempenho por turma analisando notas
    GENL = lop.graph_more_less_list_test_class(df_performance_list, df_class, data, 70.0, 'list')
    GTDL = lop.graph_more_less_difficulty_list_test_class(df_performance_difficulty_list, df_class, data, 70.0)
    GTAL = lop.graph_more_less_subject_list_test_class(df_performance_subject_list, df_class, data, 70.0)
    #Grafico 2, desempenho por aluno analisando notas
    GTNL = lop.graph_performance_student_list_test(df_performance_list, df_class, data, 'list')
    GEDL = lop.graph_performance_student_difficulty_list_test(df_performance_difficulty_list, df_class, data)
    GEAL = lop.graph_performance_student_subject_list_test(df_performance_subject_list, data, df_class)
    #Média geral dos alunos 
    media_GTNL = lop.media_graph_performance_student_list_test(df_performance_list, df_questions_selected, 'list')
    media_GEDL = lop.media_graph_performance_student_difficulty_list_test(df_performance_difficulty_list, df_questions_selected)
    media_GEAL = lop.media_graph_performance_subject_list_test(df_performance_subject_list)
  except Exception as e:
    raise ValueError('Error: generate data lists. ' + str(e))
  #Se não tiver nenhuma prova cadastrada  
  if df_lop_tests.empty:
    #Insere vazio e não realiza a geração dos dados
    try:
      #Grafico 1, desempenho por turma analisando notas
      GENP = json.dumps([{}])
      GTDP = json.dumps([{}])
      GTAP = json.dumps([{}])
      #Grafico 2, desempenho por aluno analisando notas
      GTNP = json.dumps([{}])
      GEDP = json.dumps([{}])
      GEAP = json.dumps([{}])
      #Média geral dos alunos 
      media_GTNP = json.dumps([{}])
      media_GEDP = json.dumps([{}])
      media_GEAP = json.dumps([{}])
    except:
      raise ValueError('Error: insert empty in data tests')
  #Se existe provas cadastradas, gera os dados normalmente      
  else:
    try:
      df_performance_test = lop.performance_list_test(df_submission, 'test', df_lop_lists, df_lop_tests, df_question_data)
      df_performance_difficulty_test = lop.performance_difficulty_list_test(df_submission, df_questions_selected,'test')
      df_performance_subject_test = lop.performance_subject_list_test(df_submission, df_questions_selected, 'test')
      #Grafico 1, desempenho por turma analisando notas
      GENP = lop.graph_more_less_list_test_class(df_performance_test, df_class, data, 70.0, 'test')
      GTDP = lop.graph_more_less_difficulty_list_test_class(df_performance_difficulty_test, df_class, data, 70.0)
      GTAP = lop.graph_more_less_subject_list_test_class(df_performance_subject_test, df_class, data, 70.0)
      #Grafico 2, desempenho por aluno analisando notas
      GTNP = lop.graph_performance_student_list_test(df_performance_test, df_class, data, 'test')
      GEDP = lop.graph_performance_student_difficulty_list_test(df_performance_difficulty_test, df_class, data)
      GEAP = lop.graph_performance_student_subject_list_test(df_performance_subject_test, data, df_class)
      #Média geral dos alunos 
      media_GTNP = lop.media_graph_performance_student_list_test(df_performance_test, df_questions_selected, 'test')
      media_GEDP = lop.media_graph_performance_student_difficulty_list_test(df_performance_difficulty_test, df_questions_selected)
      media_GEAP = lop.media_graph_performance_subject_list_test(df_performance_subject_test)
    except:
      raise ValueError('Error: generate data tests')
  #Histograma do dias gastos para concluir uma lista/assunto/dificuldade
  try:
    GTDGL = lop.graph_days_spent_list(df_submission)
    GTDGA = lop.graph_days_spent_subject(df_submission, df_questions_selected)
    GTDGD = lop.graph_days_spent_difficulty(df_submission, df_questions_selected)
  except:
    raise ValueError('Error: generate graph days spent per list/subject/difficulty')
  #Transformando em um só json
  name_graphs = ['"GENL"','"GENP"','"GTDL"','"GTDP"','"GTAL"','"GTAP"',
                 '"GTNL"','"GTNP"','"GEDL"','"GEDP"','"GEAL"','"GEAP"',
                 '"media_GTNL"','"media_GTNP"','"media_GEDL"','"media_GEDP"','"media_GEAL"','"media_GEAP"',
                 '"GTDGL"','"GTDGA"','"GTDGD"']
  graphs =      [GENL,GENP,GTDL,GTDP,GTAL,GTAP,
                 GTNL,GTNP,GEDL,GEDP,GEAL,GEAP,
                 media_GTNL,media_GTNP,media_GEDL,media_GEDP,media_GEAL,media_GEAP,
                 GTDGL,GTDGA,GTDGD]
  return lop.create_unique_json(name_graphs, graphs)