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})
routes = <Blueprint 'routes'>
@routes.route('/upload', methods=['POST'])
def upload():
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.