[pyar] ArghParser, comandos y modulos/plugins

Juan Carizza juan.carizza en gmail.com
Mie Feb 3 10:30:42 ART 2016


En cada main de plugin definis algo asi

plugins/nombreplugin/main.py:
argumentos = [
    [
        list('--sum'),
        dict(dest="accumulate", action="store_const"}
    ],
    [
        list('bar'),
        dict(nargs='+', help='bar help')
    ]
]


En tu "loader de plugins" en el main.py:
for plugin in plugins_disponibles:
    # Agarras los argumentos posicionales
    args = plugin.argumentos[0]

    # Agarras los keyword arguments
    kwargs = plugin.argumentos[1]

    # Los agregas al argparse principal (y unico)
    argparse.add_argument(*args, **kwargs)

Lo que no tengo tan claro es como vas a decidir que función de que plugin
vas a ejecutar. Calculo que deberías aplicar algo como chain of
responsibility.

Saludos

El mié., 3 feb. 2016 a las 10:00, Martín Marqués (<martin en 2ndquadrant.com>)
escribió:

> Buenas gente,
>
> Escribo con una consulta sobre ArghParser.
>
> Les cuento:
>
> Estoy haciendo un re-write de una aplicación (script en realidad, pero
> quiero que esto pueda usarse en una GUI futura que se hará con PyQt) que
> recibe argumentos por linea de comando y retorna el estado de ciertos
> servicios. La función principal es usarlo para alimentar a
> Nagios/Icinga, pero luego tener una GUI que muestre estos estados.
>
> La idea es usar ArghParser para manejar los comandos y ayudas. Aquí
> aparece mi duda:
>
> Esto va a ser modular, donde los chequeos se van a poder agregar tipo
> plugin. El plugin deberá cumplir con algunos requisitos para poder
> usarse, pero se instala independientemente.
>
> Si de entrada no sé que plugins tengo disponibles, como puedo manejar la
> lista de commandos del ArghParser?
>
> Se me ocurre que podría generarla con cada ejecución leyendo los plugins
> disponibles (estarán en un directorio separado). Otra opción que me
> gusta más es que la instalación de un plugin actualice una especie de
> cache donde estén todos los plugins disponibles. O que él cache se vaya
> actualizando con cada ejecución (si hace falta).
>
> Hay alguna forma más "elegante" de hacer esto?
>
> echo 'print("Saludos!")' | python3
>
> --
> Martín Marqués                http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160203/d25078fe/attachment.html>


Más información sobre la lista de distribución pyar