Skip to main content

mmi-consume-roan

Paquete Python que consume el webservice REST de alertas del sistema ABCMASMMI (abc+) y las inserta en MySQL mediante stored procedures. Se distribuye como paquete instalable (pip install -e .) con un entry point de consola: mmi-consume.

¿Qué hace?

  1. Consulta en MySQL, vía automcae.sp_selabcmmi, el listado de sucursales y sus URLs de conexión al webservice abc+.
  2. Por cada sucursal hace un GET HTTPS (con verificación contra un certificado .pem propio) al webservice y parsea la respuesta JSON.
  3. Mapea cada alerta del JSON a un DTO (DatabaseAlertasDTO).
  4. Inserta cada alerta en MySQL vía el stored procedure automcae.sp_inscaalertasabc, revisando el parámetro de salida @paerror para confirmar el éxito de la inserción.
  5. Registra el resultado del proceso en el log (vía w_log_roan).

El proceso reintenta indefinidamente (while response == False) hasta obtener una respuesta exitosa de RestAbcMasMMI().getDataFromABC().

Nota / limitación conocida: conn_abcmasmmi.py tiene un break incondicional al final del for de sucursales, por lo que en la práctica solo procesa la primera sucursal devuelta por sp_selabcmmi. Es un hallazgo detectado, pendiente de confirmación con el autor antes de corregirse.

Requisitos

  • Python >= 3.10 (probado en 3.13).
  • MySQL accesible con los stored procedures automcae.sp_selabcmmi y automcae.sp_inscaalertasabc ya creados.
  • Certificado SSL (.pem) para autenticar el request HTTPS contra abc+.
  • Un archivo de texto plano con credenciales de BD (ver sección Configuración).

Dependencias

Dependencias públicas (PyPI), listadas en pyproject.toml / requirements.txt:

  • requests
  • urllib3
  • pymysql
  • certifi, cffi, charset-normalizer, cryptography, idna, pycparser (transitivas de las anteriores)

Dependencias privadas, no publicadas en PyPI (hay wheels locales en package-offline/ para instalación sin conexión):

  • secure-credentials-roan — cifra/descifra el archivo de credenciales de BD.
  • w-log-roan — logging propio del proyecto.

Usa la skill /deps-check para verificar cuáles de estas están instaladas en tu intérprete actual.

Instalación

python -m venv .venv
.venv\Scripts\python -m pip install -e .
pip install --index-url https://{username}:{password}@gitea.example.com/api/packages/{owner}/pypi/simple --no-deps {package_name}

Si no tienes acceso a PyPI para las dependencias privadas, instala primero los wheels incluidos en package-offline/:

.venv\Scripts\python -m pip install package-offline\secure_credentials_roan-0.1.1-py3-none-any.whl
.venv\Scripts\python -m pip install package-offline\w_log_roan-0.1.2-py3-none-any.whl
.venv\Scripts\python -m pip install -e .

Configuración

El paquete busca dos rutas fuera del código, ancladas por defecto a la raíz del proyecto (o configurables por variable de entorno):

Recurso Ruta por defecto Variable de entorno
Credenciales BD y certificado secure_data_mmi/ (raíz del proyecto) MMI_SECURE_DATA_DIR
Certificado SSL secure_data_mmi/abcmas_cer.pem (usa la misma carpeta anterior)
Logs C:\logs\<modulo>\ — (fijo en el código)

Credenciales de base de datos

  1. Crea secure_data_mmi/access.txt con el formato:

    host=...
    user=...
    password=...
    database=...
    port=...
    
  2. En la primera ejecución, secure/secure.py cifra automáticamente ese archivo (genera credentials.enc y secret.key, y borra access.txt en texto plano). En ejecuciones posteriores se descifra desde ahí — no vuelvas a crear access.txt a mano salvo que quieras rotar credenciales.

Certificado SSL

Coloca el certificado del webservice abc+ en secure_data_mmi/abcmas_cer.pem.

secure/, *.pem, access.txt, credentials.enc y secret.key son artefactos sensibles: trátalos como solo lectura una vez generados, no los subas al repo.

Uso

Una vez instalado y configurado:

mmi-consume

Equivalente a ejecutar python -m mmi_consume_roan.main. El proceso:

  • Corre localmente en Windows, o en un servidor remoto vía tarea programada.
  • Escribe logs en C:\logs\main\, C:\logs\conn_abcmasmmi\, C:\logs\database\, C:\logs\dao_db\ y C:\logs\secure\ (uno por módulo, vía w_log_roan).
  • Termina cuando logra insertar exitosamente las alertas de la sucursal procesada.

Tests

.venv\Scripts\python -m pytest test/

Cubren conn_abcmasmmi, database, dao_db, dto_database, exceptions y main.

Estructura del proyecto

mmi_consume_roan/
├── main.py                    # Entry point (mmi-consume)
├── config/
│   ├── conn_abcmasmmi.py      # Cliente REST hacia abc+
│   └── database.py            # Conexión MySQL (pymysql)
├── data/
│   ├── dao/dao_db.py          # DAOs: alertas y conexiones/sucursales
│   └── dto/dto_database.py    # DTO de alerta
├── secure/secure.py           # Cifrado/descifrado de credenciales
└── src/exceptions/exceptions.py

Licencia

MIT License. Ver LICENSE.

Autor

Angel Rogelio Argonza Roblero

Metadata

Release files for mmi-consume-roan 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mmi-consume-roan 0.1.2
File Size Uploaded Provenance
mmi_consume_roan-0.1.2.tar.gz 15.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mmi-consume-roan 0.1.2
File Interpreter ABI Platform
mmi_consume_roan-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 28.4 kB

Release files / mmi_consume_roan-0.1.2.tar.gz

Download URL mmi_consume_roan-0.1.2.tar.gz
Size 15.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6cee09a60bde3ed80b492c381c6162ab864dca22d8aedc3923dab09ff7099222
BLAKE2b-256 checksum
How to use checksums
0a7f74de323defa90bbd174afcf68ad77c4e695bc727b10afe6de34f119b1390
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Release files / mmi_consume_roan-0.1.2-py3-none-any.whl

Download URL mmi_consume_roan-0.1.2-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
749c81564824d6e04bbe533932c603fe96a3249ea0ac895da3548d86e5b5c1de
BLAKE2b-256 checksum
How to use checksums
06da058458c3ce3223e7d1c6c5439cf6844cbda16527986ac210ce9dfe049820
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Security for mmi-consume-roan 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page