src/cm/denorm_engine.py
author Simon Descarpentries <sid@sopinspace.com>
Mon, 21 Oct 2013 16:37:07 +0200
changeset 553 bf26fb47a14c
parent 407 2d14a80716e2
permissions -rw-r--r--
To allow scrolling in Safari mobile, we set the content of text_view_comments frame in a jQuery UI layout. So the automated scrolling operations in c_sync.js must be adjustable to the right part to scroll. Also, if a comment have to be shown outside of the current viewport, we scroll the correct part to that viewport and then set the comment top Y offset to juste what it needs to avoid the "Add comment" button after scrolling operation. If not in Safari mobile, we add an offset here to avoid comment to display under the "Add comment" button.
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()