def register_hook(self, hook_name, fn, order=0): from wagtail import hooks hooks.register(hook_name, fn, order) try: yield finally: hooks._hooks[hook_name].remove((fn, order))
class CollectionAdminURLFinder(ModelAdminURLFinder): permission_policy = collection_permission_policy edit_url_name = "wagtailadmin_collections:edit" register_admin_url_finder(Collection, CollectionAdminURLFinder) class WorkflowAdminURLFinder(ModelAdminURLFinder): permission_policy = workflow_permission_policy edit_url_name = "wagtailadmin_workflows:edit" register_admin_url_finder(Workflow, WorkflowAdminURLFinder) class WorkflowTaskAdminURLFinder(ModelAdminURLFinder): permission_policy = task_permission_policy edit_url_name = "wagtailadmin_workflows:edit_task" register_admin_url_finder(Task, WorkflowTaskAdminURLFinder) for action_class in [ DeleteBulkAction, MoveBulkAction, PublishBulkAction, UnpublishBulkAction, ]: hooks.register("register_bulk_action", action_class)
def setUpClass(cls): hooks.register("test_hook_name", test_hook)
from .forms import FavouriteColourForm # Register one hook using decorators... @hooks.register("insert_editor_css") def editor_css(): return """<link rel="stylesheet" href="/path/to/my/custom.css">""" # And the other using old-style function calls def editor_js(): return """<script src="/path/to/my/custom.js"></script>""" hooks.register("insert_editor_js", editor_js) def block_googlebot(page, request, serve_args, serve_kwargs): if request.META.get("HTTP_USER_AGENT") == "GoogleBot": return HttpResponse("<h1>bad googlebot no cookie</h1>") hooks.register("before_serve_page", block_googlebot) class KittensMenuItem(MenuItem): def is_shown(self, request): return not request.GET.get("hide-kittens", False)
@hooks.register("register_snippet_listing_buttons") def register_snippet_listing_buttons(snippet, user, next_url=None): model = type(snippet) if user_can_edit_snippet_type(user, model): yield SnippetListingButton( _("Edit"), reverse( f"wagtailsnippets_{model._meta.app_label}_{model._meta.model_name}:edit", args=[quote(snippet.pk)], ), attrs={"aria-label": _("Edit '%(title)s'") % {"title": str(snippet)}}, priority=10, ) if user.has_perm(get_permission_name("delete", model)): yield SnippetListingButton( _("Delete"), reverse( f"wagtailsnippets_{model._meta.app_label}_{model._meta.model_name}:delete", args=[quote(snippet.pk)], ), attrs={"aria-label": _("Delete '%(title)s'") % {"title": str(snippet)}}, priority=20, classes=["no"], ) hooks.register("register_bulk_action", DeleteBulkAction)