diff --git a/my_toolbox.egg-info/PKG-INFO b/my_toolbox.egg-info/PKG-INFO new file mode 100644 index 0000000..bf37f5c --- /dev/null +++ b/my_toolbox.egg-info/PKG-INFO @@ -0,0 +1,6 @@ +Metadata-Version: 2.1 +Name: my_toolbox +Version: 0.1 +Summary: Paquete con mis herramientas básicas +Author: Tr4shhh +Author-email: tu.email@example.com diff --git a/my_toolbox.egg-info/SOURCES.txt b/my_toolbox.egg-info/SOURCES.txt new file mode 100644 index 0000000..970710c --- /dev/null +++ b/my_toolbox.egg-info/SOURCES.txt @@ -0,0 +1,15 @@ +README.md +setup.py +my_toolbox/__init__.py +my_toolbox/calcular_combinatoria.py +my_toolbox/comparar_hash.py +my_toolbox/driver_para_scraping.py +my_toolbox/excel.py +my_toolbox/generar_archivos_carpetas_desde_tree.py +my_toolbox/manejo_archivos.py +my_toolbox/print_to_txt.py +my_toolbox.egg-info/PKG-INFO +my_toolbox.egg-info/SOURCES.txt +my_toolbox.egg-info/dependency_links.txt +my_toolbox.egg-info/top_level.txt +tests/test_herramientas.py \ No newline at end of file diff --git a/my_toolbox.egg-info/dependency_links.txt b/my_toolbox.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/my_toolbox.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/my_toolbox.egg-info/top_level.txt b/my_toolbox.egg-info/top_level.txt new file mode 100644 index 0000000..098c090 --- /dev/null +++ b/my_toolbox.egg-info/top_level.txt @@ -0,0 +1 @@ +my_toolbox diff --git a/my_toolbox/__init__.py b/my_toolbox/__init__.py new file mode 100644 index 0000000..6a677dd --- /dev/null +++ b/my_toolbox/__init__.py @@ -0,0 +1,5 @@ + +from .manejo_postgresql import * +from .generar_archivo_env import * +from .driver_para_scraping import * + diff --git a/my_toolbox/__pycache__/__init__.cpython-311.pyc b/my_toolbox/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..77f90b3 Binary files /dev/null and b/my_toolbox/__pycache__/__init__.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/calcular_combinatoria.cpython-311.pyc b/my_toolbox/__pycache__/calcular_combinatoria.cpython-311.pyc new file mode 100644 index 0000000..0f05bba Binary files /dev/null and b/my_toolbox/__pycache__/calcular_combinatoria.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/cargar_csv_en_postgres.cpython-311.pyc b/my_toolbox/__pycache__/cargar_csv_en_postgres.cpython-311.pyc new file mode 100644 index 0000000..9a27aa2 Binary files /dev/null and b/my_toolbox/__pycache__/cargar_csv_en_postgres.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/comparar_hash.cpython-311.pyc b/my_toolbox/__pycache__/comparar_hash.cpython-311.pyc new file mode 100644 index 0000000..368031d Binary files /dev/null and b/my_toolbox/__pycache__/comparar_hash.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/conseguir_conexion_postgresql.cpython-311.pyc b/my_toolbox/__pycache__/conseguir_conexion_postgresql.cpython-311.pyc new file mode 100644 index 0000000..233b901 Binary files /dev/null and b/my_toolbox/__pycache__/conseguir_conexion_postgresql.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/convertir_tabla_html_a_dataframe.cpython-311.pyc b/my_toolbox/__pycache__/convertir_tabla_html_a_dataframe.cpython-311.pyc new file mode 100644 index 0000000..88eac23 Binary files /dev/null and b/my_toolbox/__pycache__/convertir_tabla_html_a_dataframe.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/driver_para_scraping.cpython-311.pyc b/my_toolbox/__pycache__/driver_para_scraping.cpython-311.pyc new file mode 100644 index 0000000..c142933 Binary files /dev/null and b/my_toolbox/__pycache__/driver_para_scraping.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/ejecutar_query_postgresql.cpython-311.pyc b/my_toolbox/__pycache__/ejecutar_query_postgresql.cpython-311.pyc new file mode 100644 index 0000000..9468ab0 Binary files /dev/null and b/my_toolbox/__pycache__/ejecutar_query_postgresql.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/excel.cpython-311.pyc b/my_toolbox/__pycache__/excel.cpython-311.pyc new file mode 100644 index 0000000..cf638fc Binary files /dev/null and b/my_toolbox/__pycache__/excel.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/generar_archivo_env.cpython-311.pyc b/my_toolbox/__pycache__/generar_archivo_env.cpython-311.pyc new file mode 100644 index 0000000..8f5f9e1 Binary files /dev/null and b/my_toolbox/__pycache__/generar_archivo_env.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/generar_archivos_carpetas_desde_tree.cpython-311.pyc b/my_toolbox/__pycache__/generar_archivos_carpetas_desde_tree.cpython-311.pyc new file mode 100644 index 0000000..f5debed Binary files /dev/null and b/my_toolbox/__pycache__/generar_archivos_carpetas_desde_tree.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/manejo_archivos.cpython-311.pyc b/my_toolbox/__pycache__/manejo_archivos.cpython-311.pyc new file mode 100644 index 0000000..74e5878 Binary files /dev/null and b/my_toolbox/__pycache__/manejo_archivos.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/print_to_txt.cpython-311.pyc b/my_toolbox/__pycache__/print_to_txt.cpython-311.pyc new file mode 100644 index 0000000..21ba44d Binary files /dev/null and b/my_toolbox/__pycache__/print_to_txt.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/tablas_postgresql_json.cpython-311.pyc b/my_toolbox/__pycache__/tablas_postgresql_json.cpython-311.pyc new file mode 100644 index 0000000..1b539cd Binary files /dev/null and b/my_toolbox/__pycache__/tablas_postgresql_json.cpython-311.pyc differ diff --git a/my_toolbox/__pycache__/widget_jupiter_para_crear_listas.cpython-311.pyc b/my_toolbox/__pycache__/widget_jupiter_para_crear_listas.cpython-311.pyc new file mode 100644 index 0000000..91eb2d2 Binary files /dev/null and b/my_toolbox/__pycache__/widget_jupiter_para_crear_listas.cpython-311.pyc differ diff --git a/my_toolbox/driver_para_scraping.py b/my_toolbox/driver_para_scraping.py new file mode 100644 index 0000000..8995bc1 --- /dev/null +++ b/my_toolbox/driver_para_scraping.py @@ -0,0 +1,59 @@ +import undetected_chromedriver as uc + + +def driver_scrapping(carpeta_descargas, carpeta_perfil_chrome, ejecutable_chrome, headless=False): + """ + Description: + Initializes a Chrome session with specific options and settings based on provided parameters. + Configures download folder, user profile directory, and Chrome executable. + Sets the browser window size and returns the configured driver object for external use. + + Parameters: + carpeta_descargas (str): Path to the download directory. + carpeta_perfil_chrome (str): Path to the Chrome user profile directory. + ejecutable_chrome (str): Path to the Chrome executable. + + Returns: + driver (WebDriver): Configured WebDriver object ready for automation tasks. + + Usage: + driver = driver_scrapping(download_folder, profile_folder, executable_path) + + Created_at: 2024-05-04 + Updated_at: 2024-05-04 + """ + try: + # Configuration settings for the Chrome browser + options = uc.ChromeOptions() + options.headless = headless # Set to True for headless operation + options.add_argument("--disable-blink-features=AutomationControlled") + options.add_argument("--password-store=basic") + + # Add experimental options and preferences for browser configuration + options.add_experimental_option( + "prefs", + { + "download.default_directory": carpeta_descargas, + "download.prompt_for_download": False, + "download.directory_upgrade": True, + "safebrowsing.enabled": True, + "credentials_enable_service": False, + "profile.password_manager_enabled": False, + "plugins.always_open_pdf_externally": True, + } + ) + + # Initialize the Chrome driver with specified options + driver = uc.Chrome(options=options, + user_data_dir=carpeta_perfil_chrome, + browser_executable_path=ejecutable_chrome) + + # Set browser window size + driver.set_window_size(1200, 800) + + print("Browser configured and ready for use.") + + return driver + + except Exception as e: + print(f"Failed to load driver. {e}") diff --git a/my_toolbox/generar_archivo_env.py b/my_toolbox/generar_archivo_env.py new file mode 100644 index 0000000..c123361 --- /dev/null +++ b/my_toolbox/generar_archivo_env.py @@ -0,0 +1,16 @@ +def crear_archivo_env(nombre_archivo='.env'): + + variables = { + 'DB_PASSWORD': '', + 'DB_USER': 'postgres', + 'DB_HOST': 'localhost', + 'DB_PORT': '5432', + 'DB_NAME': 'data', + + } + + + with open(nombre_archivo, 'w') as archivo: + for clave, valor in variables.items(): + archivo.write(f'{clave}={valor}\n') + print(f'Archivo {nombre_archivo} creado correctamente.') \ No newline at end of file diff --git a/my_toolbox/manejo_postgresql.py b/my_toolbox/manejo_postgresql.py new file mode 100644 index 0000000..d126bd8 --- /dev/null +++ b/my_toolbox/manejo_postgresql.py @@ -0,0 +1,96 @@ +""" +manejo_postgresql.py + +Este módulo proporciona funciones para conectarse a una base de datos PostgreSQL y ejecutar consultas, +devolviendo los resultados en un DataFrame de pandas. + +Fecha de creación: 14/11/2024 +""" + +import psycopg2 +import pandas as pd +import os + + +def connect_to_db(host, dbname, user, password, port=5432): + """ + Establece una conexión a la base de datos PostgreSQL usando credenciales del archivo .env. + + Returns: + conn (psycopg2.extensions.connection): Objeto de conexión a la base de datos. + """ + conn = psycopg2.connect( + host=host, + dbname=dbname, + user=user, + password=password, + port=port + ) + return conn + + + +def query_to_dataframe(conn, query): + """ + Ejecuta una consulta SQL y devuelve los resultados en un DataFrame de pandas. + + Args: + conn (psycopg2.extensions.connection): Objeto de conexión a la base de datos. + query (str): Consulta SQL a ejecutar. + + Returns: + df (pandas.DataFrame): DataFrame con los resultados de la consulta. + """ + df = pd.read_sql_query(query, conn) + return df + + +def dataframe_to_db(conn, df, table_name): + """ + Guarda un DataFrame en una tabla de la base de datos PostgreSQL. + + Args: + conn (psycopg2.extensions.connection): Objeto de conexión a la base de datos. + df (pandas.DataFrame): DataFrame a guardar en la base de datos. + table_name (str): Nombre de la tabla donde se guardará el DataFrame. + """ + cursor = conn.cursor() + # Crear tabla si no existe + create_table_query = f""" + CREATE TABLE IF NOT EXISTS {table_name} ( + {', '.join([f'{col} TEXT' for col in df.columns])} + ); + """ + cursor.execute(create_table_query) + conn.commit() + + # Insertar datos + for index, row in df.iterrows(): + insert_query = f""" + INSERT INTO {table_name} ({', '.join(df.columns)}) + VALUES ({', '.join(['%s'] * len(row))}); + """ + cursor.execute(insert_query, tuple(row)) + conn.commit() + cursor.close() + + +def append_dataframe_to_db(conn, df, table_name): + """ + Añade un DataFrame a una tabla existente en la base de datos PostgreSQL. + + Args: + conn (psycopg2.extensions.connection): Objeto de conexión a la base de datos. + df (pandas.DataFrame): DataFrame a añadir a la base de datos. + table_name (str): Nombre de la tabla donde se añadirá el DataFrame. + """ + cursor = conn.cursor() + # Insertar datos + for index, row in df.iterrows(): + insert_query = f""" + INSERT INTO {table_name} ({', '.join(df.columns)}) + VALUES ({', '.join(['%s'] * len(row))}); + """ + cursor.execute(insert_query, tuple(row)) + conn.commit() + cursor.close() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..970568b --- /dev/null +++ b/setup.py @@ -0,0 +1,15 @@ +from setuptools import setup, find_packages + +setup( + name='my_toolbox', + version='0.1', + packages=find_packages(), + install_requires=[ + # Dependencias del paquete, por ejemplo: + # 'numpy', + # 'pandas' + ], + description='Paquete con mis herramientas básicas', + author='Tr4shhh', + author_email='tu.email@example.com' +) diff --git a/tests/test_herramientas.py b/tests/test_herramientas.py new file mode 100644 index 0000000..e69de29