Ваш декоратор в основном проверяет, есть ли у пользователя разрешение на выполнение данной функции, на самом деле я не понимаю, почему вы хотите получить (присоединить) привилегию к функции, которая была упакована, но вы можете сделать это без добавленияеще один аргумент для всех ваших функций.
def needs_privilege(privilege, project=None):
"""Check whether the logged-in user is authorised based on the
given privilege
@type privilege: Privilege object, id, or str
@param privilege: The requested privilege"""
def validate(func, self, *args, **kwargs):
"""Validator of needs_privillige"""
try: check(self.user, privilege, project)
except AccessDenied:
return abort(status_code=401)
else:
return func(self, *args, **kwargs)
validate.privelege = privelege
return decorator(validate)
кстати, ваш декоратор должен быть таким:
def needs_privilege(privilege, project=None):
def validate(func):
def new_func(self, *args, **kwargs):
try:
check(self.user, privilege, project)
except AccessDenied:
return abort(status_code=401)
else:
return func(self, *args, **kwargs)
new_func.privilege = privilege
return new_func
return validate