Skip to content

Proyecto-Economia-2025/Storage-Server-Python

Repository files navigation

Storage Server Python

Un servidor Flask para almacenamiento y procesamiento de documentos PDF con arquitectura hexagonal.

📋 Descripción

Este proyecto implementa un servidor de almacenamiento local que permite:

  • Recibir archivos PDF a través de una API REST
  • Almacenar los archivos de forma segura en el sistema local
  • Procesar y deserializar el contenido de los PDFs
  • Retornar información extraída de los documentos

🏗️ Arquitectura

El proyecto sigue los principios de Arquitectura Hexagonal (Clean Architecture):

Storage-Server-Python/
├── Application/           # Capa de aplicación - Casos de uso
│   └── Services/
│       └── save_pdf_service.py
├── Domain/               # Capa de dominio - Interfaces y reglas de negocio
│   └── Interfaces/
│       ├── error_logger_interface.py
│       ├── event_logger_interface.py
│       ├── pdf_deserialize_interface.py
│       ├── pdf_saver_interface.py
│       ├── request_logger_interface.py
│       └── save_pdf_service_interface.py
├── Infraestructure/      # Capa de infraestructura - Implementaciones técnicas
│   └── PDFs/
│       ├── pdf_deserialize.py
│       └── pdf_saver.py
├── Presentation/         # Capa de presentación - Controladores web
│   └── controller.py
├── Data_temp_uploads/    # Directorio para archivos subidos (ignorado por git)
├── venv/                # Entorno virtual Python (ignorado por git)
├── main.py              # Punto de entrada de la aplicación
├── requirements.txt     # Dependencias del proyecto
├── start-app.bat       # Script Batch para iniciar la app
└── stop-app.bat        # Script Batch para detener la app

🚀 Instalación

Prerrequisitos

  • Python 3.8 o superior
  • pip (gestor de paquetes de Python)
  • Git

Pasos de instalación

  1. Clonar el repositorio:

    git clone https://github.com/Proyecto-Info-Aplicada/Local-storage.git
    cd Local-storage
  2. Crear entorno virtual:

    python -m venv venv
  3. Activar entorno virtual:

    Windows PowerShell:

    venv\Scripts\Activate.ps1

    Windows CMD:

    venv\Scripts\activate.bat
  4. Instalar dependencias:

    pip install -r requirements.txt

💻 Uso

Iniciar el servidor

Opción 1: Usar scripts automatizados (Recomendado)

PowerShell:

.\start-app.ps1

CMD:

start-app.bat

Opción 2: Comando manual

# Asegúrate de tener activado el entorno virtual
venv\Scripts\python.exe main.py

Detener el servidor

PowerShell:

.\stop-app.ps1

CMD:

stop-app.bat

Manual:

  • Presiona Ctrl + C en la terminal donde está ejecutándose el servidor

Usar la API

El servidor se ejecuta por defecto en http://127.0.0.1:5000

Endpoint: Subir PDF

  • URL: /receive-pdf
  • Método: POST
  • Content-Type: multipart/form-data
  • Parámetro: pdf (archivo PDF)

Ejemplo con curl:

curl -X POST -F "pdf=@documento.pdf" http://127.0.0.1:5000/receive-pdf

Respuesta exitosa (201):

{
    "status": "success",
    "message": "Documento procesado exitosamente.",
    "data_extracted": {
        "success": true,
        "content": "Contenido extraído del PDF..."
    }
}

Respuesta de error (422):

{
    "error": "Fallo al procesar pdf",
    "detalles": "Descripción del error específico"
}

📁 Almacenamiento

Los archivos PDF se almacenan en el directorio Data_temp_uploads/ (este directorio está excluido del control de versiones por seguridad).

🛠️ Dependencias

  • Flask 3.1.2 - Framework web para Python
  • pypdf 6.1.1 - Librería para procesamiento de PDFs
  • Werkzeug - Utilidades WSGI (incluida con Flask)

🧪 Desarrollo

Estructura del código

El proyecto implementa Inyección de Dependencias y Inversión de Control a través de interfaces:

  • Domain/Interfaces/: Define contratos para servicios
  • Application/Services/: Implementa casos de uso
  • Infraestructure/: Implementaciones concretas de infraestructura
  • Presentation/: Controladores web (Flask)

Agregar nuevas funcionalidades

  1. Define la interfaz en Domain/Interfaces/
  2. Implementa el caso de uso en Application/Services/
  3. Crea la implementación técnica en Infraestructure/
  4. Expone la funcionalidad en Presentation/

🤝 Contribución

  1. Haz fork del repositorio
  2. Crea una rama para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. Haz commit de tus cambios (git commit -am 'Agrega nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abre un Pull Request

📝 Notas

  • El servidor está configurado en modo debug para desarrollo
  • Los archivos PDF subidos se almacenan localmente
  • Asegúrate de tener permisos de escritura en el directorio del proyecto

🔧 Troubleshooting

Error: "No module named 'flask'"

  • Asegúrate de que el entorno virtual esté activado
  • Ejecuta pip install -r requirements.txt

Error: "Permission denied"

  • Verifica permisos de escritura en el directorio
  • En Windows, ejecuta como administrador si es necesario

Puerto 5000 ocupado

  • Cambia el puerto en main.py: app.run(debug=True, port=5001)
  • O detén el proceso que use el puerto 5000

👥 Equipo de Desarrollo

Proyecto desarrollado para el curso de Informática Aplicada - UCR 2025

Storage-Server-Python

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published