diff --git a/wagtail/wagtailadmin/urls/__init__.py b/wagtail/wagtailadmin/urls/__init__.py index 089a4eddb..31a80d8d9 100644 --- a/wagtail/wagtailadmin/urls/__init__.py +++ b/wagtail/wagtailadmin/urls/__init__.py @@ -5,16 +5,12 @@ from wagtail.wagtailadmin.urls import pages as wagtailadmin_pages_urls from wagtail.wagtailadmin.urls import collections as wagtailadmin_collections_urls from wagtail.wagtailadmin.urls import password_reset as wagtailadmin_password_reset_urls from wagtail.wagtailadmin.views import account, chooser, home, pages, tags, userbar -from wagtail.wagtailadmin.viewsets import register_viewsets from wagtail.wagtailadmin.api import urls as api_urls from wagtail.wagtailcore import hooks from wagtail.utils.urlpatterns import decorate_urlpatterns from wagtail.wagtailadmin.decorators import require_admin_access -register_viewsets() - - urlpatterns = [ url(r'^$', home.home, name='wagtailadmin_home'), diff --git a/wagtail/wagtailadmin/viewsets/__init__.py b/wagtail/wagtailadmin/viewsets/__init__.py index dd6e30afe..617df9db5 100644 --- a/wagtail/wagtailadmin/viewsets/__init__.py +++ b/wagtail/wagtailadmin/viewsets/__init__.py @@ -3,19 +3,32 @@ from django.conf.urls import url, include from wagtail.wagtailcore import hooks -def register_viewsets(): - for fn in hooks.get_hooks('register_admin_viewset'): - viewset = fn() +class ViewSetRegistry(object): + def __init__(self): + self.viewsets = [] - if viewset: - urlpatterns = viewset.get_urlpatterns() + def populate(self): + for fn in hooks.get_hooks('register_admin_viewset'): + viewset = fn() + self.register(viewset) - if urlpatterns: - @hooks.register('register_admin_urls') - def register_admin_urls(): - return [ - url( - r'^{}/'.format(viewset.name), - include(urlpatterns, app_name=viewset.name, namespace=viewset.name) - ), - ] + def register(self, viewset_cls): + self.viewsets.append(viewset_cls) + return viewset_cls + + def get_urlpatterns(self): + urlpatterns = [] + + for viewset in self.viewsets: + vs_urlpatterns = viewset.get_urlpatterns() + + if vs_urlpatterns: + urlpatterns.append(url( + r'^{}/'.format(viewset.name), + include(vs_urlpatterns, namespace=viewset.name) + )) + + return urlpatterns + + +viewsets = ViewSetRegistry() diff --git a/wagtail/wagtailadmin/wagtail_hooks.py b/wagtail/wagtailadmin/wagtail_hooks.py index 9b43baf50..605009e06 100644 --- a/wagtail/wagtailadmin/wagtail_hooks.py +++ b/wagtail/wagtailadmin/wagtail_hooks.py @@ -8,6 +8,7 @@ from wagtail.wagtailadmin.menu import MenuItem, SubmenuMenuItem, settings_menu from wagtail.wagtailadmin.navigation import get_explorable_root_page from wagtail.wagtailadmin.search import SearchArea from wagtail.wagtailadmin.utils import user_has_any_page_permission +from wagtail.wagtailadmin.viewsets import viewsets from wagtail.wagtailadmin.widgets import Button, ButtonWithDropdownFromHook, PageListingButton from wagtail.wagtailcore import hooks from wagtail.wagtailcore.permissions import collection_permission_policy @@ -170,3 +171,9 @@ def page_listing_more_buttons(page, page_perms, is_parent=False): attrs={'title': _("View revision history for '{title}'").format(title=page.get_admin_display_title())}, priority=50 ) + + +@hooks.register('register_admin_urls') +def register_viewsets_urls(): + viewsets.populate() + return viewsets.get_urlpatterns()