Move signal_handlers to separate files (#3356)

* Move signal_handlers to separate files

In preparation for implementing a swappable page register
the signal handlers in the ``django.apps.AppConf.ready`` method.

* Remove unused imports

* Missing empty line

* Import sorting
pull/3363/merge
Mike Dingjan 2017-02-10 17:02:45 +01:00 zatwierdzone przez GitHub
rodzic cdf4ae7528
commit da067679cd
10 zmienionych plików z 92 dodań i 61 usunięć

Wyświetl plik

@ -3,6 +3,8 @@ from __future__ import absolute_import, unicode_literals
# Imported for historical reasons
from wagtail import __semver__, __version__ # noqa
default_app_config = 'wagtail.wagtailcore.apps.WagtailCoreAppConfig'
def setup():
import warnings

Wyświetl plik

@ -7,3 +7,7 @@ class WagtailCoreAppConfig(AppConfig):
name = 'wagtail.wagtailcore'
label = 'wagtailcore'
verbose_name = "Wagtail core"
def ready(self):
from wagtail.wagtailcore.signal_handlers import register_signal_handlers
register_signal_handlers()

Wyświetl plik

@ -16,8 +16,6 @@ from django.core.handlers.wsgi import WSGIRequest
from django.core.urlresolvers import reverse
from django.db import connection, models, transaction
from django.db.models import Case, IntegerField, Q, When
from django.db.models.signals import post_delete, post_save, pre_delete
from django.dispatch.dispatcher import receiver
from django.http import Http404
from django.template.response import TemplateResponse
# Must be imported from Django so we get the new implementation of with_metaclass
@ -216,17 +214,6 @@ class Site(models.Model):
return result
# Clear the wagtail_site_root_paths from the cache whenever Site records are updated
@receiver(post_save, sender=Site)
def clear_site_root_paths_on_save(sender, instance, **kwargs):
cache.delete('wagtail_site_root_paths')
@receiver(post_delete, sender=Site)
def clear_site_root_paths_on_delete(sender, instance, **kwargs):
cache.delete('wagtail_site_root_paths')
PAGE_MODEL_CLASSES = []
@ -1385,19 +1372,6 @@ class Page(six.with_metaclass(PageBase, AbstractPage, index.Indexed, Clusterable
verbose_name_plural = _('pages')
@receiver(pre_delete, sender=Page)
def unpublish_page_before_delete(sender, instance, **kwargs):
# Make sure pages are unpublished before deleting
if instance.live:
# Don't bother to save, this page is just about to be deleted!
instance.unpublish(commit=False)
@receiver(post_delete, sender=Page)
def log_page_deletion(sender, instance, **kwargs):
logger.info("Page deleted: \"%s\" id=%d", instance.title, instance.id)
class Orderable(models.Model):
sort_order = models.IntegerField(null=True, blank=True, editable=False)
sort_order_field = 'sort_order'

Wyświetl plik

@ -0,0 +1,38 @@
from __future__ import absolute_import, unicode_literals
import logging
from django.core.cache import cache
from django.db.models.signals import post_delete, post_save, pre_delete
from wagtail.wagtailcore.models import Page, Site
logger = logging.getLogger('wagtail.core')
# Clear the wagtail_site_root_paths from the cache whenever Site records are updated.
def post_save_site_signal_handler(instance, update_fields=None, **kwargs):
cache.delete('wagtail_site_root_paths')
def post_delete_site_signal_handler(instance, **kwargs):
cache.delete('wagtail_site_root_paths')
def pre_delete_page_unpublish(sender, instance, **kwargs):
# Make sure pages are unpublished before deleting
if instance.live:
# Don't bother to save, this page is just about to be deleted!
instance.unpublish(commit=False)
def post_delete_page_log_deletion(sender, instance, **kwargs):
logger.info("Page deleted: \"%s\" id=%d", instance.title, instance.id)
def register_signal_handlers():
post_save.connect(post_save_site_signal_handler, sender=Site)
post_delete.connect(post_delete_site_signal_handler, sender=Site)
pre_delete.connect(pre_delete_page_unpublish, sender=Page)
post_delete.connect(post_delete_page_log_deletion, sender=Page)

Wyświetl plik

@ -7,3 +7,7 @@ class WagtailDocsAppConfig(AppConfig):
name = 'wagtail.wagtaildocs'
label = 'wagtaildocs'
verbose_name = "Wagtail documents"
def ready(self):
from wagtail.wagtaildocs.signal_handlers import register_signal_handlers
register_signal_handlers()

Wyświetl plik

@ -6,9 +6,7 @@ from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.db import models
from django.db.models.signals import post_delete
from django.dispatch import Signal
from django.dispatch.dispatcher import receiver
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from taggit.managers import TaggableManager
@ -110,11 +108,4 @@ def get_document_model():
return document_model
# Receive the post_delete signal and delete the file associated with the model instance.
@receiver(post_delete, sender=Document)
def document_delete(sender, instance, **kwargs):
# Pass false so FileField doesn't save the model.
instance.file.delete(False)
document_served = Signal(providing_args=['request'])

Wyświetl plik

@ -0,0 +1,15 @@
from __future__ import absolute_import, unicode_literals
from django.db.models.signals import post_delete
from wagtail.wagtaildocs.models import Document
# Receive the post_delete signal and delete the file associated with the model instance.
def post_delete_document_file_cleanup(sender, instance, **kwargs):
# Pass false so FileField doesn't save the model.
instance.file.delete(False)
def register_signal_handlers():
post_delete.connect(post_delete_document_file_cleanup, sender=Document)

Wyświetl plik

@ -9,3 +9,7 @@ class WagtailImagesAppConfig(AppConfig):
name = 'wagtail.wagtailimages'
label = 'wagtailimages'
verbose_name = "Wagtail images"
def ready(self):
from wagtail.wagtailimages.signal_handlers import register_signal_handlers
register_signal_handlers()

Wyświetl plik

@ -11,8 +11,6 @@ from django.core import checks
from django.core.files import File
from django.core.urlresolvers import reverse
from django.db import models
from django.db.models.signals import post_delete, pre_save
from django.dispatch.dispatcher import receiver
from django.forms.widgets import flatatt
from django.utils.encoding import python_2_unicode_compatible
from django.utils.functional import cached_property
@ -337,23 +335,6 @@ class Image(AbstractImage):
)
# Do smartcropping calculations when user saves an image without a focal point
@receiver(pre_save, sender=Image)
def image_feature_detection(sender, instance, **kwargs):
if getattr(settings, 'WAGTAILIMAGES_FEATURE_DETECTION_ENABLED', False):
# Make sure the image doesn't already have a focal point
if not instance.has_focal_point():
# Set the focal point
instance.set_focal_point(instance.get_suggested_focal_point())
# Receive the post_delete signal and delete the file associated with the model instance.
@receiver(post_delete, sender=Image)
def image_delete(sender, instance, **kwargs):
# Pass false so FileField doesn't save the model.
instance.file.delete(False)
class Filter(object):
"""
Represents one or more operations that can be applied to an Image to produce a rendition
@ -535,10 +516,3 @@ class Rendition(AbstractRendition):
unique_together = (
('image', 'filter_spec', 'focal_point_key'),
)
# Receive the post_delete signal and delete the file associated with the model instance.
@receiver(post_delete, sender=Rendition)
def rendition_delete(sender, instance, **kwargs):
# Pass false so FileField doesn't save the model.
instance.file.delete(False)

Wyświetl plik

@ -0,0 +1,25 @@
from __future__ import absolute_import, unicode_literals
from django.conf import settings
from django.db.models.signals import post_delete, pre_save
from wagtail.wagtailimages.models import Image, Rendition
def post_delete_file_cleanup(instance, **kwargs):
# Pass false so FileField doesn't save the model.
instance.file.delete(False)
def pre_save_image_feature_detection(instance, **kwargs):
if getattr(settings, 'WAGTAILIMAGES_FEATURE_DETECTION_ENABLED', False):
# Make sure the image doesn't already have a focal point
if not instance.has_focal_point():
# Set the focal point
instance.set_focal_point(instance.get_suggested_focal_point())
def register_signal_handlers():
pre_save.connect(pre_save_image_feature_detection, sender=Image)
post_delete.connect(post_delete_file_cleanup, sender=Image)
post_delete.connect(post_delete_file_cleanup, sender=Rendition)