Changes between Initial Version and Version 1 of Version2/Tutoriales/Consola_Web/Tutorial_5_Acciones_avanzadas_en_Panel_Contextual


Ignore:
Timestamp:
Mar 29, 2011, 4:30:52 PM (13 years ago)
Author:
edulix
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Version2/Tutoriales/Consola_Web/Tutorial_5_Acciones_avanzadas_en_Panel_Contextual

    v1 v1  
     1= Introducción =
     2
     3Este es el segundo tutorial de la saga de tutoriales sobre Opengnsys 5 referentes a cómo implementar plugins para la Consola Web. Puedes acceder a la [Version2 página que lista todos los tutoriales] o al tutorial anterior: [wiki:Version2/Tutoriales/Consola_Web/Tutorial_4_Jobs Tutorial 4: Envío de trabajos a los clientes].
     4
     5Este quinto tutorial se basa en el [wiki:Version2/Tutoriales/Consola_Web/Tutorial_2_Acciones_en_Panel_Contextual Tutorial 2], por tanto es preciso haberlo comprendido para poder continuar. En ese tutorial conseguimos que una acción se mostrase en panel contextual del navegador de la consola cuando se muestra un ordenador o una unidad organizativa.
     6
     7En 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.
     8
     9= Devolviendo acciones =
     10
     11El 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_url. Esa función recibe la url que se está visitando actualmente, y en función de lo que queramos que haga el plugin, devolverá una lista de acciones para esa url (que puede estar vacía).
     12
     13{{{
     14#!python
     15
     16'''
     17Hello World! plugin example
     18'''
     19
     20from ..pluginbase import PluginBase
     21from main.model import Computer
     22from ..action import ActionInstance
     23import views
     24import web
     25
     26class ComputerNotFoundError(Exception):
     27    pass
     28
     29class Plugin(PluginBase):
     30    '''
     31    '''
     32    def enable(self):
     33        self.urls = ('hello_computer/(.*)', views.HelloComputerView)
     34
     35    def get_action_instances_for_url(self, url):
     36        if url.startswith("/navigator/computer"):
     37            # Getting the computer
     38            name = url.split('/').pop()
     39            orm = web.ctx.orm
     40            computer = orm.query(Computer).filter(Computer.name == name).first()
     41
     42            if not computer:
     43                raise ComputerNotFoundError()
     44
     45            # Show the action only if computer is online
     46            if not computer.online:
     47                return []
     48            else:
     49                return [ActionInstance(self.actions['hello_computer'],
     50                    self.fill_url(views.HelloComputerView, name))]
     51        else:
     52            return []
     53}}}
     54
     55Las 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 text, 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, la vista asociada a dicha url y los parámetros que queremos que reciba.
     56
     57El 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:
     58
     59{{{
     60#!python
     61'''
     62Hello views
     63'''
     64from __future__ import unicode_literals
     65from decorators import pi18n
     66import web
     67
     68class HelloComputerView:
     69    @pi18n
     70    def GET(self, name):
     71        message = _("Hello Online Computer %s!") % name
     72        return web.ctx.render.plugins.hello.hello(message)
     73}}}
     74
     75También se ha actualizado el plugin.conf:
     76
     77{{{
     78[plugin]
     79human_name = Hello World! Tutorial 5
     80version = 1.0.0
     81
     82[action/hello_computer]
     83description = Displays the text Hello online computer!
     84human_name = Say hello to this
     85appear_in_main_panel = No
     86}}}
     87
     88= Usando el plugin =
     89
     90Para 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!".
     91
     92Puedes [[attachment:version2_tutorial_5_code.tar.bz2|descargar el código de este quinto tutorial aquí]].