Pregunta

Estoy construyendo un servicio web mediante el Matraz y estoy tratando de implementar un simple "Hola, Mundo" de la aplicación usando el Parche.Estoy teniendo problemas para tener todo configurado para trabajar juntos a pesar de.He visto el Google golpe sobre la ejecución de la cantimplora con pasta de usar virtualenv y zcbuildout, pero que parece que es una exageración para un buen punto de aplicación.Ahora, cuando trato de cargar una dirección URL con mi aplicación, me sale este error:

Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 1068, in process_request_in_thread
  self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
  self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 639, in __init__
  self.handle()
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 442, in handle
  BaseHTTPRequestHandler.handle(self)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 343, in handle
  self.handle_one_request()
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 437, in handle_one_request
  self.wsgi_execute()
File "/usr/lib/python2.7/dist-packages/paste/httpserver.py", line 287, in wsgi_execute
  self.wsgi_start_response)
AttributeError: GraffitiApp instance has no __call__ method

Mi configuración de la aplicación se ve como:

[DEFAULT]
loglevel = WARN
browser_cache_ttl = 30

[app:main]
use = egg:GraffitiService

[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = %(graffiti_port)s

Mi código de la aplicación se ve como:

from flask import Flask

app = Flask(__name__)
app.debug = True

class GraffitiApp:

    @app.route('/')
    def hello_world():
        return "Hello World!"

    @app.route('/other')
    def other_page():
        return "Other page!"

    def main():
        app.run(debug = True)

if __name__ == "__main__":
    app.run(debug = True)

Qué necesito para crear una __call__() método y mapa en cualquier dirección URL se pasa a la función apropiada, o hay un cambio tengo que hacer a mi configuración?

EDITAR

Estoy usando una empresa de nombre main.py como resultado de los errores que estaba recibiendo acerca de no encontrar un punto de entrada denominado "principal":

import logging

from graffiti import GraffitiApp

def make_app(globalArgs, **localArgs):
    loglevelname = globalArgs.get("loglevel", "INFO").lower()

    if loglevelname == 'critical':
        loglevel = logging.CRITICAL
    elif loglevelname == 'debug':
        loglevel = logging.DEBUG
    elif loglevelname == 'error':
        loglevel = logging.ERROR
    elif loglevelname == 'fatal':
        loglevel = logging.FATAL
    elif loglevelname == 'info':
        loglevel = logging.INFO
    elif loglevelname == 'warn' or loglevelname == 'warning':
        loglevel = logging.WARN
    else:
        loglevel = logging.NOTSET
        loglevelname = 'notset'

    FORMAT = "%(asctime)s %(name)s %(levelname)s %(message)s"
    logging.basicConfig(format = FORMAT, level = loglevel)
    logging.info("Log level set to %s" % (loglevelname.upper()))

    return GraffitiApp()
¿Fue útil?

Solución

Parece que el servidor está tratando de ejecutar su GraffitiApp() la clase cuando se debe ejecutar el Flask() ejemplo app.

Otros consejos

OFFTOP (lo siento, pero su código rompe mis ojos):

import logging

from graffiti import GraffitiApp

def make_app(globalArgs, **localArgs):
    loglevelname = globalArgs.get("loglevel", "INFO")
    loglevel = getattr(logging, loglevelname.upper(), logging.NOTSET)


    FORMAT = "%(asctime)s %(name)s %(levelname)s %(message)s"
    logging.basicConfig(format = FORMAT, level = loglevel)
    logging.info("Log level set to %s" % (loglevelname))

    return GraffitiApp()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top