From 7a80c8adca770bb4289d30d9a1504722b4524f02 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 2 Jun 2014 22:53:42 +0100 Subject: [PATCH 1/3] Move the 'hooks' module from wagtailadmin to wagtailcore Conflicts: wagtail/tests/wagtail_hooks.py wagtail/wagtailadmin/views/pages.py --- wagtail/tests/wagtail_hooks.py | 2 +- wagtail/wagtailadmin/hooks.py | 40 ++----------------- .../templatetags/wagtailadmin_tags.py | 2 +- wagtail/wagtailadmin/urls.py | 2 +- wagtail/wagtailadmin/views/home.py | 2 +- wagtail/wagtailadmin/views/pages.py | 3 +- wagtail/wagtailadmin/views/userbar.py | 2 +- wagtail/wagtailcore/hooks.py | 38 ++++++++++++++++++ wagtail/wagtaildocs/wagtail_hooks.py | 2 +- wagtail/wagtailembeds/wagtail_hooks.py | 2 +- wagtail/wagtailforms/wagtail_hooks.py | 2 +- wagtail/wagtailimages/wagtail_hooks.py | 2 +- wagtail/wagtailredirects/wagtail_hooks.py | 2 +- wagtail/wagtailsearch/wagtail_hooks.py | 2 +- wagtail/wagtailsnippets/wagtail_hooks.py | 2 +- wagtail/wagtailusers/wagtail_hooks.py | 2 +- 16 files changed, 56 insertions(+), 51 deletions(-) create mode 100644 wagtail/wagtailcore/hooks.py diff --git a/wagtail/tests/wagtail_hooks.py b/wagtail/tests/wagtail_hooks.py index 5dccca666..13e3e46d2 100644 --- a/wagtail/tests/wagtail_hooks.py +++ b/wagtail/tests/wagtail_hooks.py @@ -1,4 +1,4 @@ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailcore.whitelist import attribute_rule, check_url, allow_without_attributes def editor_css(): diff --git a/wagtail/wagtailadmin/hooks.py b/wagtail/wagtailadmin/hooks.py index d299c3346..75c3a8991 100644 --- a/wagtail/wagtailadmin/hooks.py +++ b/wagtail/wagtailadmin/hooks.py @@ -1,38 +1,4 @@ -from django.conf import settings -try: - from importlib import import_module -except ImportError: - # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) - from django.utils.importlib import import_module +# The 'hooks' module is now part of wagtailcore. +# Imports are provided here for backwards compatibility -_hooks = {} - -# TODO: support 'register' as a decorator: -# @hooks.register('construct_main_menu') -# def construct_main_menu(menu_items): -# ... - - -def register(hook_name, fn): - if hook_name not in _hooks: - _hooks[hook_name] = [] - _hooks[hook_name].append(fn) - -_searched_for_hooks = False - - -def search_for_hooks(): - global _searched_for_hooks - if not _searched_for_hooks: - for app_module in settings.INSTALLED_APPS: - try: - import_module('%s.wagtail_hooks' % app_module) - except ImportError: - continue - - _searched_for_hooks = True - - -def get_hooks(hook_name): - search_for_hooks() - return _hooks.get(hook_name, []) +from wagtail.wagtailcore.hooks import register, get_hooks diff --git a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py index 9f03c7b63..4a4d4d0eb 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py +++ b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py @@ -2,9 +2,9 @@ from django import template from django.core import urlresolvers from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks from wagtail.wagtailadmin.menu import MenuItem +from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import get_navigation_menu_items, UserPagePermissionsProxy from wagtail.wagtailcore.utils import camelcase_to_underscore diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py index 35bb63d5e..7ef2eb110 100644 --- a/wagtail/wagtailadmin/urls.py +++ b/wagtail/wagtailadmin/urls.py @@ -3,7 +3,7 @@ from django.conf import settings from wagtail.wagtailadmin.forms import LoginForm, PasswordResetForm from wagtail.wagtailadmin.views import account, chooser, home, pages, tags, userbar -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks urlpatterns = [ diff --git a/wagtail/wagtailadmin/views/home.py b/wagtail/wagtailadmin/views/home.py index 24800eefc..e68ed0cbf 100644 --- a/wagtail/wagtailadmin/views/home.py +++ b/wagtail/wagtailadmin/views/home.py @@ -4,9 +4,9 @@ from django.conf import settings from django.template import RequestContext from django.template.loader import render_to_string -from wagtail.wagtailadmin import hooks from wagtail.wagtailadmin.forms import SearchForm +from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import Page, PageRevision, UserPagePermissionsProxy from wagtail.wagtaildocs.models import Document diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 1bc13c5f0..fd0c97b02 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -11,8 +11,9 @@ from django.views.decorators.vary import vary_on_headers from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList from wagtail.wagtailadmin.forms import SearchForm -from wagtail.wagtailadmin import tasks, hooks, signals +from wagtail.wagtailadmin import tasks, signals +from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import Page, PageRevision from wagtail.wagtailcore.signals import page_published diff --git a/wagtail/wagtailadmin/views/userbar.py b/wagtail/wagtailadmin/views/userbar.py index 2b3749da0..c41b5aed1 100644 --- a/wagtail/wagtailadmin/views/userbar.py +++ b/wagtail/wagtailadmin/views/userbar.py @@ -2,7 +2,7 @@ from django.shortcuts import render from django.contrib.auth.decorators import permission_required from wagtail.wagtailadmin.userbar import EditPageItem, AddPageItem, ApproveModerationEditPageItem, RejectModerationEditPageItem -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import Page, PageRevision diff --git a/wagtail/wagtailcore/hooks.py b/wagtail/wagtailcore/hooks.py new file mode 100644 index 000000000..d299c3346 --- /dev/null +++ b/wagtail/wagtailcore/hooks.py @@ -0,0 +1,38 @@ +from django.conf import settings +try: + from importlib import import_module +except ImportError: + # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) + from django.utils.importlib import import_module + +_hooks = {} + +# TODO: support 'register' as a decorator: +# @hooks.register('construct_main_menu') +# def construct_main_menu(menu_items): +# ... + + +def register(hook_name, fn): + if hook_name not in _hooks: + _hooks[hook_name] = [] + _hooks[hook_name].append(fn) + +_searched_for_hooks = False + + +def search_for_hooks(): + global _searched_for_hooks + if not _searched_for_hooks: + for app_module in settings.INSTALLED_APPS: + try: + import_module('%s.wagtail_hooks' % app_module) + except ImportError: + continue + + _searched_for_hooks = True + + +def get_hooks(hook_name): + search_for_hooks() + return _hooks.get(hook_name, []) diff --git a/wagtail/wagtaildocs/wagtail_hooks.py b/wagtail/wagtaildocs/wagtail_hooks.py index 3ab1ad9bf..a6e00f8db 100644 --- a/wagtail/wagtaildocs/wagtail_hooks.py +++ b/wagtail/wagtaildocs/wagtail_hooks.py @@ -4,7 +4,7 @@ from django.core import urlresolvers from django.utils.html import format_html, format_html_join from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem from wagtail.wagtaildocs import admin_urls diff --git a/wagtail/wagtailembeds/wagtail_hooks.py b/wagtail/wagtailembeds/wagtail_hooks.py index 89c5e66a5..f9ea650a6 100644 --- a/wagtail/wagtailembeds/wagtail_hooks.py +++ b/wagtail/wagtailembeds/wagtail_hooks.py @@ -3,7 +3,7 @@ from django.conf.urls import include, url from django.core import urlresolvers from django.utils.html import format_html -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailembeds import urls diff --git a/wagtail/wagtailforms/wagtail_hooks.py b/wagtail/wagtailforms/wagtail_hooks.py index 277fc6e73..c584a5c4e 100644 --- a/wagtail/wagtailforms/wagtail_hooks.py +++ b/wagtail/wagtailforms/wagtail_hooks.py @@ -3,7 +3,7 @@ from django.conf import settings from django.conf.urls import include, url from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem from wagtail.wagtailforms import urls diff --git a/wagtail/wagtailimages/wagtail_hooks.py b/wagtail/wagtailimages/wagtail_hooks.py index 51492d404..611e18990 100644 --- a/wagtail/wagtailimages/wagtail_hooks.py +++ b/wagtail/wagtailimages/wagtail_hooks.py @@ -4,7 +4,7 @@ from django.core import urlresolvers from django.utils.html import format_html, format_html_join from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem from wagtail.wagtailimages import urls diff --git a/wagtail/wagtailredirects/wagtail_hooks.py b/wagtail/wagtailredirects/wagtail_hooks.py index 4dbe1a028..6ebec475b 100644 --- a/wagtail/wagtailredirects/wagtail_hooks.py +++ b/wagtail/wagtailredirects/wagtail_hooks.py @@ -2,7 +2,7 @@ from django.core import urlresolvers from django.conf.urls import include, url from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailredirects import urls from wagtail.wagtailadmin.menu import MenuItem diff --git a/wagtail/wagtailsearch/wagtail_hooks.py b/wagtail/wagtailsearch/wagtail_hooks.py index 1a656c0ef..3ca4601b3 100644 --- a/wagtail/wagtailsearch/wagtail_hooks.py +++ b/wagtail/wagtailsearch/wagtail_hooks.py @@ -2,7 +2,7 @@ from django.core import urlresolvers from django.conf.urls import include, url from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailsearch.urls import admin as admin_urls from wagtail.wagtailadmin.menu import MenuItem diff --git a/wagtail/wagtailsnippets/wagtail_hooks.py b/wagtail/wagtailsnippets/wagtail_hooks.py index 3745d1a51..501f29b31 100644 --- a/wagtail/wagtailsnippets/wagtail_hooks.py +++ b/wagtail/wagtailsnippets/wagtail_hooks.py @@ -4,7 +4,7 @@ from django.core import urlresolvers from django.utils.html import format_html from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem from wagtail.wagtailsnippets import urls diff --git a/wagtail/wagtailusers/wagtail_hooks.py b/wagtail/wagtailusers/wagtail_hooks.py index d006a4d93..6637430e1 100644 --- a/wagtail/wagtailusers/wagtail_hooks.py +++ b/wagtail/wagtailusers/wagtail_hooks.py @@ -2,7 +2,7 @@ from django.conf.urls import include, url from django.core import urlresolvers from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem from wagtail.wagtailusers import urls From 618dd96a88b9cb98c9f45ee2f63520bb472d6dc2 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 2 Jul 2014 20:02:25 +0100 Subject: [PATCH 2/3] update wagtailstyleguide and wagtailcore.rich_text to import hooks from wagtailcore rather than wagtailadmin --- wagtail/contrib/wagtailstyleguide/wagtail_hooks.py | 2 +- wagtail/wagtailcore/rich_text.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/contrib/wagtailstyleguide/wagtail_hooks.py b/wagtail/contrib/wagtailstyleguide/wagtail_hooks.py index ae2989be9..c2899b38e 100644 --- a/wagtail/contrib/wagtailstyleguide/wagtail_hooks.py +++ b/wagtail/contrib/wagtailstyleguide/wagtail_hooks.py @@ -4,7 +4,7 @@ from django.core import urlresolvers from django.utils.html import format_html, format_html_join from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem from wagtail.wagtailimages import urls diff --git a/wagtail/wagtailcore/rich_text.py b/wagtail/wagtailcore/rich_text.py index c5229f747..bd218d01d 100644 --- a/wagtail/wagtailcore/rich_text.py +++ b/wagtail/wagtailcore/rich_text.py @@ -13,7 +13,7 @@ from wagtail.wagtaildocs.models import Document from wagtail.wagtailimages.models import get_image_model from wagtail.wagtailimages.formats import get_image_format -from wagtail.wagtailadmin import hooks +from wagtail.wagtailcore import hooks # Define a set of 'embed handlers' and 'link handlers'. These handle the translation From 92dc6add90c8c1b85d75a0477ac047671ced4819 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 2 Jul 2014 20:04:06 +0100 Subject: [PATCH 3/3] update hook examples in docs to import from wagtailcore, not wagtailadmin --- docs/editing_api.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/editing_api.rst b/docs/editing_api.rst index 609237e76..5113eb3b8 100644 --- a/docs/editing_api.rst +++ b/docs/editing_api.rst @@ -396,7 +396,7 @@ Registering functions with a Wagtail hook follows the following pattern: .. code-block:: python - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks hooks.register('hook', function) @@ -409,7 +409,7 @@ Where ``'hook'`` is one of the following hook strings and ``function`` is a func .. code-block:: python - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks class UserbarPuppyLinkItem(object): def render(self, request): @@ -430,7 +430,7 @@ Where ``'hook'`` is one of the following hook strings and ``function`` is a func from django.utils.safestring import mark_safe - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks class WelcomePanel(object): order = 50 @@ -456,7 +456,7 @@ Where ``'hook'`` is one of the following hook strings and ``function`` is a func from django.http import HttpResponse - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks def do_after_page_create(request, page): return HttpResponse("Congrats on making content!", content_type="text/plain") @@ -484,7 +484,7 @@ Where ``'hook'`` is one of the following hook strings and ``function`` is a func from django.http import HttpResponse from django.conf.urls import url - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks def admin_view( request ): return HttpResponse( \ @@ -506,7 +506,7 @@ Where ``'hook'`` is one of the following hook strings and ``function`` is a func from django.core.urlresolvers import reverse - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem def construct_main_menu(request, menu_items): @@ -526,7 +526,7 @@ Where ``'hook'`` is one of the following hook strings and ``function`` is a func from django.utils.html import format_html, format_html_join from django.conf import settings - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks def editor_js(): js_files = [ @@ -554,7 +554,7 @@ Where ``'hook'`` is one of the following hook strings and ``function`` is a func from django.utils.html import format_html from django.conf import settings - from wagtail.wagtailadmin import hooks + from wagtail.wagtailcore import hooks def editor_css(): return format_html('