signals.py
92 lines
| 3.2 KiB
| text/x-python
|
PythonLexer
/ boards / signals.py
neko259
|
r1512 | import re | ||
from boards.mdx_neboard import get_parser | ||||
neko259
|
r1515 | from boards.models import Post, GlobalId | ||
neko259
|
r1588 | from boards.models.post import REGEX_NOTIFICATION, REGEX_REPLY,\ | ||
REGEX_GLOBAL_REPLY | ||||
from boards.models.post.manager import post_import_deps | ||||
neko259
|
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
|
r1544 | if not referenced_post.referenced_posts.filter( | ||
id=instance.id).exists(): | ||||
neko259
|
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
|
r1544 | except Post.DoesNotExist: | ||
neko259
|
r1512 | pass | ||
@receiver(post_save, sender=Post) | ||||
neko259
|
r1588 | @receiver(post_import_deps, sender=Post) | ||
neko259
|
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
|
r1526 | except (GlobalId.DoesNotExist, Post.DoesNotExist): | ||
neko259
|
r1515 | pass | ||
@receiver(post_save, sender=Post) | ||||
neko259
|
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
|
r1588 | @receiver(post_import_deps, sender=Post) | ||
def parse_text(instance, **kwargs): | ||||
neko259
|
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
|
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() | ||||