diff options
| author | Tom Christie | 2015-02-06 14:35:06 +0000 | 
|---|---|---|
| committer | Tom Christie | 2015-02-06 14:35:06 +0000 | 
| commit | 3dff9a4fe2952cf632ca7f4cd9ecf4221059ca91 (patch) | |
| tree | 0649d42b20b875e97cb551b987644b61e7860e84 /rest_framework/routers.py | |
| parent | c06a82d0531f4cb290baacee196829c770913eaa (diff) | |
| parent | 1f996128458570a909d13f15c3d739fb12111984 (diff) | |
| download | django-rest-framework-model-serializer-caching.tar.bz2 | |
Resolve merge conflictmodel-serializer-caching
Diffstat (limited to 'rest_framework/routers.py')
| -rw-r--r-- | rest_framework/routers.py | 35 | 
1 files changed, 18 insertions, 17 deletions
| diff --git a/rest_framework/routers.py b/rest_framework/routers.py index 6e99f14d..6a4184e2 100644 --- a/rest_framework/routers.py +++ b/rest_framework/routers.py @@ -21,7 +21,7 @@ from django.conf.urls import patterns, url  from django.core.exceptions import ImproperlyConfigured  from django.core.urlresolvers import NoReverseMatch  from rest_framework import views -from rest_framework.compat import OrderedDict +from rest_framework.compat import get_resolver_match, OrderedDict  from rest_framework.response import Response  from rest_framework.reverse import reverse  from rest_framework.urlpatterns import format_suffix_patterns @@ -65,13 +65,13 @@ class BaseRouter(object):          If `base_name` is not specified, attempt to automatically determine          it from the viewset.          """ -        raise NotImplemented('get_default_base_name must be overridden') +        raise NotImplementedError('get_default_base_name must be overridden')      def get_urls(self):          """          Return a list of URL patterns, given the registered viewsets.          """ -        raise NotImplemented('get_urls must be overridden') +        raise NotImplementedError('get_urls must be overridden')      @property      def urls(self): @@ -130,19 +130,13 @@ class SimpleRouter(BaseRouter):          If `base_name` is not specified, attempt to automatically determine          it from the viewset.          """ -        # Note that `.model` attribute on views is deprecated, although we -        # enforce the deprecation on the view `get_serializer_class()` and -        # `get_queryset()` methods, rather than here. -        model_cls = getattr(viewset, 'model', None)          queryset = getattr(viewset, 'queryset', None) -        if model_cls is None and queryset is not None: -            model_cls = queryset.model -        assert model_cls, '`base_name` argument not specified, and could ' \ +        assert queryset is not None, '`base_name` argument not specified, and could ' \              'not automatically determine the name from the viewset, as ' \              'it does not have a `.queryset` attribute.' -        return model_cls._meta.object_name.lower() +        return queryset.model._meta.object_name.lower()      def get_routes(self, viewset):          """ @@ -176,23 +170,27 @@ class SimpleRouter(BaseRouter):              if isinstance(route, DynamicDetailRoute):                  # Dynamic detail routes (@detail_route decorator)                  for httpmethods, methodname in detail_routes: +                    method_kwargs = getattr(viewset, methodname).kwargs +                    url_path = method_kwargs.pop("url_path", None) or methodname                      initkwargs = route.initkwargs.copy() -                    initkwargs.update(getattr(viewset, methodname).kwargs) +                    initkwargs.update(method_kwargs)                      ret.append(Route( -                        url=replace_methodname(route.url, methodname), +                        url=replace_methodname(route.url, url_path),                          mapping=dict((httpmethod, methodname) for httpmethod in httpmethods), -                        name=replace_methodname(route.name, methodname), +                        name=replace_methodname(route.name, url_path),                          initkwargs=initkwargs,                      ))              elif isinstance(route, DynamicListRoute):                  # Dynamic list routes (@list_route decorator)                  for httpmethods, methodname in list_routes: +                    method_kwargs = getattr(viewset, methodname).kwargs +                    url_path = method_kwargs.pop("url_path", None) or methodname                      initkwargs = route.initkwargs.copy() -                    initkwargs.update(getattr(viewset, methodname).kwargs) +                    initkwargs.update(method_kwargs)                      ret.append(Route( -                        url=replace_methodname(route.url, methodname), +                        url=replace_methodname(route.url, url_path),                          mapping=dict((httpmethod, methodname) for httpmethod in httpmethods), -                        name=replace_methodname(route.name, methodname), +                        name=replace_methodname(route.name, url_path),                          initkwargs=initkwargs,                      ))              else: @@ -288,7 +286,10 @@ class DefaultRouter(SimpleRouter):              def get(self, request, *args, **kwargs):                  ret = OrderedDict() +                namespace = get_resolver_match(request).namespace                  for key, url_name in api_root_dict.items(): +                    if namespace: +                        url_name = namespace + ':' + url_name                      try:                          ret[key] = reverse(                              url_name, | 
