app.routes
Módulo routes
Define as rotas HTTP da aplicação Flask para processar uploads de arquivos ou textos. Encaminha para o pipeline de processamento e retorna a classificação e resposta sugerida.
1""" 2Módulo routes 3 4Define as rotas HTTP da aplicação Flask para processar uploads de arquivos ou textos. 5Encaminha para o pipeline de processamento e retorna a classificação e resposta sugerida. 6""" 7 8from flask import Blueprint, request, jsonify 9from app.pipeline import process_uploaded_file, process_raw_text 10 11import logging 12logging.basicConfig(level=logging.INFO) 13 14routes = Blueprint('routes', __name__) 15 16@routes.route("/upload", methods=["POST"]) 17def upload(): 18 """ 19 Rota POST /upload 20 21 Recebe arquivos (TXT ou PDF) e/ou texto bruto via formulário multipart. 22 Processa o conteúdo chamando o pipeline, que realiza extração, pré-processamento, 23 classificação via IA e armazenamento em cache. 24 25 O endpoint aceita: 26 - múltiplos arquivos enviados no campo "file" 27 - texto enviado no campo "text" 28 29 Retorna: 30 JSON: 31 { 32 "results": [ 33 { 34 "type": "file" ou "text", 35 "file": "nome_do_arquivo.txt" (quando for arquivo), 36 "categoria": "Produtivo" ou "Improdutivo", 37 "resposta_sugerida": "..." 38 }, 39 ... 40 ] 41 } 42 43 Status Codes: 44 - 200: Sucesso no processamento (mesmo com alguns erros parciais nos arquivos). 45 - 400: Nenhum arquivo ou texto foi enviado. 46 """ 47 results = [] 48 49 files = request.files.getlist("file") 50 for file in files: 51 if file.filename == '': 52 continue 53 try: 54 classification = process_uploaded_file(file) 55 logging.info(f"--- {file.filename} Classificação --- {classification}") 56 results.append({ 57 "type": "file", 58 "file": file.filename, 59 "categoria": classification.get("categoria"), 60 "resposta_sugerida": classification.get("resposta_sugerida") 61 }) 62 except ValueError as e: 63 logging.error(f"Erro ao processar {file.filename}: {str(e)}", exc_info=True) 64 results.append({ 65 "type": "file", 66 "file": file.filename, 67 "error": str(e) 68 }) 69 70 raw_text = request.form.get("text", "").strip() 71 if raw_text: 72 try: 73 classification = process_raw_text(raw_text) 74 logging.info(f"--- Texto inserido Classificação --- {classification}") 75 results.append({ 76 "type": "text", 77 "categoria": classification.get("categoria"), 78 "resposta_sugerida": classification.get("resposta_sugerida") 79 }) 80 except ValueError as e: 81 logging.error("Erro ao processar texto inserido.", exc_info=True) 82 results.append({ 83 "type": "text", 84 "error": str(e) 85 }) 86 87 if not results: 88 return jsonify({"error": "Nenhum arquivo ou texto enviado."}), 400 89 90 return jsonify({"results": results})
17@routes.route("/upload", methods=["POST"]) 18def upload(): 19 """ 20 Rota POST /upload 21 22 Recebe arquivos (TXT ou PDF) e/ou texto bruto via formulário multipart. 23 Processa o conteúdo chamando o pipeline, que realiza extração, pré-processamento, 24 classificação via IA e armazenamento em cache. 25 26 O endpoint aceita: 27 - múltiplos arquivos enviados no campo "file" 28 - texto enviado no campo "text" 29 30 Retorna: 31 JSON: 32 { 33 "results": [ 34 { 35 "type": "file" ou "text", 36 "file": "nome_do_arquivo.txt" (quando for arquivo), 37 "categoria": "Produtivo" ou "Improdutivo", 38 "resposta_sugerida": "..." 39 }, 40 ... 41 ] 42 } 43 44 Status Codes: 45 - 200: Sucesso no processamento (mesmo com alguns erros parciais nos arquivos). 46 - 400: Nenhum arquivo ou texto foi enviado. 47 """ 48 results = [] 49 50 files = request.files.getlist("file") 51 for file in files: 52 if file.filename == '': 53 continue 54 try: 55 classification = process_uploaded_file(file) 56 logging.info(f"--- {file.filename} Classificação --- {classification}") 57 results.append({ 58 "type": "file", 59 "file": file.filename, 60 "categoria": classification.get("categoria"), 61 "resposta_sugerida": classification.get("resposta_sugerida") 62 }) 63 except ValueError as e: 64 logging.error(f"Erro ao processar {file.filename}: {str(e)}", exc_info=True) 65 results.append({ 66 "type": "file", 67 "file": file.filename, 68 "error": str(e) 69 }) 70 71 raw_text = request.form.get("text", "").strip() 72 if raw_text: 73 try: 74 classification = process_raw_text(raw_text) 75 logging.info(f"--- Texto inserido Classificação --- {classification}") 76 results.append({ 77 "type": "text", 78 "categoria": classification.get("categoria"), 79 "resposta_sugerida": classification.get("resposta_sugerida") 80 }) 81 except ValueError as e: 82 logging.error("Erro ao processar texto inserido.", exc_info=True) 83 results.append({ 84 "type": "text", 85 "error": str(e) 86 }) 87 88 if not results: 89 return jsonify({"error": "Nenhum arquivo ou texto enviado."}), 400 90 91 return jsonify({"results": results})
Rota POST /upload
Recebe arquivos (TXT ou PDF) e/ou texto bruto via formulário multipart. Processa o conteúdo chamando o pipeline, que realiza extração, pré-processamento, classificação via IA e armazenamento em cache.
O endpoint aceita:
- múltiplos arquivos enviados no campo "file"
- texto enviado no campo "text"
Retorna: JSON: { "results": [ { "type": "file" ou "text", "file": "nome_do_arquivo.txt" (quando for arquivo), "categoria": "Produtivo" ou "Improdutivo", "resposta_sugerida": "..." }, ... ] }
Status Codes: - 200: Sucesso no processamento (mesmo com alguns erros parciais nos arquivos). - 400: Nenhum arquivo ou texto foi enviado.