Librería para agilizar el desarrollo de nuestros programadores en el Banco Galicia
Project description
LibGal
Librería para agilizar el desarrollo de nuestros programadores en el Banco Galicia
Explorar el proyecto»
Reportar error
Tabla de Contenidos
Descripción General
Esta librería python fue desarrollada desde el CoE Data Driven del Banco Galicia con la finalidad de agilizar el desarrollo de aplicaciones con funciones configurables minimizando de esta forma el código de nuestra aplicación permitiendonos centrarnos en la funcionalidad principal de la aplicación a desarrollar.
Instalación
La instación de esta librería se hace mediante siguiente sentencia:
pip install libgal
Funcionalidades
Para hacer uso de las diferentes funcionalidades de esta librería basta con importar la misma en nuestro código con la siguiente sentencia:
import libgal
Una vez importada la librería solo nos queda instanciar en una variable la función que necesitemos tal como se muestra a continuación.
browser=libgal.variables_entorno()
Variables de Entorno
Para poder usar las variables de entorno de forma local con esta librería será necesario crear un archivo de texto cuyo nombre y extensión será “.env”. Dentro de este mismo archivo “.env” podemos especificar todas las variables secrets y configmap que utilizará nuestra aplicación, tal como se muestra en el siguiente ejemplo:
#SECRETS
USERNAME = usuario@correo.com
PASSWORD = contraseña
#CONFIGMAP
API_PREDICT=https://url.com/predict
API_AUDIENCIAS=https://url.com/audiencias
CANT_POST=10 #Cantidad de últimos posts a descargar
Es importante mencionar que al momento de desplegar nuestra aplicación no se debe subir este archivo “.env” ya que solo es para ejecuciones y pruebas en modo local simulando estar en el entorno openshift.
Ahora bien, para poder usar estas variables dentro de nuestro código solo será necesario importar la librería LIBGAL e instanciar en una variable la función VARIABLES_ENTORNO, indicando como parametro la ruta y nombre del archivo .env y así poder acceder a las variables de entorno indicado en el mismo, tal cómo se muestra en el siguiente ejemplo:
import libgal
ve=libgal.variables_entorno('.env')
api_predict=ve['API_PREDICT']
api_audiencias=ve['API_AUDIENCIAS']
Nótese que para invocar los nombres de las variables es necesario escribirlas en mayúscula.
Registro de Logs
Haciendo uso de esta librería no nos tenemos que preocupar por la configuración de nuestros registros logs, ya que la misma se encarga de ello mediante unos pocos pasos. Para hacer esto, solo debemos llamar la función LOGGER de la librería y asignarla a una variable para poder usar en el resto de nuestro código.
La función LOGGER consta de dos parámetros de configuración de tipo string:
- format_output: (Requerido, Tipo String) Indica el tipo de formato para el registro log de nuestra aplicación. Por los momentos consta de dos tipos: “JSON” usado para los logs dentro del entorno Openshift y “CSV” para generar el log en una sola línea separados por coma (,).
- app_name: (Requerido, Tipo String) En este parámetro especificaremos el nombre de nuestra aplicación. Recordemos que nuestro archivo Python principal deberá llamar APP.PY.
Para crear un registro log mediante esta función en nuestra aplicación solo debemos hacer uso de nuestra variable tipo LOGGER de forma muy similar al “print” de Python pero con un agregado adicional y es que podemos definir el nivel de Log para cada registro, tal como lo veremos en el siguiente código de ejemplo:
Import libgal
log=libgal.logger(format_output="JSON", app_name="Instagram")
log.info("Esto es un registro informativo")
log.error("Esto es un registro de error")
log.warning("Esto es un registro de advertencia")
log.critical("Esto es un registro de error crítico")
log.exception("Esto es un registro de excepción")
log.log("Esto es un registro de log")
Selenium Web Browser Firefox
Mediante la librería podemos hacer la invocación un Web Browser de Selenium para nuestras automatizaciones, test y/o extracciones de datos de cualquier página web. Esto se logra invocando la función Firefox de la librería e instanciándola a una variable.
La función consta de 4 parámetros de configuración:
- webdriver_path: (Requerido, Tipo String) Ruta del driver geckodriver utilizado para levantar e invocar el Web Browser de Firefox.
- browser_path: (Requerido, Tipo String) Ruta del ejecutable Firefox.exe del servidor o equipo local necesario para levantar el Web Browser.
- url: (Requerido, Tipo String) Dirección Web con la que vamos a mediante el Web Browser.
- Hidden: (Opcional, Tipo Booleano) Indica si el Web Browser se oculta durante su ejecución. False predeterminado.
Ejemplo:
import libgal
browser=libgal.firefox(webdriver_path=r"C:\webdrivers\geckodriver.exe",browser_path=r"C:\Program Files\Mozilla Firefox\firefox.exe",url="https://bolsar.info/Cauciones.php")
Teradata
Para simplificar un poco las conexiones a Teradata se agregó esta nueva funcionalidad.
La misma consta de solo 3 parámetros:
-
Host: (Requerido, Tipo String) Indica el servidor de base de datos al cual nos deseamos conectar.
-
User: (Requerido, Tipo String) Usuario necesario para la conexión al servidor de base de datos.
-
Password: (Requerido, Tipo String) Contraseña con la que se autentica el usuario para poderse conectar a la base de datos.
-
Logmech: (Opcional, Tipo String) Indica el mecanismo de autenticación del usuario. LDAP por defecto.
Un ejemplo de su uso puede ser el siguiente:
import libgal
con=libgal.teradata(host='servidor', user='tu_user', password='tu_password', logmech='TD2')
TeradataError
Mediante esta función podemos acceder a las diferentes excepciones de error de TeradataSQL, tal como se muestra en el siguiente ejemplo:
import libgal
conexion=libgal.teradata(host='host', user='user', password='password', logmech='TD2')
try:
data=('1', 'Descripción 1')
query="INSERT INTO esquema.tabla(codigo, descripcion) VALUES (?,?)"
with conexion.cursor() as cursor:
cursor.execute(query,data)
conexion.commit()
print("Los datos fueron almacenados correctmente.")
except libgal.TeradataError as e:
print(e)
HTML_Parser
Está función hacer búsquedas rápidas de etiquetas y textos dentro de un código HTML mediante funciones de Beautiful Soup. Para esto solo será necesario instanciar la función en una variable pasándole por parámetro un string o variable tipo string contentiva del código HTML a trabajar, tal cómo se muestra a continuación:
import libgal
html='<html><head></head><body>Sacré bleu!</body></html>'
soup=libgal.html_parser(html)
SQLAlchemy
Esta función encapsula dentro de si misma algunas de las funcionalidades de SQLAlchemy pero optimizada para el acceso a Teradata. La funcionalidad principal de uso consiste en la adopción de la progamación de acceso a datos mediante ORMs lo que nos permite cambiar de base de datos sin necesidad de cambiar las instrucciones CRUD dentro de nuestro código.
Para la instanciación de la misma es necesario definir los siguientes parámetros:
-
Host: (Requerido, Tipo String) Indica el servidor de base de datos al cual nos deseamos conectar.
-
User: (Requerido, Tipo String) Usuario necesario para la conexión al servidor de base de datos.
-
Password: (Requerido, Tipo String) Contraseña con la que se autentica el usuario para poderse conectar a la base de datos.
-
Driver: (Requerido, Tipo String) Indica el tipo de base de datos al que nos estamos conectando. Por los momentos solo podemos definir los siguientes valores: Teradata y/o MySQL.
-
Logmech: (Opcional, Tipo String) Indica el mecanismo de autenticación del usuario. LDAP por defecto.
Para comenzar a interactuar con esta función podemos seguir el siguiente ejemplo:
import libgal
con=libgal.sqlalchemy(host='host', user='usuario', password='password', driver='teradata', logmech='TD2')
Para poder intectuar con las tablas de la base es necesario crear objetos que harán referencia a las mismas tal como se muestra en el siguiente ejemplo:
#Creación de modelos de Tablas
Base = con.Base()
# Defino clase de la tabla
class clase_tabla(Base):
__tablename__ = 'nombre_tabla'
__table_args__ = {'schema': 'nombre_esquema'}
campo_clave = libgal.Column(libgal.Integer, primary_key=True)
descripcion = libgal.Column(libgal.String)
def __repr__(self):
return f"<dato(campo_clave='{self.campo_clave}', descripcion={self.descripcion})>"
Notese que se creó una clase con los mismos atributos definidos para la creación de la tabla en la base. A partir de aquí podemos crear objetos con los que podemos interactuar y que impactarán en la tabla de la base de datos.
Se recomienda usar sesiones para interactuar con las tablas. Estas son definidas de la siguiente forma:
session=con.Session()
Select
Para listar todos los registros y campos de una tabla con SQLAlchemy solo debemos crear un objeto de la siguiente forma:
query_tabla = session.query(clase_tabla)
datos=query_tabla.all()
En caso de que se quiera hacer un select con campos específicos y que además de quiera filtrar los registros en base a algunos valores de un campo, lo podemos hacer de la siguiente manera:
query_tabla = session.query(clase_tabla.campo_clave, clase_tabla.descripcion).filter(clase_tabla.campo_clave==1)
datos=query_tabla.all()
Insert
Para agregar un registro en la tabla solo creamos un objeto mediante la clase de la tabla que vamos a trabajar, tal como se muestra en el siguiente ejemplo:
nuevo_dato = clase_tabla(campo_clave=1, descripcion='Descripción del registro')
session = bd.Session()
session.add(nuevo_dato)
session.commit()
session.close()
Query
En caso de que se requiera hacer una query especializada, con campos calculados o que implique dos o más tablas, mediante la conexión que creamos para interactuar con la base de datos, disponibilizamos un método llamado QUERY, el cual puede ser invocado como se muestra a continuación:
import libgal
con=libgal.sqlalchemy(host='host', user='usuario', password='password', driver='teradata')
otra_query=con.query("select * from tabla where campo='valor'")
SQLAlchemyError
Mediante esta función podemos acceder a las diferentes excepciones de error de SQLAlchemy, tal como se muestra en el siguiente ejemplo:
import libgal
con=libgal.sqlalchemy(host='host', user='user', password='password', driver='teradata', logmech='TD2')
with con.Session() as session:
try:
session.add(nuevo_dato)
session.commit()
print("Datos almacenadas correctamente")
except libgal.SQLAlchemyError as e:
session.rollback()
print(e)
Contacto
Jean González - @jeanmgonzalez
Julian Girandez - @julgiraldez
Link del proyecto: https://github.com/Banco-Galicia/libgal
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.