viernes, 3 de diciembre de 2010

PyPlugin aplicaciones con plugins de forma simple y sin dolor!

Una aplicación que soporta plugins sin dudas tiene un agregado importante, ya que por medio de los plugins podemos hacer que haga distintas actividades inclusive algunas para la cual la aplicación no fue pensada. Por otro lado los plugins permiten atraer programadores a nuestros proyectos ya que es más fácil aprender como hacer un plugin que aprender como funciona el núcleo de la aplicación para poder modificarla.
Como desarrolladores muchas veces nos encontramos que queremos ser capaces de tener nuestro motor de plugins pero chocamos con la pared al ver que debemos dedicarle mucho tiempo al motor de plugin y esto nos aleja de que la aplicación avance en su objetivo principal.
Por lo dicho arriba dedique mi tiempo a escribir una libreria llamada PyPlugin desarrollada en python bajo licencia GPL, PyPlugin permite que nuestras aplicaciones (python) soporten plugins desde el principio!. Se encarga de hacer el trabajo pesado, nosotros solo debemos escribir plugins.
PyPlugin basicamente agrega una capa de comunicación entre la aplicación y los plugins.
En otro post voy a hablar de los detalles técnicos de PyPlugin.
PyPlugin se compone de dos clases importantes para nosotros PyPluginManager y PyBasePlugin.
PyPluginManager es el encargado de buscar los plugins por nosotros, llevarlos a memoria, bajarlos de memoria y todas las tareas "administrativas".
PyBasePlugin es nuestra clase base para crear plugins.
Veamos un ejemplo de PyPlugin en acción.

Escribamos un plugin


from pyplugin import plugin
class MiPrimerPlugin(plugin.PyBasePlugin):
def get_info(self):
return "Soy un plugin que saluda"
def do_work(self):
return "Hola Mundo de los plugins!"


Ahora manejemos los plugins

from pyplugin import plugin_manager
folders = ('mis_plugins',)
plugin_manager = plugin_manager.PyPluginManager(folders)
#Cantidad de plugin
print "Cantidad ( %s )" % len(plugin_manager)
#No hay plugins entonces busquemos
plugin_manager.discover()
print "Cantidad ( %s )" % len(plugin_manager)
#Recorramos los plugins
for plug_name in plugin_manager:
print "Plugin ( %s )" % plug_name
#Existe "plugin_magico"?
'plugin_magico' in plugin_manager
#Hagamos que los plugins hagan algo
for plugin_name in plugin_manager:
plugin_manager[plugin_name].do_work()

1 comentario:

  1. Visita mi web a ver si se parece en algo a la tuya...

    http://romanmarkic.blogspot.com/

    ResponderEliminar