##// END OF EJS Templates
Merged with default branch
neko259 -
r1532:320de1f1 merge decentral
parent child Browse files
Show More
@@ -17,7 +17,7 b" HEADER_CONTENT_TYPE = 'content-type'"
17
17
18 FILE_DOWNLOAD_CHUNK_BYTES = 200000
18 FILE_DOWNLOAD_CHUNK_BYTES = 200000
19
19
20 YOUTUBE_URL = re.compile(r'https?://((www\.)?youtube\.com/watch\?v=|youtu.be/)\w+')
20 YOUTUBE_URL = re.compile(r'https?://((www\.)?youtube\.com/watch\?v=|youtu.be/)[-\w]+')
21
21
22
22
23 class Downloader:
23 class Downloader:
@@ -1,25 +1,20 b''
1 import logging
2 import uuid
1 import uuid
3
2
4 import re
3 import re
5 from boards import settings
4 from boards import settings
6 from boards.abstracts.tripcode import Tripcode
5 from boards.abstracts.tripcode import Tripcode
7 from boards.mdx_neboard import get_parser
8 from boards.models import PostImage, Attachment, KeyPair, GlobalId
6 from boards.models import PostImage, Attachment, KeyPair, GlobalId
9 from boards.models.base import Viewable
7 from boards.models.base import Viewable
10 from boards.models.post.export import get_exporter, DIFF_TYPE_JSON
8 from boards.models.post.export import get_exporter, DIFF_TYPE_JSON
11 from boards.models.post.manager import PostManager
9 from boards.models.post.manager import PostManager
12 from boards.models.user import Notification
10 from boards.utils import cached_result
11 from boards.utils import datetime_to_epoch
13 from django.core.exceptions import ObjectDoesNotExist
12 from django.core.exceptions import ObjectDoesNotExist
14 from django.core.urlresolvers import reverse
13 from django.core.urlresolvers import reverse
15 from django.db import models
14 from django.db import models
16 from django.db.models import TextField, QuerySet
15 from django.db.models import TextField, QuerySet
17 from django.db.models.signals import pre_save, post_save, pre_delete, \
18 post_delete
19 from django.dispatch import receiver
20 from django.template.defaultfilters import truncatewords, striptags
16 from django.template.defaultfilters import truncatewords, striptags
21 from django.template.loader import render_to_string
17 from django.template.loader import render_to_string
22 from django.utils import timezone
23
18
24 CSS_CLS_HIDDEN_POST = 'hidden_post'
19 CSS_CLS_HIDDEN_POST = 'hidden_post'
25 CSS_CLS_DEAD_POST = 'dead_post'
20 CSS_CLS_DEAD_POST = 'dead_post'
@@ -114,11 +109,6 b' class Post(models.Model, Viewable):'
114 def __str__(self):
109 def __str__(self):
115 return 'P#{}/{}'.format(self.id, self.get_title())
110 return 'P#{}/{}'.format(self.id, self.get_title())
116
111
117 def get_referenced_posts(self):
118 threads = self.get_threads().all()
119 return self.referenced_posts.filter(threads__in=threads)\
120 .order_by('pub_time').distinct().all()
121
122 def get_title(self) -> str:
112 def get_title(self) -> str:
123 return self.title
113 return self.title
124
114
@@ -183,6 +173,13 b' class Post(models.Model, Viewable):'
183
173
184 return self.threads
174 return self.threads
185
175
176 def _get_cache_key(self):
177 return [datetime_to_epoch(self.last_edit_time)]
178
179 @cached_result(key_method=_get_cache_key)
180 def get_thread_count(self):
181 return self.get_threads().count()
182
186 def get_view(self, *args, **kwargs) -> str:
183 def get_view(self, *args, **kwargs) -> str:
187 """
184 """
188 Renders post's HTML view. Some of the post params can be passed over
185 Renders post's HTML view. Some of the post params can be passed over
@@ -362,12 +359,11 b' class Post(models.Model, Viewable):'
362 ID.
359 ID.
363 """
360 """
364
361
365 if self.get_threads().count() > 1:
362 if self.get_thread_count() > 1:
366 return '{}/{}'.format(self.get_thread().get_opening_post_id(), self.id)
363 return '{}/{}'.format(self.get_thread().get_opening_post_id(), self.id)
367 else:
364 else:
368 return str(self.id)
365 return str(self.id)
369
366
370
371 def connect_threads(self, opening_posts):
367 def connect_threads(self, opening_posts):
372 for opening_post in opening_posts:
368 for opening_post in opening_posts:
373 threads = opening_post.get_threads().all()
369 threads = opening_post.get_threads().all()
@@ -181,10 +181,10 b' class Thread(models.Model):'
181 """
181 """
182
182
183 query = self.multi_replies.order_by('pub_time').prefetch_related(
183 query = self.multi_replies.order_by('pub_time').prefetch_related(
184 'images', 'thread', 'threads', 'attachments')
184 'images', 'thread', 'attachments')
185 if view_fields_only:
185 if view_fields_only:
186 query = query.defer('poster_ip')
186 query = query.defer('poster_ip')
187 return query.all()
187 return query
188
188
189 def get_top_level_replies(self) -> QuerySet:
189 def get_top_level_replies(self) -> QuerySet:
190 return self.get_replies().exclude(refposts__threads__in=[self])
190 return self.get_replies().exclude(refposts__threads__in=[self])
General Comments 0
You need to be logged in to leave comments. Login now