##// END OF EJS Templates
Start using cached properties (not everywhere yet, still)
neko259 -
r948:a37f5ca1 default
parent child Browse files
Show More
@@ -5,6 +5,7 b' import re'
5 5
6 6 from adjacent import Client
7 7 from django.core.cache import cache
8 from django.utils.functional import cached_property
8 9 from django.core.urlresolvers import reverse
9 10 from django.db import models, transaction
10 11 from django.db.models import TextField
@@ -153,7 +154,7 b' class PostManager(models.Manager):'
153 154 referenced_post.build_refmap()
154 155 referenced_post.save(update_fields=['refmap', 'last_edit_time'])
155 156
156 referenced_thread = referenced_post.get_thread()
157 referenced_thread = referenced_post.thread
157 158 referenced_thread.last_edit_time = post.pub_time
158 159 referenced_thread.save(update_fields=['last_edit_time'])
159 160
@@ -271,13 +272,13 b' class Post(models.Model, Viewable):'
271 272 Checks if this is an opening post or just a reply.
272 273 """
273 274
274 return self.get_thread().get_opening_post_id() == self.id
275 return self.thread.get_opening_post_id() == self.id
275 276
276 277 @transaction.atomic
277 278 def add_tag(self, tag):
278 279 edit_time = timezone.now()
279 280
280 thread = self.get_thread()
281 thread = get_thread
281 282 thread.add_tag(tag)
282 283 self.last_edit_time = edit_time
283 284 self.save(update_fields=['last_edit_time'])
@@ -295,7 +296,7 b' class Post(models.Model, Viewable):'
295 296
296 297 if not link:
297 298 if not thread:
298 thread = self.get_thread()
299 thread = self.thread
299 300
300 301 opening_id = thread.get_opening_post_id()
301 302
@@ -309,6 +310,11 b' class Post(models.Model, Viewable):'
309 310
310 311 return link
311 312
313 @cached_property
314 def thread(self):
315 return self.thread_new
316
317 # TODO Deprecated, remove this and use cached property
312 318 def get_thread(self) -> Thread:
313 319 """
314 320 Gets post's thread.
@@ -328,7 +334,7 b' class Post(models.Model, Viewable):'
328 334 """
329 335
330 336 is_opening = kwargs.get(PARAMETER_IS_OPENING, self.is_opening())
331 thread = kwargs.get(PARAMETER_THREAD, self.get_thread())
337 thread = kwargs.get(PARAMETER_THREAD, self.thread)
332 338 can_bump = kwargs.get(PARAMETER_BUMPABLE, thread.can_bump())
333 339
334 340 if is_opening:
@@ -365,9 +371,9 b' class Post(models.Model, Viewable):'
365 371 image.delete()
366 372
367 373 if self.is_opening():
368 self.get_thread().delete()
374 self.thread.delete()
369 375 else:
370 thread = self.get_thread()
376 thread = self.thread
371 377 thread.last_edit_time = timezone.now()
372 378 thread.save()
373 379
@@ -415,7 +421,7 b' class Post(models.Model, Viewable):'
415 421
416 422 client = Client()
417 423
418 thread = self.get_thread()
424 thread = self.thread
419 425 thread_id = thread.id
420 426 channel_name = WS_CHANNEL_THREAD + str(thread.get_opening_post_id())
421 427 client.publish(channel_name, {
@@ -1,8 +1,8 b''
1 1 import logging
2 2 from django.db.models import Count, Sum
3 3 from django.utils import timezone
4 from django.core.cache import cache
5 4 from django.db import models
5 from django.utils.functional import cached_property
6 6 from boards import settings
7 7
8 8 __author__ = 'neko259'
@@ -11,9 +11,6 b' from boards import settings'
11 11 logger = logging.getLogger(__name__)
12 12
13 13
14 CACHE_KEY_OPENING_POST = 'opening_post_id'
15
16
17 14 class ThreadManager(models.Manager):
18 15 def process_oldest_threads(self):
19 16 """
@@ -137,30 +134,24 b' class Thread(models.Model):'
137 134
138 135 self.tags.add(tag)
139 136
140 def get_opening_post(self, only_id=False):
137 @cached_property
138 def opening_post(self):
139 return self.get_opening_post()
140
141 # TODO Remove this and use cached property
142 def get_opening_post(self):
141 143 """
142 144 Gets the first post of the thread
143 145 """
144 146
145 query = self.replies.order_by('pub_time')
146 if only_id:
147 query = query.only('id')
148 opening_post = query.first()
149
150 return opening_post
147 return self.replies.order_by('pub_time').first()
151 148
152 149 def get_opening_post_id(self):
153 150 """
154 151 Gets ID of the first thread post.
155 152 """
156 153
157 cache_key = CACHE_KEY_OPENING_POST + str(self.id)
158 opening_post_id = cache.get(cache_key)
159 if not opening_post_id:
160 opening_post_id = self.get_opening_post(only_id=True).id
161 cache.set(cache_key, opening_post_id)
162
163 return opening_post_id
154 return self.opening_post.id
164 155
165 156 def __unicode__(self):
166 157 return str(self.id)
@@ -170,7 +161,7 b' class Thread(models.Model):'
170 161 Gets opening post's pub time because thread does not have its own one.
171 162 """
172 163
173 return self.get_opening_post().pub_time
164 return self.opening_post.pub_time
174 165
175 166 def delete(self, using=None):
176 167 if self.replies.exists():
@@ -179,4 +170,4 b' class Thread(models.Model):'
179 170 super(Thread, self).delete(using)
180 171
181 172 def __str__(self):
182 return 'T#{}/{}'.format(self.id, self.get_opening_post_id()) No newline at end of file
173 return 'T#{}/{}'.format(self.id, self.get_opening_post_id())
@@ -70,10 +70,7 b' def post_view(post, moderator=False, nee'
70 70 else:
71 71 thread = post.get_thread()
72 72
73 if 'can_bump' in kwargs:
74 can_bump = kwargs['can_bump']
75 else:
76 can_bump = thread.can_bump()
73 can_bump = thread.can_bump()
77 74
78 75 opening_post_id = thread.get_opening_post_id()
79 76
General Comments 0
You need to be logged in to leave comments. Login now