telefonicasc / etl-framework

Framework de ETLs (librerias, documentación, best practices, etc.)
GNU Affero General Public License v3.0
2 stars 6 forks source link

BUG Tratar caracteres especiales para el procesamiento de valores en ficheros de configuración #25

Open cesarjorgemartinez opened 2 years ago

cesarjorgemartinez commented 2 years ago

BUG Tratar caracteres especiales para el procesamiento de valores en ficheros de configuración

Te vuelve loco si por ejemplo hay un password con %. Te obliga a poner "%%", pero después de andar gastando mil tiempo (yo de python npi)

rg2011 commented 2 years ago

Revisando con César, el problema está en que configparser soporta interpolación, por defecto interpreta un carácter % en un fichero de config como prefijo de una variable que tiene que interpolar (https://docs.python.org/3/library/configparser.html#interpolation-of-values)

Ese problema está en la ETL que use configparser, no en esta librería. Habría que desactivar la interpolación en la ETL que sea, llamando a la función configparser.ConfigParser con el parámetro interpolation=None.

cesarjorgemartinez commented 2 years ago

Mismo caso casi seguro le pasará al vertical tpvs

mrutid commented 2 years ago

Habría que trasladar el issue a la ETL del vertical concreto que te haya fallado para poder tener en cuenta el arreglo que comenta Rafa.

arcosa commented 2 years ago

A modo informativo, en las prácticas recomendas para la creación de ETLs, se "deprecó el uso de configparser" a favor del uso de variables de entorno, sobre todo para el tema de contraseñas, se puede revisar aquí. Para las ETLs viejas que usen el configparser, se puede abrir issue directa en el vertical afectado, para las nuevas, entiendo que con el uso de variables de entorno ya no ocurrirá este problema.

fgalan commented 1 year ago

Con este código de ejemplo en un fichero de nombre test.ppy (versión 0.6.0 de la libreria):

import tc_etl_lib as tc
import json
import os

pas = os.getenv('ETL_ALCALA_ENVIRONMENT_PASSWORD')

auth: tc.auth.authManager = tc.auth.authManager(endpoint='https://auth.iotplatform.telefonica.com:15001',
                                                service = 'sc_alcala',
                                                user = 'user_odata',
                                                password = pas)

cbm: tc.cb.cbManager = tc.cb.cbManager(endpoint = 'https://cb.iotplatform.telefonica.com:10027')
entities = cbm.get_entities_page(subservice='/indicadores', auth=auth)

print (json.dumps(entities))

Lo invoco así:

$ export ETL_ALCALA_ENVIRONMENT_PASSWORD="Alcala2022%"
$ python test.py

Y obtengo el resultado esperado (las 25 entidades existentes en el subservicio en cuestión ahora mismo)