Вы должны использовать декоратор следующим образом:
@cherrypy.tools.uppercase
def index(self):
return 'Hello!'
Обратите внимание на отсутствие ()
после uppercase
- декоратор принимает первый аргумент (декорированную функцию) неявно, и круглые скобки не нужны .
Изменить:
Согласно документации , инструмент можно определить с помощью декоратора cherrypy.tools.register
или конструктора cherrypy.Tool
. В вашем коде вы дважды определяете инструмент uppercase
.
Но в вашем случае декоратор uppercase
не нужно определять как Tool
, потому что это не то, что нужно запускать каждый раз как хук (before_finalize).
Следовательно, вам будет лучше просто использовать его как простой Python декоратор, например:
from functools import wraps
# just a plain Python decorator
def uppercase(func):
@wraps(func) #preserve function attributes, such as its name
def wrapper(*args):
original_result = func(*args)
modified_result = original_result.upper()
return modified_result
return wrapper
class HelloWorld(object):
@cherrypy.expose
@uppercase # decorated once, the exposed function is now uppercase(index)
def index(self):
return 'Hello!'