Este es el quinto tutorial de la saga de tutoriales sobre Opengnsys 2 referentes a cómo implementar plugins para la Consola Web. Puedes acceder a la [que lista todos los tutoriales] o al tutorial anterior: Tutorial 4: Envío de trabajos a los clientes.
Este quinto tutorial se basa en el Tutorial 2, por tanto es preciso haberlo comprendido para poder continuar. En dicho tutorial conseguimos que una acción se mostrase en panel contextual del navegador de la consola cuando se muestra al usuario un ordenador o una unidad organizativa.
En este quinto tutorial modificaremos el código del tutorial 2 para que la lista de acciones del plugin para cada url se genere dinámicamente, mostrando sólo la acción cuando el ordenador esté encendido.
El código de nuestro plugin va a variar un poco. Primeramente, hemos eliminado la acción hello, y hemos cambiado la acción hello_entity por hello_computer. Además en vez de definir self.actions_for_urls, vamos a definir una función llamada get_action_instances_for_view. Esa función recibe la vista que se está visitando actualmente y los argumentos que dicha vista recibe, y en función de lo que queramos que haga el plugin, devolverá una lista de acciones para esa vista (que puede estar vacía).
#!python
'''
Hello World! plugin example
'''
from ..pluginbase import PluginBase
from main.model import Computer
from ..action import ActionInstance
import views
import web
class Plugin(PluginBase):
'''
'''
def enable(self):
self.urls = ('hello_computer/(.*)', views.HelloComputerView)
def get_action_instances_for_view(self, view_path, args):
if view_path == "navigator.navigator.NavigatorComputer" and len(args) == 1:
# Getting the computer
name = args[0]
orm = web.ctx.orm
computer = orm.query(Computer).filter(Computer.name == name).first()
if not computer:
return []
# Show the action only if computer is online
if not computer.online:
return []
else:
return [ActionInstance(self.actions['hello_computer'],
self.fill_url(views.HelloComputerView, name))]
else:
return []
Las acciones de dicha lista como podemos ver en el código de arriba son instancias de la clase !ActionInstance, que define todo lo que necesita Opengnsys para mostrar la el texto, el icono y la url del enlace. Para generar la url hemos usado la función fill_url que genera una url a partir de self.urls del plugin, especificando la vista asociada a dicha url y los parámetros que queremos que reciba. El texto y el icono del ActionInstance lo obtenemos de self.actions que contiene la información de las acciones que metamos en plugin.conf.
El código de la vista (view.py) es muy similar a la del tutorial 2, pues sólo se ha eliminado la vista !HelloView que se introdujo en el segundo tutorial y se ha modificado la vista !HelloEntityView para se llame !HelloComputerView y poco más:
#!python
'''
Hello views
'''
from import unicode_literals
from decorators import pi18n
import web
class HelloComputerView:
@pi18n
def GET(self, name):
message = _("Hello Online Computer %s!") % name
return web.ctx.render.plugins.hello.hello(message)
También se ha actualizado el plugin.conf:
[plugin]
human_name = Hello World! Tutorial 5
version = 1.0.0
[action/hello_computer]
description = Displays the text Hello online computer!
human_name = Hello Computer
appear_in_main_panel = No
Para usar el plugin, tenemos que arrancar el servidor de opengnsys si no lo tenías ya arrancado, y activarlo pinchando en "Enable" al lado del plugin, en la pestaña "Plugins" con un usuario que tenga permisos de administración. Luego, al mostrar en el navegador un ordenador que esté online verás que aparece nuestra acción, "Hello", y al hacer clic te aparecerá una página con el mismo look que el resto de la página donde aparece el mensaje "Hello Online Computer!".
Puedes [el código de este quinto tutorial aquí].