Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -590,104 +590,6 @@ def processar_boletim(file):
|
|
590 |
try:
|
591 |
print("Iniciando processamento do arquivo...")
|
592 |
|
593 |
-
if file is None:
|
594 |
-
return None, "Nenhum arquivo foi fornecido."
|
595 |
-
|
596 |
-
# Verificar se é realmente um PDF
|
597 |
-
print(f"Nome do arquivo: {file.name}")
|
598 |
-
print(f"Tipo do arquivo: {file.type if hasattr(file, 'type') else 'Tipo não disponível'}")
|
599 |
-
|
600 |
-
if not file.name.lower().endswith('.pdf'):
|
601 |
-
return None, "O arquivo deve ser um PDF."
|
602 |
-
|
603 |
-
temp_dir = tempfile.mkdtemp()
|
604 |
-
print(f"Diretório temporário criado: {temp_dir}")
|
605 |
-
|
606 |
-
# Verificações mais detalhadas do arquivo
|
607 |
-
if not hasattr(file, 'name'):
|
608 |
-
print("Erro: Arquivo não tem atributo 'name'")
|
609 |
-
return None, "Arquivo inválido: formato não reconhecido."
|
610 |
-
|
611 |
-
if not os.path.exists(file.name):
|
612 |
-
print(f"Erro: Arquivo não existe no caminho: {file.name}")
|
613 |
-
return None, "Arquivo não encontrado no sistema."
|
614 |
-
|
615 |
-
if os.path.getsize(file.name) == 0:
|
616 |
-
print("Erro: Arquivo tem tamanho zero")
|
617 |
-
return None, "O arquivo está vazio."
|
618 |
-
|
619 |
-
# Copiar arquivo para diretório temporário
|
620 |
-
temp_pdf = os.path.join(temp_dir, 'boletim.pdf')
|
621 |
-
try:
|
622 |
-
shutil.copy2(file.name, temp_pdf)
|
623 |
-
print(f"Arquivo copiado para: {temp_pdf}")
|
624 |
-
except Exception as e:
|
625 |
-
print(f"Erro ao copiar arquivo: {str(e)}")
|
626 |
-
return None, f"Erro ao processar arquivo: {str(e)}"
|
627 |
-
|
628 |
-
if not os.path.exists(temp_pdf) or os.path.getsize(temp_pdf) == 0:
|
629 |
-
print("Erro: Arquivo temporário não foi criado corretamente")
|
630 |
-
return None, "Erro ao copiar o arquivo."
|
631 |
-
|
632 |
-
# Tentar abrir o PDF para verificar se é válido
|
633 |
-
try:
|
634 |
-
import PyPDF2
|
635 |
-
with open(temp_pdf, 'rb') as pdf_file:
|
636 |
-
pdf_reader = PyPDF2.PdfReader(pdf_file)
|
637 |
-
if len(pdf_reader.pages) == 0:
|
638 |
-
return None, "O PDF está vazio ou corrompido."
|
639 |
-
print(f"PDF válido com {len(pdf_reader.pages)} páginas")
|
640 |
-
except Exception as e:
|
641 |
-
print(f"Erro ao validar PDF: {str(e)}")
|
642 |
-
return None, "O arquivo não é um PDF válido."
|
643 |
-
|
644 |
-
print("Iniciando extração das tabelas...")
|
645 |
-
try:
|
646 |
-
df = extrair_tabelas_pdf(temp_pdf)
|
647 |
-
print("Tabelas extraídas com sucesso")
|
648 |
-
except Exception as e:
|
649 |
-
print(f"Erro na extração das tabelas: {str(e)}")
|
650 |
-
return None, f"Erro ao extrair dados do PDF: {str(e)}"
|
651 |
-
|
652 |
-
if df is None or df.empty:
|
653 |
-
print("Erro: DataFrame vazio após extração")
|
654 |
-
return None, "Não foi possível extrair dados do PDF."
|
655 |
-
|
656 |
-
try:
|
657 |
-
# Processar disciplinas
|
658 |
-
disciplinas_dados = obter_disciplinas_validas(df)
|
659 |
-
if not disciplinas_dados:
|
660 |
-
print("Erro: Nenhuma disciplina válida encontrada")
|
661 |
-
return None, "Nenhuma disciplina válida encontrada no boletim."
|
662 |
-
|
663 |
-
# Separar disciplinas por categoria
|
664 |
-
categorias = separar_disciplinas_por_categoria(disciplinas_dados)
|
665 |
-
nivel = categorias['nivel']
|
666 |
-
nivel_texto = "Ensino Médio" if nivel == "medio" else "Ensino Fundamental"
|
667 |
-
|
668 |
-
# Gerar gráficos
|
669 |
-
print("Gerando gráficos...")
|
670 |
-
grafico_basica = plotar_evolucao_bimestres(
|
671 |
-
categorias['formacao_basica'],
|
672 |
-
temp_dir,
|
673 |
-
titulo=f"Evolução das Médias - Formação Geral Básica ({nivel_texto})",
|
674 |
-
nome_arquivo='evolucao_basica.png'
|
675 |
-
)
|
676 |
-
|
677 |
-
grafico_diversificada = plotar_evolucao_bimestres(
|
678 |
-
categorias['diversificada'],
|
679 |
-
temp_dir,
|
680 |
-
titulo=f"Evolução das Médias - Parte Diversificada ({nivel_texto})",
|
681 |
-
nome_arquivo='evolucao_diversificada.png'
|
682 |
-
)
|
683 |
-
|
684 |
-
grafico_medias = plotar_graficos_destacados(disciplinas_dados, temp_dir)
|
685 |
-
def processar_boletim(file):
|
686 |
-
"""Função principal que processa o boletim e gera o relatório."""
|
687 |
-
temp_dir = None
|
688 |
-
try:
|
689 |
-
print("Iniciando processamento do arquivo...")
|
690 |
-
|
691 |
if file is None:
|
692 |
return None, "Nenhum arquivo foi fornecido."
|
693 |
|
|
|
590 |
try:
|
591 |
print("Iniciando processamento do arquivo...")
|
592 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
593 |
if file is None:
|
594 |
return None, "Nenhum arquivo foi fornecido."
|
595 |
|