refactor: Implement require_api_key with functools.wraps

The @decorator mechanism does not seem to work with @method_decorator
in Django 4.0, have not tracked down why.
This commit is contained in:
Jennifer Richards 2023-05-17 09:45:07 -03:00
parent 223c679942
commit 8cf609bfa9
No known key found for this signature in database
GPG key ID: 9B2BF5C5ADDA6A6E
2 changed files with 52 additions and 47 deletions

View file

@ -5,6 +5,7 @@
import datetime import datetime
from decorator import decorator, decorate from decorator import decorator, decorate
from functools import wraps
from django.conf import settings from django.conf import settings
from django.contrib.auth import login from django.contrib.auth import login
@ -39,9 +40,10 @@ def person_required(f, request, *args, **kwargs):
return render(request, 'registration/missing_person.html') return render(request, 'registration/missing_person.html')
return f(request, *args, **kwargs) return f(request, *args, **kwargs)
@decorator
def require_api_key(f, request, *args, **kwargs):
def require_api_key(f):
@wraps(f)
def _wrapper(request, *args, **kwargs):
def err(code, text): def err(code, text):
return HttpResponse(text, status=code, content_type='text/plain') return HttpResponse(text, status=code, content_type='text/plain')
# Check method and get hash # Check method and get hash
@ -85,6 +87,7 @@ def require_api_key(f, request, *args, **kwargs):
log.log("Bad API call: args: %s, kwargs: %s, exception: %s" % (args, kwargs, e)) log.log("Bad API call: args: %s, kwargs: %s, exception: %s" % (args, kwargs, e))
return err(400, "Bad or missing parameters") return err(400, "Bad or missing parameters")
return ret return ret
return _wrapper
def _memoize(func, self, *args, **kwargs): def _memoize(func, self, *args, **kwargs):

View file

@ -11,7 +11,9 @@ from django.utils.encoding import force_str
from django.views.generic import View from django.views.generic import View
def url(regex, view, kwargs=None, name=None): def url(regex, view, kwargs=None, name=None):
if callable(view) and hasattr(view, '__name__'): if hasattr(view, "view_class"):
view_name = "%s.%s" % (view.__module__, view.view_class.__name__)
elif callable(view) and hasattr(view, '__name__'):
view_name = "%s.%s" % (view.__module__, view.__name__) view_name = "%s.%s" % (view.__module__, view.__name__)
else: else:
view_name = regex view_name = regex