Yapsy, un sistema de plugins pythónico
Me gustan los programas que pueden evolucionar. Un reproductor de vídeo debe evolucionar a medida que lo hacen los formatos de vídeo, adaptándose a los nuevos.
Además, me gustan los programas que puedo extender. Añadir nueva funcionalidad que los desarrolladores originales no pensaron en su momento.
Éstas son dos de las aplicaciones de los plugins, y podemos tenerlas de una forma muy sencilla en Python mediante Yapsy
Yapsy nos ayuda a la gestión de los plugins mediante la búsqueda, carga y gestión automáticas. Veremos también que las creación de nuevos plugins es ridículamente fácil.
Instalación
Para instalar, descargar de pip
:
|
|
Creando un plugin
Antes de nada, vamos a crearnos un plugin. Para Yapsy, un plugin es cualquier cosa que hereda de yapsy.IPlugin
, aunque hay que registrarlo añadiendo un pequeño archivo adicional de descripción, cuya extensión por defecto es yapsy-plugin
Vamos a hacer dos ejemplos. En el primero los plugins sólo saludarán, de manera que veamos lo fácil que es usar Yapsy. En el segundo, vamos a hacer algo relativamente útil: un validador de sintaxis de archivos. En concreto, vamos a validar archivos JSON y YAML (sólo validaremos la sintaxis, cargando los archivos).
Ejemplo 1: Saludando
Lo primero que necesitamos es el programa principal. Éste lo que hará es cargar los plugins e invocar un método dentro de ellos para que saluden:
|
|
Muy poco que decir: se indica dónde están los plugins y se cargan, después se recorren todos ellos para ejecutar el método greetings
. Como veis, se buscarán los archivos en el directorio relativo “plugins”.
Nuestro primer plugin:
|
|
Como se puede observar, basta con heredar de yapsy.IPlugin.IPlugin
.
Sin embargo, esto no le basta a Yapsy, ya que no encontrará el plugin. Yapsy necesita cierta meta-información, que se proporciona en un archivo con extensión yapsy-plugin
, aunque se puede cambiar:
|
|
Ejecutando:
|
|
Podemos crear otro plugin más:
|
|
|
|
Ejemplo 2: Validando
Vamos ahora a hacer un pequeño programa que valide la sintaxis de archivos JSON y YAML, pero de forma plugable. Lo primero que necesitamos es un programa (disculpad los 4 niveles de indentación):
|
|
Se puede ver que hay más código. En concreto, se llama a los plugins para comprobar si deben manejar esa extensión o no, y posteriormente para validar.
Ahora nos hacen falta los plugins. Vamos con el de JSON primero:
|
|
|
|
Y ahora con el de YAML:
|
|
|
|
Y ejecutándolo con algunos archivos:
|
|
Conclusiones
Yapsy es un sistema de plugins sencillo y fácil de usar, pero no por ello menos potente. Soporta configuración de plugins y auto-instalado de los mismos.
Aquí he mostrado sólo ejemplos sencillos, pero se puede complicar mucho más. Si tenemos distintos tipos de plugins, podemos crear subclases de yapsy.IPlugin.IPlugin
y filtrarlos por tipo a la hora de invocar,
Pero para mí la principal ventaja es que no tiene dependencias difíciles: sólo Python estándar. Eso permite usarlo hasta en proyectos muy pequeños. Yo mismo comencé un proyecto parecido hace tiempo… que voy a desmantener tras descubrir Yapsy.
Y como al final el validador me ha gustado, y quizá alguien, algún día, quiera continuarlo, lo he dejado en GitHub.