Skip to content
Snippets Groups Projects
Commit 59afec2a authored by Antoine Lambert's avatar Antoine Lambert
Browse files

utils/urlsindex: Add support for django non regexp route

Allow to define endpoint route using a simple string instead of a
regular expression.

It notably enables to use django parameter type annotations like
int or uuid.
parent d4061d2c
No related branches found
No related tags found
1 merge request!1301save_bulk: Add Web API endpoint to get feedback about a sent request
......@@ -381,7 +381,7 @@ def api_doc(
return make_api_response(request, None, doc_data)
route_name = "%s-doc" % route[1:-1].replace("/", "-")
urlpattern = f"^api/{api_version}{route}doc/$"
urlpattern = f"api/{api_version}{route}doc/"
view_name = "api-%s-%s" % (api_version, route_name)
api_urls.add_url_pattern(urlpattern, doc_view, view_name)
......@@ -389,7 +389,7 @@ def api_doc(
# for backward compatibility as previous apidoc URLs were missing
# the /api prefix
old_view_name = view_name.replace("api-", "")
old_urlpattern = f"^{api_version}{route}doc/$"
old_urlpattern = f"{api_version}{route}doc/"
@api_view(["GET", "HEAD"])
def old_doc_view(request):
......
......@@ -89,7 +89,7 @@ def api_route(
"""
url_pattern = "^api/" + api_version + url_pattern + "$"
url_pattern = "api/" + api_version + url_pattern
def decorator(f):
# create a DRF view from the wrapped function
......
......@@ -77,7 +77,7 @@ def api_home(request: Request):
return Response({}, template_name="api.html")
api_urls.add_url_pattern(r"^api/$", api_home, view_name="api-1-homepage")
api_urls.add_url_pattern("api/", api_home, view_name="api-1-homepage")
@api_route(r"/", "api-1-endpoints")
......
......@@ -24,7 +24,7 @@ def browse_route(
view_name: the name of the Django view associated to the routes used
to reverse the url
"""
url_patterns = tuple("^browse/" + url_pattern + "$" for url_pattern in url_patterns)
url_patterns = tuple("browse/" + url_pattern for url_pattern in url_patterns)
view_name = view_name
def decorator(f):
......
......@@ -7,8 +7,7 @@ from typing import Callable, List
from django.http.response import HttpResponseBase
from django.shortcuts import redirect
from django.urls import URLPattern
from django.urls import re_path as url
from django.urls import URLPattern, path, re_path
class UrlsIndex:
......@@ -27,14 +26,23 @@ class UrlsIndex:
Adds an URL pattern.
Args:
url_pattern: regex describing a Django URL
url_pattern: string or regex describing a Django URL
view: function implementing the Django view
view_name: name of the view used to reverse the URL
"""
if "(?P<" in url_pattern:
url = re_path
assert not url_pattern.startswith("^")
assert not url_pattern.endswith("$")
pattern = "^" + url_pattern + "$"
else:
url = path
pattern = url_pattern
if view_name:
self.urlpatterns.append(url(url_pattern, view, name=view_name))
self.urlpatterns.append(url(pattern, view, name=view_name))
else:
self.urlpatterns.append(url(url_pattern, view))
self.urlpatterns.append(url(pattern, view))
def add_redirect_for_checksum_args(
self, view_name: str, url_patterns: List[str], checksum_args: List[str]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment