Para ir incluso más lejos
Introducción
Este último capítulo permite mencionar los productos diseñados o que giran en torno al lenguaje Python.
Normalmente se trata de módulos o de productos completos que el autor aún no ha tenido la oportunidad de estudiar (lamentablemente los días solo duran 24 horas).
Por esta razón solo repasaremos estas maravillosas herramientas sin dar un ejemplo o procedimiento, sino solo algunos consejos o puntos de entrada.
Twisted
Primera advertencia: investigue en Google con la palabra "python", antes del término "twisted", porque esto significa en español "retorcido, enrevesado, complicado, incluso extraño". De lo contrario, podemos encontrarnos, sin hacerlo a propósito, navegando en sitios normalmente rechazados por los controles parentales.
Aparte de este pequeño inconveniente, esta es una librería maravillosa para crear aplicaciones casi en cualquier protocolo de red.
El principio de esta librería es que todo se basa en eventos, de ahí la definición de "event driven networking library".
En la página twisted del sitio web, hay una serie de ejemplos absolutamente impresionantes; por lo tanto, un simple "echo server " ocupa varias líneas.
Después de instalar la librería twisted (pip install twisted), todo lo que tiene que hacer es copiar/pegar el siguiente ejemplo y ejecutar el script con Python.
En otra sesión, debe lanzar "telnet localhost 1234" para conectarse al echoserver, que repetirá todo lo que escriba en el teclado.
Aquí está el script en cuestión:
# archivo: twisted/t1.py
from twisted.internet import protocol, reactor, endpoints
class Echo(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data) ...
Brython
Sitio web: https://brython.info/
Pero, ¿qué están haciendo el W3C y las altas instancias de la Web? Este es el futuro del HTML y de la Web. Finalmente, un lenguaje simple, fácil de aprender y LEGIBLE en el lado del navegador.
Es simplemente una evolución del lenguaje Python escrita en JavaScript. El objetivo es reemplazar JavaScript por el lenguaje Python.
A continuación se muestra un ejemplo:
<html>
<head>
<script src="/brython.js"></script>
</head>
<body onload="brython()">
<script type="text/python">
from browser import document, alert
# asocia una función al evento "click" del botón
def click(ev):
alert(document["zone"].value)
document["echo"].bind("click")
</script>
<input id="zone"><button id="echo">click !</button>
</body>
</html>
Tenga en cuenta la línea <script type = "text / python"> en este código HTML. Por una vez, nos gustaría que las cosas se movieran muy rápido en el microcosmos de la web.
Sin embargo, un pequeño consejo:...
Fuse
File System in User Space, más conocida con el nombre de FUSE, es una librería que permite a un usuario sin permisos controlar un sistema de archivos virtual como /proc o /sys, por ejemplo.
Python tiene varios módulos que interactúan con esta librería, como python-fuse o pyfuse.
Es cierto que desde hace mucho tiempo queríamos codificar un sistema de archivos que pudiéramos consultar con SQL, solo para ver si eso puede ser útil. ¿Quizás, además, ya se ha hecho?
La sentencia para listar los archivos se convertiría en algo así como:
select * from archivos
Find podría ser una consulta de este estilo:
select * from archivos where date_modif ≥ 01/01/2020
Otra idea: también debería ser posible ver una base de datos como un sistema de archivos.
ls para listar las tablas
cat table para select * from table
cat table | wc -l select count(*) from table
No faltan ideas, sino el tiempo necesario para estudiarlas o realizarlas.
Solo un pequeño consejo antes de comenzar a programar con FUSE: por experiencia, es mejor montar una máquina virtual dedicada si desea probar, los errores de funcionamiento y otros fallos del sistema no son solo una leyenda cuando interactúa con el núcleo.
Ipython y Jupyter
Al principio, existía ipython, un terminal interactivo que le permite introducir código directamente, pero sobre todo que ofrecía una rica historia, de introspección, de la finalización automática y de las sintaxis adicionales. Ipython permitía, entre otras cosas, utilizar librerías gráficas distintas de Tkinter.
Después, ipython propuso una interfaz web y un formato de intercambios: el notebook (bloc de notas en español). Un notebook que mezcla texto, código, datos, imágenes, videos y presentaciones, para formar un conjunto coherente que es fácil de copiar, guardar e intercambiar.
Seguidamente, se ha convertido en una herramienta indispensable en los círculos científicos que manejan una gran cantidad de datos.
Luego el proyecto se extendió a lenguajes distintos a Python, ahora el proyecto se llama Jupyter y permite programar con más de cuarenta lenguajes (Python, Ruby, bash, R, scala, etc.).
Un notebook es ante todo un núcleo que determina el lenguaje utilizado. Está formado por células que pueden ser del tipo:
Código |
Para introducir código |
Texto Bruto |
Para usar con nbconvert (herramienta de conversión de un noetbook en PDF HTML, etc.) |
Markdown |
Para introducir texto |
Título |
Para la presentación del notebook |
Una célula se puede copiar, pegar, eliminar y transferir de un notebook...
Sphynx
Esta herramienta puede parecer un poco compleja de implementar, pero una vez que la entiendes, se hace bastante comprensible.
¿Por qué mencionar esta herramienta? Gracias a ella, se ha podido desarrollar la generación de documentación corporativa en función de una base de datos que contiene información de terceros (clientes y proveedores).
El objetivo era generar documentación en un formato simple (HTML) y poder gestionar ciertos accesos con autenticación, como la parte de nombres de las máquinas, por ejemplo.
Los desarrolladores realmente hicieron todo lo posible para facilitar el acceso a sus herramientas.
Entonces, para comenzar, debe preparar un entorno ejecutando el comando sphynx-quickstart.
Después de responder a una determinada cantidad de preguntas, la herramienta crea múltiples archivos y directorios, incluido un archivo Makefile.
Es suficiente con ejecutar el comando make html (hay muchos otros) para que la herramienta genere un sitio HTML que puede probar yendo al directorio _build/html y ejecutando el comando python - m http.server.
Seguidamente, la conexión a http://localhost:8000 debe dar algo parecido a:
PROYECTO TEST
Posteriormente, para usar esta herramienta, globalmente, debe definir algunas opciones en el archivo conf.py, generar archivos en formato ReStructuredText o RST que pueden estar en varios directorios y subdirectorios, y volver a ejecutar ’make...
Ansible
Ansible es una gran herramienta para ingenieros de sistemas, lo que significa que puede automatizar algunas tareas aún más. Un buen ingeniero de sistemas debe ser algo perezoso, después de todo, hace trabajar a las máquinas. Ansible podría ser la prueba.
Y, sobre todo, solo requiere herramientas estándar como SSH, que se encuentran en todas las distribuciones de Linux.
Ansible le permite administrar configuraciones, construir máquinas virtuales, automatizar tareas en múltiples servidores y más.
Por supuesto, está escrito en Python e incluso usa Jinja como su motor de plantillas.
Uno de los primeros playbooks (término para el script Ansible) que escribimos, permitió actualizar muchas máquinas con un pequeño script responsable de limpiar ciertos directorios.
El script limpieza.sh es simplemente una sucesión de funciones de este estilo:
## Saneamiento de los archivos log de limpieza.sh
san_log()
{
find ${LOG_DIR} -name *.log -mtime +${NUM_DIAS} \
-exec rm {} \; 2>&1
}
Pero aún tenía que crear los directorios necesarios para este script, copiarlo y generar la crontab que lo acompaña.
Y todo esto, en bastantes máquinas.
A continuación se muestra el playbook:
##
## Scripts limpieza.yml ...
El framework Django
Django es EL framework Python para crear aplicaciones web dinámicas.
Este marco proporciona un conjunto de herramientas y funcionalidades básicas como el acceso a la base de datos, la gestión de las sesiones, el enrutamiento de las URL, la internacionalización y la generación a partir de modelos.
Al usar Django, es posible crear aplicaciones web seguras y fiables muy rápidamente, porque Django proporciona un entorno de desarrollo completo.
El acceso a las bases de datos está estandarizado gracias a un Object RelationnalMapper (ORM). Por lo tanto, es posible comenzar con SQLite y desarrollar en otra base de datos.
Las evoluciones de esquemas se tienen en cuenta con la gestión de las migraciones, al igual que los conjuntos de datos para hacer las pruebas.
Django también es capaz de construir una interfaz de administración automáticamente para las tablas declaradas en el ORM.
Django también integra la noción de proyecto (el sitio web) y de aplicación en un proyecto, la gestión de los usuarios por ejemplo, y si la aplicación está construida de cierta manera, se puede reutilizar en otros proyectos.
Hay muchos módulos de Django listos para usar.
Cuando empiece a descubrir este framework, se puede sorprender por lo que le impone sobre la manera de hacer las cosas. Pero fue creado por desarrolladores para satisfacer las necesidades específicas...
Red SCAPY
Definición: SCAPY es la versión refinada del paquete TCP.
Una vez instalado con pip o con su administrador de paquetes, es obligatorio que sea root para usarlo, pero también tener un conocimiento sólido de los paquetes TCP.
Sin las habilidades necesarias, es difícil juzgar la calidad de Scapy, pero después de haber descubierto la herramienta a través de un artículo en una revista, parecía importante hablar de ello.
Scapy es una herramienta de prueba, un rastreador de redes, pero también una herramienta de ataque para probar la seguridad de su red.
A continuación se muestra un ejemplo de sesión:
# /ruta/hacia/scapy
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
WARNING: No route found for IPv6 destination:: (no default route?)
WARNING: IPython not available. Using standard Python shell instead.
AutoCompletion, History are disabled.
aSPY//YASa
apyyyyCY//////////YCa |
sY//////YSpcs scpCY//Pp | Welcome...
Apache Airflow
Esta herramienta es un descubrimiento reciente en lo que a nosotros respecta y, sin duda, se debería convertir en una herramienta muy popular en breve.
Es una herramienta escrita en Python y perteneciente a Apache Foundation, de ahí el nombre Apache Airflow.
Originalmente escrita por Maxime Beachemin para AirBnb, Airflow es una plataforma creada para administrar flujos de trabajo.
Ejemplo: un archivo se genera en una máquina. Seguidamente debe ser procesado por otra, para luego registrarse en un tercer servidor.
Fácil: cron + shell + ssh/scp y algunos archivos de registros, y listo.
Por otro lado, si multiplicamos este tipo de tareas y los usuarios quieren orquestar o incluso monitorizar el progreso de estas tareas, se puede complicar.
En este contexto interviene Apache Airflow.
Tomemos el caso clásico de ETL (Extract Transform and Load).
Tomamos datos del servidor A, luego los copiamos al servidor B y los integramos en la base de datos para luego archivar el archivo.
Tarea 1: extracción + generación del archivo
Tarea 2: copia en el servidor B el archivo
Tarea 3: integración en la base de datos
Tarea 4: envío un correo electrónico de fin de procesamiento con éxito
La tarea 4 depende de la tarea 3, que depende de la tarea 2, etc.
Este conjunto de tareas se puede programar a una hora fija, pero a veces un usuario puede iniciarlas cuando lo desee.
Además, también puede permitir...
Resumen
Cada sección de este capítulo podría provocar por sí misma un libro completo dedicado, lo que muestra que todavía hay mucho por hacer en nuestro pequeño mundo de la informática.
Si no los conocía, esperamos sobre todo haber agudizado su curiosidad por estos productos, que probablemente se convertirán en imprescindibles.
También muestra que pequeñas gotas forman grandes ríos. Guido Van Rossum ciertamente no pensó en convertirse en un Dictador Benevolente cuando lanzó, por primera vez, su editor para comenzar a codificar el lenguaje Python.
Cuando una herramienta es buena, perdura y el lenguaje Python es una de esas herramientas.