##// END OF EJS Templates
Delete global ID when deleting post. Cache model's content XML tag into global ID
Delete global ID when deleting post. Cache model's content XML tag into global ID

File last commit:

r1520:ecaafe92 decentral
r1520:ecaafe92 decentral
Show More
signals.py
87 lines | 3.0 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
Define signals outside of the post model
r1512 from boards.models.post import REGEX_NOTIFICATION
neko259
Parse global id reflinks
r1515 from boards.models.post import REGEX_REPLY, REGEX_GLOBAL_REPLY
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)
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'])
except Post.ObjectDoesNotExist:
pass
@receiver(post_save, 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'])
except (GlobalId.ObjectDoesNotExist, Post.ObjectDoesNotExist):
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)
def preparse_text(instance, **kwargs):
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()