Este módulo simples baseado em web.py permite configurar automaticamente um servidor web http simples fora dos objetos avançados argparse.ArgumentParser e similares ( argh.ArgumentParser ). Usando isso em cima do ARGH, permite gerar automaticamente a interface do usuário da Web a partir de funções simples definidas em seu aplicativo. Este pacote foi feito para levar seus scripts de linha de comando pessoal para o próximo estágio - utilitários compartilhados internos.
Para uma produção como a configuração, você precisará:
Faça seu script principal expor um objeto global do aplicativo chamando o método webui.webui.wsgi ()
Modify index.wsgi para ajustar seu aplicativo (configuração trivial, importação de importação acima mencionada)
Configure um servidor Apache de suporte a WSGI (ou qualquer outro)
Para depurar como configuração, você precisará (mas como é usado para ferramentas internas, isso também pode estar bem):
argparse.ArgumentParser.parse_args() ou argh.dispatch() com webui.Webui.getone() ou webui.Webui.dispatch() respectivamente. dispatch() instanciará um serviço da Web e chama os métodos de expedição (fornecidos pelo usuário - você - ou por métodos de expedição de suporte a reaiss de argumentos como argh )
get() e getone() Enrole o método dispatch() e produz os resultados à medida que são enviados no formulário da Web, fornecendo uma interface que se assemelha ao método parse_args() .
argparseweb exige que web.py esteja disponível. Você pode instalá -lo (verifique a versão mais recente) com: pip install web.py
Este exemplo configurará um servidor HTTP, obterá uma entrada válida, derrubará o servidor HTTP, imprimirá uma mensagem de boas -vindas para Stdout e saia:
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 exemplo também será executado até parar, imprimindo uma mensagem de boas -vindas 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 exemplo imprimirá a mensagem de boas -vindas na resposta HTTP, enviando -a de volta ao usuário:
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 trecho inclui três modos de operação para o utilitário webui:
Primeiro e mais simples: os métodos de despacho usando a função automática do ARGH para comandar as instalações do analisador de linha, isso não tem relação com a Webui e, dessa forma, você não perderá a capacidade de uso da linha de comando existente.
Getter --webui como o primeiro argumento da linha de comando, configura um servidor da Web de desenvolvimento (padrão para *: 8080) e está pronto para uso.
Expondo um objeto global application que suporta a interface WSGI. Depois de apontar, um navegador com a configuração correta do WSGI (foi um pouco de dor para mim pela primeira vez), funcionará como mágica :)
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 Mais exemplos estão em test.py
Feito: