def test_expired_page_will_be_unpublished(self):
        # Connect a mock signal handler to page_unpublished signal
        signal_fired = [False]
        signal_page = [None]

        def page_unpublished_handler(sender, instance, **kwargs):
            signal_fired[0] = True
            signal_page[0] = instance

        page_unpublished.connect(page_unpublished_handler)

        page = SimplePage(
            title="Hello world!",
            slug="hello-world",
            live=True,
            has_unpublished_changes=False,
            expire_at=timezone.now() - timedelta(days=1),
        )
        self.root_page.add_child(instance=page)

        p = Page.objects.get(slug='hello-world')
        self.assertTrue(p.live)

        management.call_command('publish_scheduled_pages')

        p = Page.objects.get(slug='hello-world')
        self.assertFalse(p.live)
        self.assertTrue(p.has_unpublished_changes)
        self.assertTrue(p.expired)

        # Check that the page_published signal was fired
        self.assertTrue(signal_fired[0])
        self.assertEqual(signal_page[0], page)
        self.assertEqual(signal_page[0], signal_page[0].specific)
    def test_expired_page_will_be_unpublished(self):
        # Connect a mock signal handler to page_unpublished signal
        signal_fired = [False]
        signal_page = [None]
        def page_unpublished_handler(sender, instance, **kwargs):
            signal_fired[0] = True
            signal_page[0] = instance
        page_unpublished.connect(page_unpublished_handler)


        page = SimplePage(
            title="Hello world!",
            slug="hello-world",
            live=True,
            expire_at=timezone.now() - timedelta(days=1),
        )
        self.root_page.add_child(instance=page)

        p = Page.objects.get(slug='hello-world')
        self.assertTrue(p.live)

        management.call_command('publish_scheduled_pages')

        p = Page.objects.get(slug='hello-world')
        self.assertFalse(p.live)
        self.assertTrue(p.expired)

        # Check that the page_published signal was fired
        self.assertTrue(signal_fired[0])
        self.assertEqual(signal_page[0], page)
        self.assertEqual(signal_page[0], signal_page[0].specific)
Example #3
0
    def test_unpublish(self):
        # set up a listener for the unpublish signal
        unpublish_signals_fired = []

        def page_unpublished_handler(sender, instance, **kwargs):
            unpublish_signals_fired.append((sender, instance))

        page_unpublished.connect(page_unpublished_handler)

        events_index = Page.objects.get(url_path='/home/events/')
        events_index.get_children().unpublish()

        # Previously-live children of event index should now be non-live
        christmas = EventPage.objects.get(url_path='/home/events/christmas/')
        saint_patrick = SingleEventPage.objects.get(url_path='/home/events/saint-patrick/')
        unpublished_event = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')

        self.assertFalse(christmas.live)
        self.assertFalse(saint_patrick.live)

        # Check that a signal was fired for each unpublished page
        self.assertIn((EventPage, christmas), unpublish_signals_fired)
        self.assertIn((SingleEventPage, saint_patrick), unpublish_signals_fired)

        # a signal should not be fired for pages that were in the queryset
        # but already unpublished
        self.assertNotIn((EventPage, unpublished_event), unpublish_signals_fired)
Example #4
0
def register_signal_handlers():
    # Get list of models that are page types
    indexed_models = [model for model in models.get_models() if issubclass(model, Page)]

    # Loop through list and register signal handlers for each one
    for model in indexed_models:
        page_published.connect(page_published_signal_handler, sender=model)
        page_unpublished.connect(page_unpublished_signal_handler, sender=model)
Example #5
0
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')
Example #6
0
def register_signal_handlers():
    # Get list of models that are page types
    Page = apps.get_model('wagtailcore', 'Page')
    indexed_models = [model for model in apps.get_models() if issubclass(model, Page)]

    # Loop through list and register signal handlers for each one
    for model in indexed_models:
        page_published.connect(page_published_signal_handler, sender=model)
        page_unpublished.connect(page_unpublished_signal_handler, sender=model)
Example #7
0
def register_signal_handlers():
    Image = get_image_model()

    for model in PAGE_MODEL_CLASSES:
        page_published.connect(purge_page_from_cache, sender=model)
        page_unpublished.connect(purge_page_from_cache, sender=model)

    post_save.connect(purge_image_from_cache, sender=Image)
    post_delete.connect(purge_image_from_cache, sender=Image)
    post_save.connect(purge_document_from_cache, sender=Document)
    post_delete.connect(purge_document_from_cache, sender=Document)
Example #8
0
def register_signal_handlers():
    Image = get_image_model()

    for model in PAGE_MODEL_CLASSES:
        page_published.connect(purge_page_from_cache, sender=model)
        page_unpublished.connect(purge_page_from_cache, sender=model)

    post_save.connect(purge_image_from_cache, sender=Image)
    post_delete.connect(purge_image_from_cache, sender=Image)
    post_save.connect(purge_document_from_cache, sender=Document)
    post_delete.connect(purge_document_from_cache, sender=Document)
Example #9
0
	def get_current(self):
		current = PageRevision.objects.get(pk=self.page_revision.id).page.get_latest_revision()
		try:
			current_screenshot = PageRevisionScreenshot.objects.get(page_revision=current.pk)
			if current.id != self.page_revision.id:
				return True, current_screenshot
			else:
				return False, current_screenshot
		except ObjectDoesNotExist:
			return False, current

	def get_previous(self):
		page = 	PageRevision.objects.get(pk=self.page_revision.id).page
		revisions = page.revisions.order_by('-created_at')
		aslist = list(revisions.values_list('id', flat=True))
		index = aslist.index(self.page_revision.id)
		if index < len(aslist)-1:
			previous = aslist[index+1]
			try:
				return True, PageRevisionScreenshot.objects.get(page_revision=previous)
			except ObjectDoesNotExist:
				return False, self
		else:
			return False, self

# Trigger notification every time page is published
page_published.connect(screenshot.process_page_published_async)

page_unpublished.connect(screenshot.process_page_unpublished_async)

Example #10
0

# Sets all the revisions for a page's attribute to False when it's called
def update_all_revisions(instance, attr):
    for revision in instance.revisions.all():
        content = json.loads(revision.content_json)
        if content[attr]:
            content[attr] = False
            revision.content_json = unicode(json.dumps(content), 'utf-8')
            revision.save()


def unshare_all_revisions(sender, **kwargs):
    update_all_revisions(kwargs['instance'], 'shared')


def unpublish_all_revisions(sender, **kwargs):
    update_all_revisions(kwargs['instance'], 'live')


def configure_page_and_revision(sender, **kwargs):
    from .wagtail_hooks import share, configure_page_revision, flush_akamai
    share(page=kwargs['instance'], is_sharing=False, is_live=True)
    configure_page_revision(page=kwargs['instance'], is_sharing=False, is_live=True)
    flush_akamai(page=kwargs['instance'])


page_unshared.connect(unshare_all_revisions)
page_unpublished.connect(unpublish_all_revisions)
page_published.connect(configure_page_and_revision)
Example #11
0
def register_signal_handlers():
    if getattr(settings, 'WEBHOOKS_PAGE_PUBLISHED', None):
        page_published.connect(page_published_signal_handler)

    if getattr(settings, 'WEBHOOKS_PAGE_UNPUBLISHED', None):
        page_unpublished.connect(page_unpublished_signal_handler)
Example #12
0
def connect_page_signals_handlers():
    page_published.connect(page_pub_receiver, sender=JournalPage)
    page_unpublished.connect(page_unpub_receiver, sender=JournalPage)
    page_published.connect(about_page_pub_receiver, sender=JournalAboutPage)
    page_unpublished.connect(about_page_unpub_receiver,
                             sender=JournalAboutPage)
Example #13
0
# Sets all the revisions for a page's attribute to False when it's called
def update_all_revisions(instance, attr):
    for revision in instance.revisions.all():
        content = json.loads(revision.content_json)
        if content[attr]:
            content[attr] = False
            revision.content_json = unicode(json.dumps(content), 'utf-8')
            revision.save()


def unshare_all_revisions(sender, **kwargs):
    update_all_revisions(kwargs['instance'], 'shared')


def unpublish_all_revisions(sender, **kwargs):
    update_all_revisions(kwargs['instance'], 'live')


def configure_page_and_revision(sender, **kwargs):
    from .wagtail_hooks import share, configure_page_revision, flush_akamai
    share(page=kwargs['instance'], is_sharing=False, is_live=True)
    configure_page_revision(page=kwargs['instance'],
                            is_sharing=False,
                            is_live=True)
    flush_akamai(page=kwargs['instance'], is_live=True)


page_unshared.connect(unshare_all_revisions)
page_unpublished.connect(unpublish_all_revisions)
page_published.connect(configure_page_and_revision)
Example #14
0
from wagtail.wagtailcore.signals import page_published, page_unpublished
from wagtail.contrib.wagtailfrontendcache.utils import purge_page_from_cache

from blog.models import BlogIndexPage, BlogPost


def invalidate_frontend_cache_for_blog_index_page(sender, instance, **kwargs):
    """Invalidate the frontend cache for the parent BlogIndexPage of a BlogPost."""
    blog_post = instance
    # Recommended way to get parent page from https://github.com/wagtail/wagtail/issues/2779#issuecomment-228472829
    blog_index_page = blog_post.get_parent()
    if blog_index_page:
        purge_page_from_cache(blog_index_page)


page_published.connect(
    invalidate_frontend_cache_for_blog_index_page,
    sender=BlogPost
)
page_unpublished.connect(
    invalidate_frontend_cache_for_blog_index_page,
    sender=BlogPost
)
Example #15
0
def register_signal_handlers():
    page_published.connect(handle_publish,
                           dispatch_uid='wagtailbakery_page_published')
    page_unpublished.connect(handle_unpublish,
                             dispatch_uid='wagtailbakery_page_unpublished')