-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathsignal_handlers.py
44 lines (39 loc) · 1.43 KB
/
signal_handlers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from wagtail.wagtailcore.signals import page_published, page_unpublished
from models import BakeryModel
def rebuild_parents(instance):
page = instance.get_parent()
if page:
page = page.specific
while page and page.live and (not page.is_root()):
if hasattr(page, 'build'):
page.build()
page = page.get_parent()
if page:
page = page.specific
def handle_publish(sender, instance, **kwargs):
"""
Receives page_published signal to build page
"""
BakeryModel.init_build_checks()
if hasattr(instance, 'build'):
instance.build()
num_revisions = instance.revisions.count()
if (num_revisions > 1) and (not instance.is_root()):
prior_page = instance.revisions.order_by('-id')[1].as_page_object().specific
if instance.slug != prior_page.slug:
prior_page.unbuild()
rebuild_parents(instance)
def handle_unpublish(sender, instance, **kwargs):
"""
Receives page_unpublished signal to unbuild page
"""
BakeryModel.init_build_checks()
if hasattr(instance, 'unbuild'):
instance.unbuild()
rebuild_parents(instance)
def register_signal_handlers():
"""
Connect handlers to page publish signals
"""
page_published.connect(handle_publish, dispatch_uid='wagtailbakery_page_published')
page_unpublished.connect(handle_unpublish, dispatch_uid='wagtailbakery_page_unpublished')