##// END OF EJS Templates
Added support for partial import: when the reply is imported but the original post is not, the reply will be connected after the original post is ready
Added support for partial import: when the reply is imported but the original post is not, the reply will be connected after the original post is ready

File last commit:

r1588:b69fb396 default
r1588:b69fb396 default
Show More
signals.py
92 lines | 3.2 KiB | text/x-python | PythonLexer
neko259
Define signals outside of the post model
r1512 import re
from boards.mdx_neboard import get_parser
neko259
Parse global id reflinks
r1515 from boards.models import Post, GlobalId
neko259
Added support for partial import: when the reply is imported but the original post is not, the reply will be connected after the original post is ready
r1588 from boards.models.post import REGEX_NOTIFICATION, REGEX_REPLY,\
REGEX_GLOBAL_REPLY
from boards.models.post.manager import post_import_deps
neko259
Define signals outside of the post model
r1512 from boards.models.user import Notification
from django.db.models.signals import post_save, pre_save, pre_delete, \
post_delete
from django.dispatch import receiver
from django.utils import timezone
@receiver(post_save, sender=Post)
def connect_replies(instance, **kwargs):
for reply_number in re.finditer(REGEX_REPLY, instance.get_raw_text()):
post_id = reply_number.group(1)
try:
referenced_post = Post.objects.get(id=post_id)
neko259
Fixed merge issue
r1544 if not referenced_post.referenced_posts.filter(
id=instance.id).exists():
neko259
Merged with default branch
r1543 referenced_post.referenced_posts.add(instance)
referenced_post.last_edit_time = instance.pub_time
referenced_post.build_refmap()
referenced_post.save(update_fields=['refmap', 'last_edit_time'])
neko259
Fixed merge issue
r1544 except Post.DoesNotExist:
neko259
Define signals outside of the post model
r1512 pass
@receiver(post_save, sender=Post)
neko259
Added support for partial import: when the reply is imported but the original post is not, the reply will be connected after the original post is ready
r1588 @receiver(post_import_deps, sender=Post)
neko259
Parse global id reflinks
r1515 def connect_global_replies(instance, **kwargs):
for reply_number in re.finditer(REGEX_GLOBAL_REPLY, instance.get_raw_text()):
key_type = reply_number.group(1)
key = reply_number.group(2)
local_id = reply_number.group(3)
try:
global_id = GlobalId.objects.get(key_type=key_type, key=key,
local_id=local_id)
referenced_post = Post.objects.get(global_id=global_id)
referenced_post.referenced_posts.add(instance)
referenced_post.last_edit_time = instance.pub_time
referenced_post.build_refmap()
referenced_post.save(update_fields=['refmap', 'last_edit_time'])
neko259
Fixed signals
r1526 except (GlobalId.DoesNotExist, Post.DoesNotExist):
neko259
Parse global id reflinks
r1515 pass
@receiver(post_save, sender=Post)
neko259
Define signals outside of the post model
r1512 def connect_notifications(instance, **kwargs):
for reply_number in re.finditer(REGEX_NOTIFICATION, instance.get_raw_text()):
user_name = reply_number.group(1).lower()
Notification.objects.get_or_create(name=user_name, post=instance)
@receiver(pre_save, sender=Post)
neko259
Added support for partial import: when the reply is imported but the original post is not, the reply will be connected after the original post is ready
r1588 @receiver(post_import_deps, sender=Post)
def parse_text(instance, **kwargs):
neko259
Define signals outside of the post model
r1512 instance._text_rendered = get_parser().parse(instance.get_raw_text())
@receiver(pre_delete, sender=Post)
def delete_images(instance, **kwargs):
for image in instance.images.all():
image_refs_count = image.post_images.count()
if image_refs_count == 1:
image.delete()
@receiver(pre_delete, sender=Post)
def delete_attachments(instance, **kwargs):
for attachment in instance.attachments.all():
attachment_refs_count = attachment.attachment_posts.count()
if attachment_refs_count == 1:
attachment.delete()
@receiver(post_delete, sender=Post)
def update_thread_on_delete(instance, **kwargs):
thread = instance.get_thread()
thread.last_edit_time = timezone.now()
thread.save()
neko259
Delete global ID when deleting post. Cache model's content XML tag into global ID
r1520
@receiver(post_delete, sender=Post)
def delete_global_id(instance, **kwargs):
if instance.global_id and instance.global_id.id:
instance.global_id.delete()