Промежуточное ПО MiddleStorm с бутылкой

Как использовать промежуточное ПО MiddleStorm с бутылка? Я последовал этому примеру, заменив SessionMiddleware на MiddleStorm, но не могу заставить его работать.

from bottle import *
from storm.locals import *
from middlestorm import MiddleStorm

#other bottle code like this here...
@get('/')
   def index():
   return 'index'

db = create_database("mysql://user:pass@localhost/mydb")
myapp = MiddleStorm(app, db)
run(app=myapp, reloader=True, host='0.0.0.0', port=4321)

Я получаю эту ошибку в консоли:

exceptions.TypeError: __call__() takes exactly 1 argument (3 given)

Если я изменю строку с помощью myapp на:

myapp = MiddleStorm(app(), db)

Я получаю эту ошибку на веб-странице:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 651, in _handle
    return callback(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 1143, in wrapper
    rv = callback(*a, **ka)
TypeError: decorator() takes exactly 1 argument (0 given)

изменить: установлены бутылка, шторм, средний шторм

edit2: если я перенаправляю строку myapp на myapp = MiddleStorm (dafault_app, db), я получаю эту ошибку:

Traceback (most recent call last):
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/dist-packages/middlestorm-0.8.1-py2.7.egg/middlestorm.py", line 68, in __call__
    return self._app(environ, start_response)
TypeError: __call__() takes exactly 1 argument (3 given)
homer - - [17/Jul/2011 16:28:42] "GET / HTTP/1.1" 500 59

edit3: с кодом @zeekay я все еще получаю эту ошибку:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 651, in _handle
    return callback(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 1143, in wrapper
    rv = callback(*a, **ka)
TypeError: decorator() takes exactly 1 argument (0 given)

person redman    schedule 17.07.2011    source источник


Ответы (1)


На самом деле default_app и app синонимы. Это должно работать:

myapp = MiddleStorm(app(), db)

Просто протестирую кратко, и, похоже, у меня это работает. Можете ли вы попробовать это проверить:

from bottle import *
from storm.locals import *
from middlestorm import MiddleStorm

@get('/')
def index():
   return 'index'

db = create_database("sqlite://test.db")
myapp = MiddleStorm(app(), db)
run(app=myapp, reloader=True, host='0.0.0.0', port=4321)

Вы должны иметь возможность поместить его в файл и просто запустить.

person zeekay    schedule 17.07.2011
comment
Чтобы объяснить этот ответ немного подробнее, промежуточное ПО ожидает обернуть фактическое приложение wsgi, но обработчики запросов в бутылке не таковы, скорее, бутылка использует их для создания приложения wsgi. - person SingleNegationElimination; 17.07.2011