In db.py
articles_service = Service()
In controller.py
def call():
"""
exposes services. for example:
http://..../[app]/articles/call/jsonrpc
decorate with @services.jsonrpc the functions to expose
supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv
"""
return articles_service()
@articles_service.json
def article_search():
# do something with request.post_vars
Выполнение URL-вызова на app/controller/article_search
throws:
TypeError: article_search() takes no arguments (1 given)
Это произошло после обновления Web2py с web2py v2.14.6
до v2.18.2
Я думаю, что, возможно, я полагался на ошибку в более раннем выпуске Web2py, которая с тех пор была закрыта.
Если я добавлю параметр в свою функцию контроллера, например, def article_search(param)
, будет выдано исключение:
TypeError: article_search() got an unexpected keyword argument
, за которым следует dict (содержащий request.post_vars).
Полная трассировка стека:
Traceback (most recent call last):
File "/base/data/home/apps/e~jupiter1351/t1.416461603777157393/gluon/restricted.py", line 219, in restricted
exec(ccode, environment)
File "/base/data/home/apps/e~jupiter1351/t1.416461603777157393/applications/jupiter/controllers/articles.py", line 115, in <module>
File "/base/data/home/apps/e~jupiter1351/t1.416461603777157393/gluon/globals.py", line 421, in <lambda>
self._caller = lambda f: f()
File "/base/data/home/apps/e~jupiter1351/t1.416461603777157393/applications/jupiter/controllers/articles.py", line 114, in call
return articles_service()
File "/base/data/home/apps/e~jupiter1351/t1.416461603777157393/gluon/tools.py", line 5366, in __call__
return self.serve_json(request.args[1:])
File "/base/data/home/apps/e~jupiter1351/t1.416461603777157393/gluon/tools.py", line 5050, in serve_json
s = self.call_service_function(self.json_procedures[args[0]], *args[1:], **d)
File "/base/data/home/apps/e~jupiter1351/t1.416461603777157393/gluon/tools.py", line 5391, in call_service_function
return f(*a, **b)
TypeError: article_search() takes no arguments (1 given)