histlearn commited on
Commit
efe137a
·
verified ·
1 Parent(s): 63862a9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -9
app.py CHANGED
@@ -588,36 +588,76 @@ def processar_boletim(file):
588
  """Função principal que processa o boletim e gera o relatório."""
589
  temp_dir = None
590
  try:
 
 
591
  if file is None:
592
  return None, "Nenhum arquivo foi fornecido."
593
 
 
 
 
 
 
 
 
594
  temp_dir = tempfile.mkdtemp()
595
  print(f"Diretório temporário criado: {temp_dir}")
596
 
597
- if not hasattr(file, 'name') or not os.path.exists(file.name):
598
- return None, "Arquivo inválido ou corrompido."
 
 
 
 
 
 
599
 
600
  if os.path.getsize(file.name) == 0:
 
601
  return None, "O arquivo está vazio."
602
 
 
603
  temp_pdf = os.path.join(temp_dir, 'boletim.pdf')
604
- shutil.copy2(file.name, temp_pdf)
605
- print(f"PDF copiado para: {temp_pdf}")
 
 
 
 
606
 
607
  if not os.path.exists(temp_pdf) or os.path.getsize(temp_pdf) == 0:
 
608
  return None, "Erro ao copiar o arquivo."
609
 
 
 
 
 
 
 
 
 
 
 
 
 
610
  print("Iniciando extração das tabelas...")
611
- df = extrair_tabelas_pdf(temp_pdf)
612
- print("Tabelas extraídas com sucesso")
 
 
 
 
613
 
614
  if df is None or df.empty:
 
615
  return None, "Não foi possível extrair dados do PDF."
616
 
617
  try:
618
  # Processar disciplinas
619
  disciplinas_dados = obter_disciplinas_validas(df)
620
  if not disciplinas_dados:
 
621
  return None, "Nenhuma disciplina válida encontrada no boletim."
622
 
623
  # Separar disciplinas por categoria
@@ -642,25 +682,27 @@ def processar_boletim(file):
642
  )
643
 
644
  grafico_medias = plotar_graficos_destacados(disciplinas_dados, temp_dir)
645
- print("Gráficos gerados")
646
 
647
  # Gerar PDF
648
  print("Gerando relatório PDF...")
649
  pdf_path = gerar_relatorio_pdf(df, disciplinas_dados, grafico_basica, grafico_diversificada, grafico_medias)
650
- print("Relatório PDF gerado")
651
 
652
  # Criar arquivo de retorno
653
  output_file = tempfile.NamedTemporaryFile(delete=False, suffix='.pdf')
654
  output_path = output_file.name
655
  shutil.copy2(pdf_path, output_path)
 
656
 
657
  return output_path, "Relatório gerado com sucesso!"
658
 
659
  except Exception as e:
 
660
  return None, f"Erro ao processar os dados: {str(e)}"
661
 
662
  except Exception as e:
663
- print(f"Erro durante o processamento: {str(e)}")
664
  return None, f"Erro ao processar o boletim: {str(e)}"
665
 
666
  finally:
 
588
  """Função principal que processa o boletim e gera o relatório."""
589
  temp_dir = None
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
 
682
  )
683
 
684
  grafico_medias = plotar_graficos_destacados(disciplinas_dados, temp_dir)
685
+ print("Gráficos gerados com sucesso")
686
 
687
  # Gerar PDF
688
  print("Gerando relatório PDF...")
689
  pdf_path = gerar_relatorio_pdf(df, disciplinas_dados, grafico_basica, grafico_diversificada, grafico_medias)
690
+ print("Relatório PDF gerado com sucesso")
691
 
692
  # Criar arquivo de retorno
693
  output_file = tempfile.NamedTemporaryFile(delete=False, suffix='.pdf')
694
  output_path = output_file.name
695
  shutil.copy2(pdf_path, output_path)
696
+ print("Arquivo de saída criado com sucesso")
697
 
698
  return output_path, "Relatório gerado com sucesso!"
699
 
700
  except Exception as e:
701
+ print(f"Erro durante o processamento: {str(e)}")
702
  return None, f"Erro ao processar os dados: {str(e)}"
703
 
704
  except Exception as e:
705
+ print(f"Erro geral durante o processamento: {str(e)}")
706
  return None, f"Erro ao processar o boletim: {str(e)}"
707
 
708
  finally: