TABLAS DE RAMAFLEX - CODIGO DE REFERENCIA EN PYTHON Implementa ramaflex/pseudocodigo.txt (la regla). Especificacion: https://docurm.random.cl/integracion-erp.html#tablas ARCHIVOS ramaflex_tablas.py Nucleo, sin framework HTTP: validacion, SQL por motor, tipos, transaccion y errores. Una sola entrada: TablasRamaflex(motor, conectar).atender(metodo, tabla, parametros, cuerpo) -> (estado HTTP, cuerpo JSON) "parametros" es la lista de pares (nombre, valor) de la query, en orden y con repetidos. "conectar" es una funcion que abre una conexion DB-API nueva. servidor.py Ejemplo minimo con Flask: monta {RUTA_BASE}/{TABLA} y llama al nucleo. requirements.txt Dependencias. Para integrarlo en una API existente basta con copiar ramaflex_tablas.py y llamar a atender() desde la ruta propia, despues de la autenticacion propia. No hay archivo de catalogo: el script de las tablas guarda el catalogo en la base (XESQUEMA.CATALOGO) y el nucleo lo lee de ahi, y lo vuelve a leer cada minuto. REQUISITOS Probado con Python 3.11 y estas versiones (las que fija requirements.txt). Dependencias por motor (instalar solo la del motor que se use): SQL Server pyodbc 5.3.0 + "ODBC Driver 17 for SQL Server" de Microsoft PostgreSQL psycopg2-binary 2.9.13 MySQL PyMySQL 1.2.3 Servidor de ejemplo: Flask 3.1.3. python -m venv venv venv\Scripts\pip install -r requirements.txt (Linux: venv/bin/pip ...) CONFIGURACION (variables de entorno del servidor de ejemplo) RAMAFLEX_MOTOR sqlserver | postgresql | mysql (por defecto sqlserver) RAMAFLEX_CONEXION conexion a la base donde se ejecutaron los scripts: sqlserver DRIVER={ODBC Driver 17 for SQL Server};SERVER=...;DATABASE=...;UID=...;PWD=... postgresql host=... dbname=... user=... password=... mysql JSON con los argumentos de pymysql.connect: {"host":"...","user":"...","password":"...","database":"..."} RAMAFLEX_TOKEN token de servicio (SOLO DE EJEMPLO: reemplazar por la autenticacion de la API) RAMAFLEX_RUTA_BASE por defecto /ramaflex/tablas (informarnos la que se use) RAMAFLEX_PUERTO por defecto 8080 python servidor.py El servidor de desarrollo de Flask no es para produccion: usar waitress, gunicorn o el servidor de la API existente. NOTAS - Las fechas se guardan en UTC sin zona. Los tres drivers devuelven DATETIME/TIMESTAMP sin zona y sin convertir, asi que la zona del servidor y del proceso no influyen. - SQL Server: pyodbc envia los textos como Unicode (NVARCHAR), necesario para las columnas NVARCHAR. - El usuario de la base necesita SELECT, INSERT, UPDATE y DELETE sobre las tablas X... del catalogo. - Los errores inesperados responden 500 ERROR_INTERNO; el detalle queda en el log (logger "ramaflex"). PRUEBA DE CONFORMIDAD (probada con Node 16, 18 y 24; contra una base de PRUEBA, escribe y borra filas) node conformidad.js http://127.0.0.1:8080/ramaflex/tablas Deben pasar todas las pruebas. CON CADA VERSION NUEVA DEL SCRIPT Ejecutar en la base el script nuevo del motor (migraciones/.sql). Nada mas: crea solo lo que falta, guarda el catalogo nuevo en XESQUEMA y el nucleo lo toma solo, en menos de un minuto. No hay que reiniciar ni cambiar el codigo.