datatracker/ietf/utils/urls.py
Jennifer Richards 8cf609bfa9
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.
2023-05-17 09:45:07 -03:00

49 lines
1.5 KiB
Python

# Copyright The IETF Trust 2016-2020, All Rights Reserved
# -*- coding: utf-8 -*-
import debug # pyflakes:ignore
from inspect import isclass
from django.urls import re_path
from django.utils.encoding import force_str
from django.views.generic import View
def url(regex, view, kwargs=None, name=None):
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__)
else:
view_name = regex
if name:
branch = 'name'
elif isinstance(view, (list, tuple)):
branch = 'list'
elif isinstance(view, (str, bytes)):
branch = 'string'
name = force_str(view)
elif callable(view) and hasattr(view, '__name__'):
branch = 'callable'
name = view_name
elif isinstance(view, View):
branch = 'view'
elif isclass(view) or hasattr(view, '__class__'):
branch = 'class'
else:
branch = 'notimpl'
raise NotImplementedError("Auto-named url from view of type %s: %s" % (type(view), view))
if branch == 'name':
# List explicit url names with accompanying view dotted-path:
#debug.say("%s %s" % (view_name, name))
pass
if name:
branch = branch # silent pyflakes
#debug.show('branch')
#debug.show('name')
pass
return re_path(regex, view, kwargs=kwargs, name=name)