Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -648,29 +648,29 @@ def processar_boletim(file) -> Tuple[Optional[str], str]:
|
|
648 |
try:
|
649 |
if file is None:
|
650 |
return None, "Nenhum arquivo foi fornecido."
|
651 |
-
|
652 |
with temp_directory() as temp_dir:
|
653 |
# Salvar arquivo temporário
|
654 |
temp_pdf = os.path.join(temp_dir, 'boletim.pdf')
|
655 |
with open(temp_pdf, 'wb') as f:
|
656 |
f.write(file)
|
657 |
-
|
658 |
if os.path.getsize(temp_pdf) == 0:
|
659 |
return None, "O arquivo está vazio."
|
660 |
-
|
661 |
# Extrair e processar dados
|
662 |
df = extrair_tabelas_pdf(temp_pdf)
|
663 |
if df is None or df.empty:
|
664 |
return None, "Não foi possível extrair dados do PDF."
|
665 |
-
|
666 |
disciplinas_dados = obter_disciplinas_validas(df)
|
667 |
if not disciplinas_dados:
|
668 |
return None, "Nenhuma disciplina válida encontrada no boletim."
|
669 |
-
|
670 |
# Separar disciplinas e determinar nível
|
671 |
categorias = separar_disciplinas_por_categoria(disciplinas_dados)
|
672 |
nivel_texto = "Ensino Médio" if categorias['nivel'] == "medio" else "Ensino Fundamental"
|
673 |
-
|
674 |
# Gerar gráficos em paralelo
|
675 |
with ThreadPoolExecutor() as executor:
|
676 |
futures = {
|
@@ -694,11 +694,11 @@ def processar_boletim(file) -> Tuple[Optional[str], str]:
|
|
694 |
temp_dir
|
695 |
)
|
696 |
}
|
697 |
-
|
698 |
grafico_basica = futures['basica'].result()
|
699 |
grafico_diversificada = futures['diversificada'].result()
|
700 |
grafico_medias = futures['medias'].result()
|
701 |
-
|
702 |
# Gerar relatório final
|
703 |
pdf_path = gerar_relatorio_pdf(
|
704 |
df,
|
@@ -707,12 +707,17 @@ def processar_boletim(file) -> Tuple[Optional[str], str]:
|
|
707 |
grafico_diversificada,
|
708 |
grafico_medias
|
709 |
)
|
710 |
-
|
|
|
|
|
|
|
|
|
|
|
711 |
# Preparar arquivo de retorno
|
712 |
output_path = os.path.join(temp_dir, 'relatorio_final.pdf')
|
713 |
shutil.copy2(pdf_path, output_path)
|
714 |
return output_path, "Relatório gerado com sucesso!"
|
715 |
-
|
716 |
except Exception as e:
|
717 |
logger.exception("Erro durante o processamento")
|
718 |
return None, f"Erro ao processar o boletim: {str(e)}"
|
|
|
648 |
try:
|
649 |
if file is None:
|
650 |
return None, "Nenhum arquivo foi fornecido."
|
651 |
+
|
652 |
with temp_directory() as temp_dir:
|
653 |
# Salvar arquivo temporário
|
654 |
temp_pdf = os.path.join(temp_dir, 'boletim.pdf')
|
655 |
with open(temp_pdf, 'wb') as f:
|
656 |
f.write(file)
|
657 |
+
|
658 |
if os.path.getsize(temp_pdf) == 0:
|
659 |
return None, "O arquivo está vazio."
|
660 |
+
|
661 |
# Extrair e processar dados
|
662 |
df = extrair_tabelas_pdf(temp_pdf)
|
663 |
if df is None or df.empty:
|
664 |
return None, "Não foi possível extrair dados do PDF."
|
665 |
+
|
666 |
disciplinas_dados = obter_disciplinas_validas(df)
|
667 |
if not disciplinas_dados:
|
668 |
return None, "Nenhuma disciplina válida encontrada no boletim."
|
669 |
+
|
670 |
# Separar disciplinas e determinar nível
|
671 |
categorias = separar_disciplinas_por_categoria(disciplinas_dados)
|
672 |
nivel_texto = "Ensino Médio" if categorias['nivel'] == "medio" else "Ensino Fundamental"
|
673 |
+
|
674 |
# Gerar gráficos em paralelo
|
675 |
with ThreadPoolExecutor() as executor:
|
676 |
futures = {
|
|
|
694 |
temp_dir
|
695 |
)
|
696 |
}
|
697 |
+
|
698 |
grafico_basica = futures['basica'].result()
|
699 |
grafico_diversificada = futures['diversificada'].result()
|
700 |
grafico_medias = futures['medias'].result()
|
701 |
+
|
702 |
# Gerar relatório final
|
703 |
pdf_path = gerar_relatorio_pdf(
|
704 |
df,
|
|
|
707 |
grafico_diversificada,
|
708 |
grafico_medias
|
709 |
)
|
710 |
+
|
711 |
+
# Verificar se o PDF foi criado
|
712 |
+
if not os.path.exists(pdf_path):
|
713 |
+
logger.error("Falha ao gerar o PDF do relatório.")
|
714 |
+
return None, "Erro ao gerar o relatório em PDF."
|
715 |
+
|
716 |
# Preparar arquivo de retorno
|
717 |
output_path = os.path.join(temp_dir, 'relatorio_final.pdf')
|
718 |
shutil.copy2(pdf_path, output_path)
|
719 |
return output_path, "Relatório gerado com sucesso!"
|
720 |
+
|
721 |
except Exception as e:
|
722 |
logger.exception("Erro durante o processamento")
|
723 |
return None, f"Erro ao processar o boletim: {str(e)}"
|