src/cm/denorm_engine.py
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 407 2d14a80716e2
permissions -rw-r--r--
Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
# This is the denormalisation engine
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
# his goal is to leverage on django's signal to update
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
# denormalized fields
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
# this should be used with beanstalk or starling
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
# python client (there is 2) http://github.com/earl/beanstalkc/tree/master
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
import logging
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
from django.db.models import signals
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
from cm.models import TextVersion, Text
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
# Text denormalisation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
def update_text_from_last_version(sender, **kwargs):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
    Update text's last version
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
    text_version = kwargs['instance']
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
    try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
        text = text_version.text
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        text.update_denorm_fields()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    except Text.DoesNotExist:
278
3d25afbd78ff fix unit tests
raph
parents: 0
diff changeset
    21
        pass
3d25afbd78ff fix unit tests
raph
parents: 0
diff changeset
    22
        #logging.warning('No text found for text_version: %i' %text_version.id)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
        
407
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    24
# GIB when deleting last revision, do not delete related text
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    25
def delete_last_version (sender, instance, signal, *args, **kwargs):
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    26
  if instance.id == instance.text.last_text_version_id:
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    27
    previous = instance.get_previous_version()
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    28
    if previous:
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    29
      instance.text.last_text_version_id = previous.id
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    30
      instance.text.save()
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
def connect_all():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
    # text updated by text_version
407
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    34
    signals.pre_delete.connect(delete_last_version, sender=TextVersion)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
    signals.post_save.connect(update_text_from_last_version, sender=TextVersion)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    signals.post_delete.connect(update_text_from_last_version, sender=TextVersion)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
407
2d14a80716e2 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version.
gibus
parents: 278
diff changeset
    39
connect_all()