mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 20:40:14 +03:00
Add get_original_route to complement get_regex_pattern
This commit is contained in:
parent
426eb90782
commit
63ee414e3c
|
@ -29,7 +29,11 @@ except ImportError:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_regex_pattern(urlpattern):
|
def get_original_route(urlpattern):
|
||||||
|
"""
|
||||||
|
Get the original route/regex that was typed in by the user into the path(), re_path() or url() directive. This
|
||||||
|
is in contrast with get_regex_pattern below, which for RoutePattern returns the raw regex generated from the path().
|
||||||
|
"""
|
||||||
if hasattr(urlpattern, 'pattern'):
|
if hasattr(urlpattern, 'pattern'):
|
||||||
# Django 2.0
|
# Django 2.0
|
||||||
return str(urlpattern.pattern)
|
return str(urlpattern.pattern)
|
||||||
|
@ -38,6 +42,19 @@ def get_regex_pattern(urlpattern):
|
||||||
return urlpattern.regex.pattern
|
return urlpattern.regex.pattern
|
||||||
|
|
||||||
|
|
||||||
|
def get_regex_pattern(urlpattern):
|
||||||
|
"""
|
||||||
|
Get the raw regex out of the urlpattern's RegexPattern or RoutePattern. This is always a regular expression,
|
||||||
|
unlike get_original_route above.
|
||||||
|
"""
|
||||||
|
if hasattr(urlpattern, 'pattern'):
|
||||||
|
# Django 2.0
|
||||||
|
return urlpattern.pattern.regex.pattern
|
||||||
|
else:
|
||||||
|
# Django < 2.0
|
||||||
|
return urlpattern.regex.pattern
|
||||||
|
|
||||||
|
|
||||||
def make_url_resolver(regex, urlpatterns):
|
def make_url_resolver(regex, urlpatterns):
|
||||||
try:
|
try:
|
||||||
# Django 2.0
|
# Django 2.0
|
||||||
|
|
|
@ -16,7 +16,7 @@ from django.utils import six
|
||||||
|
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions
|
||||||
from rest_framework.compat import (
|
from rest_framework.compat import (
|
||||||
URLPattern, URLResolver, coreapi, coreschema, get_regex_pattern
|
URLPattern, URLResolver, coreapi, coreschema, get_original_route
|
||||||
)
|
)
|
||||||
from rest_framework.request import clone_request
|
from rest_framework.request import clone_request
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
|
@ -170,7 +170,7 @@ class EndpointEnumerator(object):
|
||||||
api_endpoints = []
|
api_endpoints = []
|
||||||
|
|
||||||
for pattern in patterns:
|
for pattern in patterns:
|
||||||
path_regex = prefix + get_regex_pattern(pattern)
|
path_regex = prefix + get_original_route(pattern)
|
||||||
if isinstance(pattern, URLPattern):
|
if isinstance(pattern, URLPattern):
|
||||||
path = self.get_path_from_regex(path_regex)
|
path = self.get_path_from_regex(path_regex)
|
||||||
callback = pattern.callback
|
callback = pattern.callback
|
||||||
|
|
Loading…
Reference in New Issue
Block a user