Backend personalizado de XCom para Airflow

Ésto fue lo que hice para implementar un backend de XCom para Apache Airflow que guarda los datos en un bucket de Google Cloud Storage. La implementación es flexible, de manera que podemos especificar el nombre del bucket en una variable de Airflow XCOM_BACKEND_DATA_GCS_NAME y así desplegar múltiples instancias de Airflow o de Cloud Composer, cada una con su bucket definido en sí misma. Como éste ejemplo se trata de una instancia de Airflow en GCP Cloud Composer, la conexión al bucket mediante IAM ya está definida por el propio Cloud Composer y por lo tanto no tenemos que hacer nada más que especificarla en el GCSHook: google_cloud_storage_default. Si estuviéramos ejecutando Airflow en algo que no fuera GCP, deberíamos arreglar ésto aparte y crear un usuario IAM para que Airflow pudiera acceder al bucket. ...

March 9, 2023 · 3 min · José Luis Patiño Andrés

Librería GeoPandas para análisis de datos GIS en Python

A continuación se muestra una serie de ejemplos útiles de uso de la librería Python GeoPandas. Activar soporte para ficheros KML GeoPandas utiliza la librería Fiona para cargar datos desde ficheros. Por defecto, Fiona tiene el soporte para ficheros KML desactivado. Por lo tanto si usamos la función read_file() de GeoPandas con un fichero KML nos devuelve un error. Para activar el soporte de estos ficheros KML, podemos ejecutar la siguiente sentencia en nuestro programa Python: ...

August 18, 2021 · 2 min · José Luis Patiño Andrés

Librería GDAL para desarrollo GIS

A continuación se muestra una pequeña referencia sobre la instalación y algunos ejemplos de uso de la librería GDAL. Instalación Necesitaremos la librería base del sistema, escrita en C++, la cual es usada por GDAL-Python durante su compilación. La podemos instalar mediante apt en sistemas Debian: sudo apt-get install libgdal1-dev Una vez instalada la librería del sistema ya podemos instalar GDAL-Python. Es mucho mejor utilizar pygdal, que es una versión actualizada más amigable con el sistema de instalación de pip: ...

July 29, 2021 · 1 min · José Luis Patiño Andrés

Ejemplos de uso de Pytest

A continuación se muestran algunos ejemplos de tests escritos con la librería Pytest. Son casos de uso especiales que resuelven algunas situaciones que pueden darse al escribir tests en proyectos Python. Usar fixtures sin necesidad de pasarlas como argumentos Normalmente, podemos pasar las fixtures que hayamos creado para nuestros tests como argumentos a las propias funciones de tests: En conftest.py: 1 2 3 4 5 6 7 8 9 10 from unitest.mock import patch import pytest @pytest.fixture def mock_api_call(): with patch("project.api_client.get_products") as mock_products: mock_products.return_value = ["Product-1", "Product-2", "Product-3] yield En test_products.py: ...

May 26, 2021 · 3 min · José Luis Patiño Andrés

Signals y Slots en Qt C++

Intro El framework para GUIs Qt dispone de un mecanismo de intercomunicación entre objetos llamado Signals & Slots. Esto es especialmente útil para notificar cambios en widgets a otros widgets o procesos. Una Signal (señal) es emitida cuando ocurre un evento en particular. Los widgets (subclases de QObject) tienen muchas señales predefinidas para notificar sobre sus propios eventos y nosotros podemos crear nuevas señales también en esos widgets o en nuestro propio código. ...

December 27, 2020 · 3 min · José Luis Patiño Andrés

Concurrencia en Python con gevent

gevent es una librería de networking de Python basada en co-rutinas que usa “greenlets” para proporcionar una API de alto nivel para sincronizar tareas. Ejemplo de uso 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import gevent def do_something_async(*args, **kwargs): # Hacer lo que quieras aquí... jobs = [ gevent.spawn( do_something_async, n, arg_1, arg_2, arg_3, ... kwarg_1, kwarg_2, kwarg_3, ... ) for n in whatever ] gevent.joinall(jobs, raise_error=True)

February 5, 2012 · 1 min · José Luis Patiño Andrés

Programación básica del Kernel Linux

Breve resumen de conceptos básicos de programación del Kernel Linux, utilizando Debian GNU/Linux como distribución. Todo hace referencia a la versión 2.6 del Kernel. Instalación de paquetes necesarios apt-get install git libncurses5-dev Obtención del código fuente Creamos un directorio y clonamos el repositorio del kerne: mkdir code git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-X.X # O también... git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-X.X Configuración inicial Nos situamos dentro del directorio raíz y ejecutamos make menuconfig Ahora podemos configurar manualmente las opciones de nuestro kernel. Sin embargo, podemos también copiar la configuración de nuestro kernel actual, para asegurar el funcionamiento: ...

September 28, 2011 · 2 min · José Luis Patiño Andrés