Core utilities for data transformation and structured logging.
Project description
utils-core: Librería Core de Utilidades y Logging para MV
🚀 Descripción General
utils-core es el paquete interno que centraliza las funciones de Transformación de Datos y el Logueo de Eventos de Ejecución de Máquinas Virtuales (VM Execution Logging).
El objetivo principal de esta librería es:
- Proveer funciones de transformación robustas (normalización de nombres SQL, deduplicación, etc.).
- Ofrecer un sistema de logueo estructuralizado (JSONL en archivo/consola) con control de verbosidad.
- Implementar el Logueo Centralizado de Eventos VM en BigQuery, usando el modelo de Inyección de Dependencias para garantizar la autonomía y trazabilidad por proyecto.
📦 Instalación
La librería está diseñada para ser instalada con soporte opcional para BigQuery (necesario para la clase BigQueryVMEventLogger).
Instalación Estándar (Solo Utilerías y Log Básico)
pip install utils-core
Instalación Completa (Con soporte BigQuery)
Se recomienda usar el extra [bq] para asegurar que las dependencias de Google Cloud estén disponibles.
pip install utils-core[bq]
🛠️ Uso y Ejemplos
1. Logueo Básico y Contexto (myutils.logx)
Este módulo proporciona el logueo estructurado que escribe en consola y en archivos de log (logs/des.log o logs/prod.log).
| Función | Descripción |
|---|---|
emit(event, level, **fields) |
Registra un evento de log estructuralizado (JSONL). |
emit_once(event, level, **fields) |
Registra un evento solo la primera vez que se llama por ejecución. |
set_component(name) |
Define el componente actual (ej: main, executor). |
set_context(**kwargs) |
Añade metadatos globales (ej: gcp_project, env) a todos los logs. |
Ejemplo de Log Básico:
from myutils.logx import emit, set_component, set_context
import os
# Controla la verbosidad por variable de entorno
os.environ["LOG_LEVEL"] = "DEBUG"
set_component("API_HANDLER")
set_context(gcp_project="mv-prod-01")
emit("REQUEST_RECEIVED", level="INFO", http_status=200, user_id=1024)
2. Logueo de Eventos VM en BigQuery (myutils.logx)
Esta funcionalidad requiere que el proyecto consumidor inyecte la conexión de BigQuery para garantizar la autonomía del proyecto.
🚨 Principio Clave: Inyección de Dependencias La librería no busca credenciales. Usted debe:
- Crear una instancia de
google.cloud.bigquery.Client(autenticada por el entorno de ejecución). - Pasar esta instancia y el
project_idde destino aBigQueryVMEventLogger.
El Dataset (FWK_INGEST) y la Tabla (VM_EXECUTION_LOGS) son fijos internamente, solo el project_id varía por ambiente.
Estructura Crítica de Datos
Para asegurar una correcta trazabilidad en la tabla centralizada, se deben respetar los siguientes formatos:
| Campo | Descripción | Restricciones |
|---|---|---|
VM_ID |
Identificador único del proceso lógico. | Formato: vm_{project_name}_{transaction_type}_{endpoint_alias} |
transaction_type |
Clasificación del tipo de ejecución. | Valores esperados: ingesta o integracion. |
STATUS |
Estado final o intermedio de la ejecución. | Valores válidos: Testing, Failed, Pending, Succeeded, Running, Error. |
Pasos para Loguear un Evento VM
-
Inicialización del Logger (Una sola vez):
from google.cloud import bigquery from myutils.logx import BigQueryVMEventLogger # 1. Crear el cliente BQ (usando credenciales del entorno) bq_client = bigquery.Client() # 2. Inyectar el cliente y el PROJECT_ID de destino (e.g., 'mv-prod') TARGET_PROJECT_ID = "mv-dev-project-id" bq_logger = BigQueryVMEventLogger( bq_client=bq_client, project_id=TARGET_PROJECT_ID ) # 3. (Opcional, pero recomendado) Asegurar que la tabla exista en ese proyecto bq_logger.ensure_table()
-
Uso en la Ejecución (Por evento):
from myutils.logx import start_vm_event, finish_vm_event_with_logger # Ejemplo de construcción de VM_ID: # Si transaction_type='ingesta', endpoint_alias='productos_bq' # -> VM_ID: vm_nombre-logico-app_ingesta_productos_bq vm_event = start_vm_event( project_name="nombre-logico-app", transaction_type="ingesta", endpoint_alias="MAIN_PROCESS" ) try: # ... Lógica de negocio ... # Si tiene éxito (STATUS='Succeeded') finish_vm_event_with_logger(vm_event, "Succeeded", bq_logger) except Exception as e: # Si falla (STATUS='Failed' o 'Error') finish_vm_event_with_logger(vm_event, "Failed", bq_logger, error_detail=str(e))
3. Transformaciones de Datos (myutils.transform)
Este módulo contiene utilidades para la normalización de datos.
| Función | Descripción |
|---|---|
strip_accents(text) |
Elimina acentos (ej: á -> a). |
sql_name_strict(s) |
Convierte un string en un nombre seguro para SQL/BigQuery. Corrige "ANO" a "ANIO" como palabra completa. |
dedupe_names(names) |
Añade sufijos numéricos a nombres duplicados (ej: [A, A] -> [A, A_2]). |
file_safe_name(s, max_len) |
Convierte un string en un nombre seguro para archivos. |
Ejemplo de Uso:
from myutils.transform import sql_name_strict, dedupe_names
# Normalización para BigQuery
nombre_sucio = "Columna Año del Cliente"
nombre_limpio = sql_name_strict(nombre_sucio)
# Resultado: COLUMNA_ANIO_DEL_CLIENTE
# Manejo de columnas duplicadas
nombres_repetidos = ["ID", "Fecha", "ID"]
nombres_finales = dedupe_names(nombres_repetidos)
# Resultado: ['ID', 'Fecha', 'ID_2']
🔒 Términos de Uso Internos (Ver LICENSE)
Este software es de Propiedad Interna. Su uso está restringido únicamente a los proyectos de la organización.
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.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file transelec_d_a_utils_core-0.1.0.tar.gz.
File metadata
- Download URL: transelec_d_a_utils_core-0.1.0.tar.gz
- Upload date:
- Size: 10.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62f0521fde0ff09472a632d659d8bc257f87307b86e37ff4cfa43655b7f8fb8b
|
|
| MD5 |
69f673d00132c5f90e760d944c170c11
|
|
| BLAKE2b-256 |
3703952b3b37bc7e5887f8d0ba19a350a023cfca5b29a23c895bbcbd72840c66
|
File details
Details for the file transelec_d_a_utils_core-0.1.0-py3-none-any.whl.
File metadata
- Download URL: transelec_d_a_utils_core-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b71a7c8ec2f424211f701b587d34c40c775e21f1175d49c9102f8838eb1ca6a
|
|
| MD5 |
82436f056683f02601bdc360324ce705
|
|
| BLAKE2b-256 |
25c0cab19baaf073f1dc05dce3ae7345fcb36621ea68584799f4ae487a5877e1
|