Bits of cleanup

This commit is contained in:
Tom Christie 2013-04-26 15:09:55 +01:00
parent 8fa79a7fd3
commit 018d8b8dce
2 changed files with 21 additions and 9 deletions

View File

@ -29,7 +29,7 @@ Route = namedtuple('Route', ['url', 'mapping', 'name', 'initkwargs'])
def replace_methodname(format_string, methodname): def replace_methodname(format_string, methodname):
""" """
Partially format a format_string, swapping out any Partially format a format_string, swapping out any
'{methodname}'' or '{methodnamehyphen}'' components. '{methodname}' or '{methodnamehyphen}' components.
""" """
methodnamehyphen = methodname.replace('_', '-') methodnamehyphen = methodname.replace('_', '-')
ret = format_string ret = format_string

View File

@ -4,25 +4,33 @@ from rest_framework.utils.formatting import get_view_name
def get_breadcrumbs(url): def get_breadcrumbs(url):
"""Given a url returns a list of breadcrumbs, which are each a tuple of (name, url).""" """
Given a url returns a list of breadcrumbs, which are each a
tuple of (name, url).
"""
from rest_framework.views import APIView from rest_framework.views import APIView
def breadcrumbs_recursive(url, breadcrumbs_list, prefix, seen): def breadcrumbs_recursive(url, breadcrumbs_list, prefix, seen):
"""Add tuples of (name, url) to the breadcrumbs list, progressively chomping off parts of the url.""" """
Add tuples of (name, url) to the breadcrumbs list,
progressively chomping off parts of the url.
"""
try: try:
(view, unused_args, unused_kwargs) = resolve(url) (view, unused_args, unused_kwargs) = resolve(url)
except Exception: except Exception:
pass pass
else: else:
# Check if this is a REST framework view, and if so add it to the breadcrumbs # Check if this is a REST framework view,
# and if so add it to the breadcrumbs
if issubclass(getattr(view, 'cls', None), APIView): if issubclass(getattr(view, 'cls', None), APIView):
# Don't list the same view twice in a row. # Don't list the same view twice in a row.
# Probably an optional trailing slash. # Probably an optional trailing slash.
if not seen or seen[-1] != view: if not seen or seen[-1] != view:
suffix = getattr(view, 'suffix', None) suffix = getattr(view, 'suffix', None)
breadcrumbs_list.insert(0, (get_view_name(view.cls, suffix), prefix + url)) name = get_view_name(view.cls, suffix)
breadcrumbs_list.insert(0, (name, prefix + url))
seen.append(view) seen.append(view)
if url == '': if url == '':
@ -30,11 +38,15 @@ def get_breadcrumbs(url):
return breadcrumbs_list return breadcrumbs_list
elif url.endswith('/'): elif url.endswith('/'):
# Drop trailing slash off the end and continue to try to resolve more breadcrumbs # Drop trailing slash off the end and continue to try to
return breadcrumbs_recursive(url.rstrip('/'), breadcrumbs_list, prefix, seen) # resolve more breadcrumbs
url = url.rstrip('/')
return breadcrumbs_recursive(url, breadcrumbs_list, prefix, seen)
# Drop trailing non-slash off the end and continue to try to resolve more breadcrumbs # Drop trailing non-slash off the end and continue to try to
return breadcrumbs_recursive(url[:url.rfind('/') + 1], breadcrumbs_list, prefix, seen) # resolve more breadcrumbs
url = url[:url.rfind('/') + 1]
return breadcrumbs_recursive(url, breadcrumbs_list, prefix, seen)
prefix = get_script_prefix().rstrip('/') prefix = get_script_prefix().rstrip('/')
url = url[len(prefix):] url = url[len(prefix):]