Este módulo simple basado en Web.py le permite configurar automáticamente un servidor web HTTP simple de los objetos avanzados argparse.ArgumentParser y los similares ( argh.ArgumentParser ). El uso de esto además de ARGH le permite generar automáticamente la interfaz de usuario web con funciones simples definidas en su aplicación. Este paquete se hizo para llevar sus scripts de línea de comando personal a la siguiente etapa: utilidades compartidas internas.
Para una configuración de producción como necesitará:
Hacer que su script principal exponga un objeto global de la aplicación llamando al método webui.webui.wsgi ()
Modifique index.wsgi para que se ajuste a su aplicación (configuración trivial, aplicación de importación mencionada)
Configure un servidor de Apache (o cualquier otro) WSGI de soporte (o cualquier otro)
Para la configuración como la depuración que necesitará (pero como se usa para herramientas internas, esto también podría estar bien):
argparse.ArgumentParser.parse_args() o argh.dispatch() con webui.Webui.getone() o webui.Webui.dispatch() respectivamente. dispatch() instanciará un servicio web y métodos de envío de llamadas (ya sea proporcionados por el usuario, usted, o los métodos de despacho para admitir analizadores de argumentos como argh )
get() y getone() envuelva el método dispatch() y obtenga resultados a medida que se envían en el formulario web, proporcionando una interfaz que se asemeja al método parse_args() .
argparseweb requiere que web.py esté disponible. Puede instalarlo (verificar la última versión) con: pip install web.py
Este ejemplo configurará un servidor HTTP, obtendrá una entrada válida, derribará el servidor HTTP, imprima un mensaje de bienvenida a Stdout y salga:
import argparse
from argparseweb import *
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
opts = webui . Webui ( parser ). getone ()
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
if __name__ == "__main__" :
main ()Este ejemplo también se ejecutará hasta que se detenga, imprimiendo un mensaje acogedor para cada entrada válida:
import argparse
from argparseweb import *
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
for opts in webui . Webui ( parser ). get ():
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
if __name__ == "__main__" :
main ()Este ejemplo imprimirá el mensaje de bienvenida en la respuesta HTTP, enviándolo al usuario:
import argparse
from argparseweb import *
def welcome ( opts ):
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
webui . Webui ( parser ). dispatch ( welcome , parsed = True )
if __name__ == "__main__" :
main ()Este fragmento incluye tres modos de operación para la utilidad WebUI:
Primero y más simple: los métodos de despacho que utilizan la función automática de Argh a las instalaciones de analizador de línea de comandos, esto no está relacionado con WebUI y de esa manera no perderá la capacidad de uso de línea de comandos existente.
Obtener --webui como el primer argumento de la línea de comandos, establece un servidor web de desarrollo (predeterminado es *: 8080) y está listo para usar.
Exponer un objeto global application que admite la interfaz WSGI. Una vez que apunte a un navegador con la configuración de WSGI correcta (fue un poco doloroso para mí por primera vez) funcionará como magia :)
myapp.py:
import argparse
from argparseweb import *
def get_parser ():
"""Generate generic argument parser"""
cmd_parser = argh . ArghParser ()
cmd_parser . add_commands ([...])
return cmd_parser
def main_1 ():
# k. get the parser as usual
cmd_parser = get_parser ()
# last chance to use webui, if --webui is passed as first command line argument
# remove it as let webui handle the rest
if sys . argv [ 1 ] == '--webui' :
sys . argv . remove ( '--webui' )
webui . Webui ( cmd_parser ). dispatch () # second mode of operation - development/fast setup
else :
# dispatch either webui or argh
cmd_parser . dispatch () # first mode of operation - regular command line
def main_2 ():
parser = argparse . ArgumentParser ()
# TODO: fill argparse
# opts = parser.parse_args()
opts = webui . Webui ( parser ). getone ()
# TODO: use opts as you would with any ArgumentParser generated namespace,
# opts is really a namespace object directly created by parser, and webui only compiled an argument sequence
# based on the filled form, passed into parser.parse_args() and back to you
def wsgi ():
global application
# create a webui application using the command line argument parser object
# and make it's wsgi function the global `application` parameter as required by wsgi
cmd_parser = get_parser ()
application = webui . Webui ( cmd_parser ). wsgi () # third mode of operation - production wsgi application
if __name__ == "__main__" :
# script initialized as main, lets do our trick
main ()
else :
# if script wasn't initialized as main script, we're probably running
# in wsgi mode
wsgi ()index.wsgi:
# TODO: replace with your application path
# i found now way to get it automatically in wsgi :/
APP_DIR = '/var/www/myapp'
import sys , os
sys . path . insert ( 0 , APP_DIR )
os . chdir ( APP_DIR )
from myapp import application Más ejemplos están en test.py
Hecho: