diff options
Diffstat (limited to 'rest_framework/urlpatterns.py')
| -rw-r--r-- | rest_framework/urlpatterns.py | 44 | 
1 files changed, 31 insertions, 13 deletions
| diff --git a/rest_framework/urlpatterns.py b/rest_framework/urlpatterns.py index 143928c9..0aaad334 100644 --- a/rest_framework/urlpatterns.py +++ b/rest_framework/urlpatterns.py @@ -1,5 +1,34 @@ -from rest_framework.compat import url +from rest_framework.compat import url, include  from rest_framework.settings import api_settings +from django.core.urlresolvers import RegexURLResolver + + +def apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required): +    ret = [] +    for urlpattern in urlpatterns: +        if not isinstance(urlpattern, RegexURLResolver): +            # Regular URL pattern + +            # Form our complementing '.format' urlpattern +            regex = urlpattern.regex.pattern.rstrip('$') + suffix_pattern +            view = urlpattern._callback or urlpattern._callback_str +            kwargs = urlpattern.default_args +            name = urlpattern.name +            # Add in both the existing and the new urlpattern +            if not suffix_required: +                ret.append(urlpattern) +            ret.append(url(regex, view, kwargs, name)) +        else: +            # Set of included URL patterns +            print(type(urlpattern)) +            regex = urlpattern.regex.pattern +            namespace = urlpattern.namespace +            app_name = urlpattern.app_name +            patterns = apply_suffix_patterns(urlpattern.url_patterns, +                                             suffix_pattern, +                                             suffix_required) +            ret.append(url(regex, include(patterns, namespace, app_name))) +    return ret  def format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None): @@ -28,15 +57,4 @@ def format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None):      else:          suffix_pattern = r'\.(?P<%s>[a-z]+)$' % suffix_kwarg -    ret = [] -    for urlpattern in urlpatterns: -        # Form our complementing '.format' urlpattern -        regex = urlpattern.regex.pattern.rstrip('$') + suffix_pattern -        view = urlpattern._callback or urlpattern._callback_str -        kwargs = urlpattern.default_args -        name = urlpattern.name -        # Add in both the existing and the new urlpattern -        if not suffix_required: -            ret.append(urlpattern) -        ret.append(url(regex, view, kwargs, name)) -    return ret +    return apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required) | 
