Ce module simple basé sur web.py vous permet de configurer automatiquement un serveur Web HTTP simple à partir d'objets argparse.ArgumentParser avancés et de similaires ( argh.ArgumentParser ). L'utilisation de cela en plus d'ARGH vous permet de générer automatiquement l'interface utilisateur Web à partir de fonctions simples définies dans votre application. Ce package a été conçu pour amener vos scripts de ligne de commande personnels à l'étape suivante - les utilitaires partagés internes.
Pour une production comme la configuration, vous aurez besoin:
Faites de votre script principal exposer un objet global d'application en appelant webui.webui.wsgi ()
modifier index.wsgi pour ajuster votre application (configuration triviale, importer une application susmentionnée)
Configurer un serveur WSGI prenant en charge Apache (ou tout autre)
Pour le débogage comme la configuration dont vous aurez besoin (mais comme il est utilisé pour les outils internes, cela pourrait également être bien):
argparse.ArgumentParser.parse_args() ou argh.dispatch() avec webui.Webui.getone() ou webui.Webui.dispatch() respectivement. dispatch() instanciera un service Web et des méthodes de répartition des appels (soit fournis par l'utilisateur - vous - ou les méthodes de répartition pour prendre en charge les analyseurs d'arguments comme argh )
get() et getone() enveloppez la méthode dispatch() et rendent les résultats tels qu'ils sont soumis dans le formulaire Web, fournissant une interface qui ressemble à la méthode parse_args() .
argparseweb exige que web.py soit disponible. Vous pouvez l'installer (vérifier la dernière version) avec: pip install web.py
Cet exemple mettra en place un serveur HTTP, obtiendra une entrée valide, démolira le serveur HTTP vers le bas, imprimez un message accueillant sur STDOUT et QUITS:
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 ()Cet exemple se déroulera également jusqu'à ce qu'on s'arrête, imprimant un message accueillant pour chaque entrée valide:
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 ()Cet exemple imprimera le message accueillant dans la réponse HTTP, le renvoyant à l'utilisateur:
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 ()Cet extrait comprend trois modes de fonctionnement pour l'utilitaire WebUI:
Tout d'abord et les plus simples: répartir les méthodes utilisant la fonction automatique d'Argh pour commander des installations d'analyse de ligne, ceci n'est complètement sans rapport avec webui et de cette façon, vous ne perdrez pas la capacité d'utilisation de la ligne de commande existante.
Obtenir --webui en tant que premier argument de ligne de commande, configure un serveur Web de développement (par défaut à *: 8080) et est prêt à l'emploi.
Exposer un objet global application qui prend en charge l'interface WSGI. Une fois que vous pointez un navigateur avec une configuration WSGI correcte (était un peu pénible pour moi la première fois), cela fonctionnera comme la magie :)
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 Plus d'exemples sont à test.py
Fait: