Metadata-Version: 2.5
Name: roche_datachapter_team_lib
Version: 0.0.16
Summary: Modular Python library designed for building and managing robust ETL processes. Includes database connectors, Google Sheets/Drive integration, AppSheet API support, job scheduling via SQL Server Agent, Excel generation, and logging utilities.
Project-URL: Homepage, https://github.com/pypa/sampleproject
Project-URL: Issues, https://github.com/pypa/sampleproject/issues
Author-email: Lucas Frías <lucasmatiasfrias@live.com>, Uciel Bustamante <ucibustamante.a@gmail.com>
Maintainer-email: Ignacio Castillo <ignacio.castillo@roche.com>, Diego Pedro <diego.pedro@contractors.roche.com>
License-File: LICENSE
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.12
Requires-Dist: chardet==5.2.0
Requires-Dist: flask-sqlalchemy==3.0.3
Requires-Dist: flask==2.3.1
Requires-Dist: google-api-python-client==2.99.0
Requires-Dist: google-auth-httplib2==0.1.1
Requires-Dist: google-auth-oauthlib==1.1.0
Requires-Dist: openpyxl==3.1.2
Requires-Dist: oracledb==2.0.0
Requires-Dist: pandas==2.1.3
Requires-Dist: psycopg
Requires-Dist: psycopg-binary
Requires-Dist: pymssql
Requires-Dist: pymysql==1.1.0
Requires-Dist: pyodbc==5.0.1
Requires-Dist: requests==2.31.0
Requires-Dist: snowflake-connector-python==3.15.0
Requires-Dist: snowflake-sqlalchemy==1.7.3
Requires-Dist: sqlalchemy-hana==1.1.1
Requires-Dist: sqlalchemy==2.0.30
Description-Content-Type: text/markdown

# Roche Data Chapter Team Library

## Description

Una biblioteca modular en Python desarrollada para estandarizar y simplificar la creación de procesos ETL y automatizaciones. Pensada para equipos de datos que requieren integraciones con múltiples fuentes, soporte de logs y trazabilidad, y herramientas de administración de jobs SQL.

## Características principales

### 🔌 Conectores de Base de Datos
- Conexiones automáticas a SQL Server, Oracle, SAP HANA, MySQL, Snowflake y Redshift utilizando variables de entorno para parametrización segura.
- Soporte de ejecución de consultas personalizadas y procedimientos almacenados.
- Lectura directa a `pandas.DataFrame` o listas JSON.
- Índice de funciones:
	- `DbConfig.execute_custom_select_query`: ejecuta consultas `SELECT` y devuelve resultados en DataFrame o JSON.
	- `DbConfig.execute_stored_procedure`: ejecuta procedimientos almacenados con parámetros tipados.
	- `DbConfig.test_bind_connection`: valida si un `bind` de conexión está disponible.

### 📊 Transformaciones de Datos
- Conversión robusta de fechas, números, nulos y tipos de datos desde hojas de cálculo o APIs externas.
- Estándares predefinidos para Google Sheets y Excel.
- Índice de funciones:
	- `DataTransformer.datestr_to_date`: convierte texto a fecha según formato.
	- `DataTransformer.date_to_str`: convierte fecha a texto formateado.
	- `DataTransformer.str_to_float`: transforma texto numérico a `float`.
	- `DataTransformer.str_to_int`: transforma texto numérico a `int`.
	- `DataTransformer.nan_to_none`: normaliza valores vacíos (`NaN`/cadena vacía) a `None`.
	- `DataTransformer.gsheet_days_since_to_date`: convierte serial de fecha de Google Sheets a `datetime`.

### 📤 Google API Services
- Lectura/escritura en hojas de Google Sheets.
- Carga y descarga de archivos desde Google Drive.
- Manejo de credenciales OAuth2 y reintentos automáticos.
- Índice de funciones:
	- `GoogleServices.read_gsheet_data`: lee datos de Google Sheets a DataFrame o JSON.
	- `GoogleServices.write_gsheet_data`: escribe un DataFrame en un rango de Google Sheets.
	- `GoogleServices.upload_file_to_drive`: sube archivos a una carpeta de Google Drive.
	- `GoogleServices.read_excel_data_from_google_drive`: descarga y lee archivos Excel desde Drive.
	- `GoogleServices.read_csv_data_from_google_drive`: descarga y lee archivos CSV desde Drive.
	- `GoogleServices.retry_request`: reintenta solicitudes ante errores transitorios.

### 📩 Email Automation con AppSheet
- Gestión automatizada del envío de emails usando AppSheet como backend.
- Soporte para archivos adjuntos en Google Drive (PDF, Excel, TXT).
- Índice de funciones:
	- `EmailService.send_email`: arma y registra el envío de correo en AppSheet.
	- `EmailService.get_email_register_to_and_cc_and_bcc`: obtiene destinatarios configurados por `sysname`.
	- `AppsheetService.add_registers_to_table`: inserta registros en tablas de AppSheet.
	- `GoogleServices.upload_file_to_drive`: carga adjuntos a Drive para su referencia en el correo.

### 📁 Generación de Excel
- Creación de archivos Excel multiformato con estilo, desde múltiples `DataFrame`.
- Ancho de columnas y formatos aplicados automáticamente.
- Índice de funciones:
	- `ExcelFile.append_sheet_from_df`: agrega hojas al archivo desde DataFrames.
	- `ExcelFile.save`: genera y guarda el archivo Excel final.
	- `ExcelFile._format_workbook`: aplica estilos, bordes y autoajuste de columnas.

### 📅 SQL Server Agent Job Manager
- Creación, actualización y administración de SQL Jobs directamente desde Python.
- Utilidad especialmente útil para entornos corporativos que ejecutan ETLs como tareas programadas.
- Índice de funciones:
	- `JobManager.create_python_job`: crea jobs de SQL Server Agent con paso inicial de ejecución.
	- `JobManager.update_python_job`: actualiza owner y comando de un job existente.
	- `JobManager.get_job_id_by_job_name`: busca el identificador del job por nombre.

### 📑 Logging persistente
- Sistema de log en archivos `.log` y persistencia opcional en base de datos.
- Integrado con `JobExecution` y `JobExecutionLog`.
- Índice de funciones:
	- `Logger.info`: registra eventos informativos en archivo y opcionalmente en BD.
	- `Logger.warning`: registra advertencias operativas.
	- `Logger.error`: registra errores del proceso.
	- `Logger._log_to_db`: persiste cada evento de log en tablas de ejecución.
	- `LoggerSingleton.init`: inicializa una instancia global reutilizable del logger.

## Usage
Está pensada para ser utilizado como requisito en cualquier proyecto ETL en Python.

## Support
- Ignacio Castillo (ignacio.castillo@roche.com)
- Diego Pedro (diego.pedro@contractors.roche.com)

## Authors and acknowledgment
Lucas Frías (lucas.frias@roche.com)
Uciel Bustamante (uciel.bustamante@contractors.roche.com)