Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -599,29 +599,29 @@ def processar_boletim(file) -> Tuple[Optional[str], str]:
|
|
599 |
try:
|
600 |
if file is None:
|
601 |
return None, "Nenhum arquivo foi fornecido."
|
602 |
-
|
603 |
with temp_directory() as temp_dir:
|
604 |
# Salvar arquivo temporário
|
605 |
temp_pdf = os.path.join(temp_dir, 'boletim.pdf')
|
606 |
with open(temp_pdf, 'wb') as f:
|
607 |
f.write(file)
|
608 |
-
|
609 |
if os.path.getsize(temp_pdf) == 0:
|
610 |
return None, "O arquivo está vazio."
|
611 |
-
|
612 |
# Extrair e processar dados
|
613 |
df = extrair_tabelas_pdf(temp_pdf)
|
614 |
if df is None or df.empty:
|
615 |
return None, "Não foi possível extrair dados do PDF."
|
616 |
-
|
617 |
disciplinas_dados = obter_disciplinas_validas(df)
|
618 |
if not disciplinas_dados:
|
619 |
return None, "Nenhuma disciplina válida encontrada no boletim."
|
620 |
-
|
621 |
# Separar disciplinas e determinar nível
|
622 |
categorias = separar_disciplinas_por_categoria(disciplinas_dados)
|
623 |
nivel_texto = "Ensino Médio" if categorias['nivel'] == "medio" else "Ensino Fundamental"
|
624 |
-
|
625 |
# Gerar gráficos em paralelo
|
626 |
with ThreadPoolExecutor() as executor:
|
627 |
futures = {
|
@@ -645,11 +645,11 @@ def processar_boletim(file) -> Tuple[Optional[str], str]:
|
|
645 |
temp_dir
|
646 |
)
|
647 |
}
|
648 |
-
|
649 |
grafico_basica = futures['basica'].result()
|
650 |
grafico_diversificada = futures['diversificada'].result()
|
651 |
grafico_medias = futures['medias'].result()
|
652 |
-
|
653 |
# Gerar relatório final
|
654 |
pdf_path = gerar_relatorio_pdf(
|
655 |
df,
|
@@ -658,17 +658,16 @@ def processar_boletim(file) -> Tuple[Optional[str], str]:
|
|
658 |
grafico_diversificada,
|
659 |
grafico_medias
|
660 |
)
|
661 |
-
|
662 |
-
# Verificar se o PDF foi criado
|
663 |
-
if
|
|
|
|
|
|
|
|
|
664 |
logger.error("Falha ao gerar o PDF do relatório.")
|
665 |
-
return None, "Erro ao gerar o relatório
|
666 |
-
|
667 |
-
# Preparar arquivo de retorno
|
668 |
-
output_path = os.path.join(temp_dir, 'relatorio_final.pdf')
|
669 |
-
shutil.copy2(pdf_path, output_path)
|
670 |
-
return output_path, "Relatório gerado com sucesso!"
|
671 |
-
|
672 |
except Exception as e:
|
673 |
logger.exception("Erro durante o processamento")
|
674 |
return None, f"Erro ao processar o boletim: {str(e)}"
|
|
|
599 |
try:
|
600 |
if file is None:
|
601 |
return None, "Nenhum arquivo foi fornecido."
|
602 |
+
|
603 |
with temp_directory() as temp_dir:
|
604 |
# Salvar arquivo temporário
|
605 |
temp_pdf = os.path.join(temp_dir, 'boletim.pdf')
|
606 |
with open(temp_pdf, 'wb') as f:
|
607 |
f.write(file)
|
608 |
+
|
609 |
if os.path.getsize(temp_pdf) == 0:
|
610 |
return None, "O arquivo está vazio."
|
611 |
+
|
612 |
# Extrair e processar dados
|
613 |
df = extrair_tabelas_pdf(temp_pdf)
|
614 |
if df is None or df.empty:
|
615 |
return None, "Não foi possível extrair dados do PDF."
|
616 |
+
|
617 |
disciplinas_dados = obter_disciplinas_validas(df)
|
618 |
if not disciplinas_dados:
|
619 |
return None, "Nenhuma disciplina válida encontrada no boletim."
|
620 |
+
|
621 |
# Separar disciplinas e determinar nível
|
622 |
categorias = separar_disciplinas_por_categoria(disciplinas_dados)
|
623 |
nivel_texto = "Ensino Médio" if categorias['nivel'] == "medio" else "Ensino Fundamental"
|
624 |
+
|
625 |
# Gerar gráficos em paralelo
|
626 |
with ThreadPoolExecutor() as executor:
|
627 |
futures = {
|
|
|
645 |
temp_dir
|
646 |
)
|
647 |
}
|
648 |
+
|
649 |
grafico_basica = futures['basica'].result()
|
650 |
grafico_diversificada = futures['diversificada'].result()
|
651 |
grafico_medias = futures['medias'].result()
|
652 |
+
|
653 |
# Gerar relatório final
|
654 |
pdf_path = gerar_relatorio_pdf(
|
655 |
df,
|
|
|
658 |
grafico_diversificada,
|
659 |
grafico_medias
|
660 |
)
|
661 |
+
|
662 |
+
# Verificar se o arquivo PDF foi criado corretamente
|
663 |
+
if pdf_path and os.path.exists(pdf_path):
|
664 |
+
output_path = os.path.join(temp_dir, 'relatorio_final.pdf')
|
665 |
+
shutil.copy2(pdf_path, output_path)
|
666 |
+
return output_path, "Relatório gerado com sucesso!"
|
667 |
+
else:
|
668 |
logger.error("Falha ao gerar o PDF do relatório.")
|
669 |
+
return None, "Erro ao gerar o relatório PDF final."
|
670 |
+
|
|
|
|
|
|
|
|
|
|
|
671 |
except Exception as e:
|
672 |
logger.exception("Erro durante o processamento")
|
673 |
return None, f"Erro ao processar o boletim: {str(e)}"
|