Ejemplo de configuración de KrakenD API Gateway

KrakenD es un producto software que implementa un sistema de pasarela para APIs. Puede ser útil en un entorno de microservicios si queremos implementar un API Gateway que represente un punto de acceso principal para los clientes a nuestra plataforma. Configuración Configurar KrakenD puede hacerse de forma muy sencilla mediante una herramienta online disponible para ello: designer.krakend.io. Siguiendo los menús y formularios podemos crear una configuración para nuestra pasarela, que después descargaremos en un fichero JSON. ...

June 11, 2021 · 3 min · José Luis Patiño Andrés

Uso básico de GPG

Generar claves gpg --gen-key Seguir las instrucciones para generar las claves GPG. Se puede también ejecutar con selección manual de opciones con el comando: gpg --full-generate-key Listar claves existentes Claves públicas gpg --list-keys Se mostrará una lista similar a: gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2023-06-05 /home/jose/.gnupg/pubring.kbx ----------------------------- pub rsa4096 2020-02-04 [SC] [expires: 2023-06-05] 635BCDD1CFC5981624523F4174FF027519B21EDF uid [ultimate] José Luis Patiño Andrés <jose.patino-andres@protonmail.com> sub rsa4096 2020-02-04 [E] [expires: 2023-06-05] Claves privadas gpg --list-secret-keys Mostrar fingerprints gpg --fingerprint your_email@address.com Mostrará una salida como: ...

June 5, 2021 · 2 min · José Luis Patiño Andrés

Gestión de procesos en PostgreSQL

Obtener procesos en el backend de PostgreSQL Los procesos del backend de una base de datos PostgreSQL se encuentran detallados en la tabla del sistema pg_stat_activity. postgresql=> \d pg_stat_activity View "pg_catalog.pg_stat_activity" Column | Type | Collation | Nullable | Default ------------------+--------------------------+-----------+----------+--------- datid | oid | | | datname | name | | | pid | integer | | | leader_pid | integer | | | usesysid | oid | | | usename | name | | | application_name | text | | | client_addr | inet | | | client_hostname | text | | | client_port | integer | | | backend_start | timestamp with time zone | | | xact_start | timestamp with time zone | | | query_start | timestamp with time zone | | | state_change | timestamp with time zone | | | wait_event_type | text | | | wait_event | text | | | state | text | | | backend_xid | xid | | | backend_xmin | xid | | | query | text | | | backend_type | text | | | Así por ejemplo si quisiéramos ver un detalle de los procesos activos en una determinada base de datos podríamos hacer la siguiente consulta: ...

June 1, 2021 · 3 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

Ejemplos de Dockerfiles

Uso de SSH para acceder a datos privados en Dockerfile En ocasiones tenemos que acceder a datos que no están accesibles al público en nuestras builds de Docker. Un ejemplo pueden ser repositorios privados de Git que debemos descargar o instalar. Para ello podemos hacer uso de la opción --ssh en docker build, que reenvía las conexiones SSH al agente de la máquina anfitrión. Ejemplo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 FROM python:3.8-slim-buster WORKDIR /app RUN pip3 install --no-cache-dir pip-tools && \ apt-get -y update && \ apt-get -y upgrade && \ apt-get install -y git libspatialindex-dev && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN mkdir /root/.ssh/ RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts COPY requirements.txt ./ RUN --mount=type=ssh pip install -r requirements.txt COPY . . ENTRYPOINT ["python", "main.py"] Teniendo este Dockerfile, podemos construir la imagen mediante el siguiente comando, pasando el parámetro --ssh default: ...

May 19, 2021 · 2 min · José Luis Patiño Andrés

Ejemplos y trucos de consultas a BD con SQLAlchemy

Uso de DISTINCT junto con ORDER BY para diferentes columnas En ocasiones es necesario hacer consultas que nos devuelvan un único resultado para el valor de una determinada columna, y además ordenar dichos resultados en base a una columna totalmente diferente. Este escenario presenta un problema: las columnas que hayan en la cláusula ORDER BY deben obligatoriamente ser las mismas que las de la cláusula DISTINCT. Y probablemente no queramos, o no podamos, poner las mismas columnas en ambas cláusulas, con lo cual nuestra consulta devolverá un error de este tipo: ...

May 12, 2021 · 6 min · José Luis Patiño Andrés

Referencia de uso de Poetry

Poetry es otra herramienta de CLI que sirve para gestionar dependencias y paquetes de terceros en proyectos Python. A continuación se muestra una pequeña referencia de uso básico de Poetry. Instalación Poetry viene con una especie de instalador personalizado que instala poetry de manera aislada. Ésta parece ser la forma recomendada de instalarlo. Para ello podemos seguir las instrucciones en la documentación de Poetry. De otro modo, simplemente podemos instalarlo con pip: ...

May 6, 2021 · 2 min · José Luis Patiño Andrés

Referencia de uso de Pipenv

Pipenv es una herramienta de CLI que soluciona algunos problemas derivados de la gestión de dependencias (paquetes externos) en proyectos Python. A continuación se añade una pequeña referencia de cómo usar Pipenv. Instalación Basta con instalar Pipenv mediante pip: pip install pipenv Configuración Realmente no es necesario hacer ningún cambio de configuración para Pipenv tal como viene por defecto pero, si se quiere, se pueden usar las variables de entorno que se describen en la documentación de Pipenv. ...

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

Usar Bulma CSS en proyectos React JS

Bulma es un framework CSS que destaca por ser muy sencillo de entender y usar y tener menos carga que otros más famosos como Bootstrap. A continuación se describe cómo podemos instalar y configurar un proyecto en ReactJS para que utilice Bulma CSS. Instalación En nuestro proyecto ReactJS, instalamos Bulma CSS mediante npm: npm install bulma Configuración A continuación, podemos importar Bulma CSS en nuestro index.js, por ejemplo: ... import 'bulma/css/bulma.min.css'; import './index.css'; ⚠️ Atención: siempre hay que importar Bulma antes que cualquier otro CSS personalizado. Así evitamos que alguna clase CSS de Bulma sobreescriba un estilo nuestro propio, cuando lo que querríamos es hacer justo lo contrario. ...

April 28, 2021 · 1 min · José Luis Patiño Andrés

Migraciones de base de datos con Alembic

Manual de uso de la herramienta Alembic. Inicio del entorno Alembic Instalación Instalar mediante pip: ```bash pip install alembic Inicialización y puesta a punto Inicializar el entorno de trabajo de Alembic: ```bash cd directorio/del/proyecto alembic init alembic O también, si queremos usar Alembic con un controlador de BD asíncrono, el comando es: ```bash alembic init -t async alembic Se puede consultar la documentación oficial aquí. Esto crea un nuevo directorio llamado alembic/ y un fichero alembic.ini, ambos en el directorio/del/proyecto. El directorio `alembic tiene este contenido: ...

April 3, 2021 · 2 min · José Luis Patiño Andrés