##// END OF EJS Templates
Added post versions to list request, changed list request to include additional attributes
Added post versions to list request, changed list request to include additional attributes

File last commit:

r1544:334c97d6 decentral
r1571:7712a723 default
Show More
signals.py
89 lines | 3.1 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)
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
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)
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()