Allow to use decorators with web.View class

This commit is contained in:
Vincent Maillol
2018-04-14 16:50:10 +02:00
parent 797d892ac1
commit cb1ca8a671
2 changed files with 109 additions and 4 deletions

View File

@@ -92,13 +92,18 @@ def login_required(fn):
User is considered authorized if authorized_userid
returns some value.
"""
@wraps(fn)
async def wrapped(*args, **kwargs):
request = args[-1]
if not isinstance(request, web.BaseRequest):
if isinstance(request, web.View):
request = request.request
elif not isinstance(request, web.BaseRequest):
msg = ("Incorrect decorator usage. "
"Expecting `def handler(request)` "
"or `def handler(self, request)`.")
"`def handler(self, request)` or "
"`def handler(self)` if handler is "
"a web.View subclasse method.")
raise RuntimeError(msg)
userid = await authorized_userid(request)
@@ -123,13 +128,18 @@ def has_permission(
raises HTTPForbidden.
"""
def wrapper(fn):
@wraps(fn)
async def wrapped(*args, **kwargs):
request = args[-1]
if not isinstance(request, web.BaseRequest):
if isinstance(request, web.View):
request = request.request
elif not isinstance(request, web.BaseRequest):
msg = ("Incorrect decorator usage. "
"Expecting `def handler(request)` "
"or `def handler(self, request)`.")
"`def handler(self, request)` or "
"`def handler(self)` if handler is "
"a web.View subclasse method.")
raise RuntimeError(msg)
userid = await authorized_userid(request)