Я пишу вебапи, используя flask и flask -restplus. Я создал декоратор для расчета времени выполнения вызова API.
import time
class TimeCalculateDecorator:
def __init__(self, func):
self.function = func
def __call__(self,*args, **kws):
ts = time.time()
result = self.function(*args, **kws)
te = time.time()
print('func:%r args:[%r, %r] took: %2.4f sec' % \
(self.function.__name__, args, kw, te-ts))
return result
Вот как я его использую ...
class MultipleEmp_controller(Resource):
@inject
def __init__(self,api, dataservice:DataServiceBase):
self.service = dataservice
@TimeCalculateDecorator
def get(self):
"""Get Request for version 1"""
emp_schema = EmployeeSchema(many=True)
emps = emp_schema.dump(self.service.getemployees())
return emps
Проблема возникает, когда декоратор вызывает выше контроллера оттуда отсутствует метод и найденный аргумент. Вот точное сообщение об ошибке ...
"get() missing 1 required positional argument: 'self'",
Я пробовал Google, но не повезло.
Я пытался с простым методом декоратора, как показано ниже ...
def timeit(method):
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
print('func:%r args:[%r, %r] took: %2.4f sec' % \
(method.__name__, args, kw, te-ts))
return result
return timed
и это работает отлично. Проблема возникает, когда я делаю это как класс, а не как метод.