##// END OF EJS Templates
Removed truncated post view, using an argument for this mode. Fixed bumpable argument in thread
Removed truncated post view, using an argument for this mode. Fixed bumpable argument in thread

File last commit:

r520:44953ced default
r594:1f06cbcc default
Show More
tag.py
91 lines | 2.3 KiB | text/x-python | PythonLexer
from boards.models import Thread
from django.db import models
from django.db.models import Count
__author__ = 'neko259'
TAG_FONT_MULTIPLIER = 0.1
MAX_TAG_FONT = 3
OPENING_POST_POPULARITY = 0.3
REPLY_POPULARITY = 0.06
ARCHIVE_POPULARITY_MODIFIER = 0.1
class TagManager(models.Manager):
def get_not_empty_tags(self):
tags = self.annotate(Count('threads')) \
.filter(threads__count__gt=0).order_by('name')
return tags
class Tag(models.Model):
"""
A tag is a text node assigned to the thread. The tag serves as a board
section. There can be multiple tags for each thread
"""
objects = TagManager()
class Meta:
app_label = 'boards'
name = models.CharField(max_length=100)
threads = models.ManyToManyField(Thread, null=True,
blank=True, related_name='tag+')
linked = models.ForeignKey('Tag', null=True, blank=True)
def __unicode__(self):
return self.name
def is_empty(self):
return self.get_post_count() == 0
def get_post_count(self):
return self.threads.count()
def get_popularity(self):
popularity = 0.0
for thread in self.threads.all():
reply_count = thread.get_reply_count()
thread_popularity = 0.0
thread_popularity += REPLY_POPULARITY * reply_count
thread_popularity += OPENING_POST_POPULARITY
if thread.archived:
thread_popularity *= ARCHIVE_POPULARITY_MODIFIER
popularity += thread_popularity
return popularity
def get_linked_tags(self):
tag_list = []
self.get_linked_tags_list(tag_list)
return tag_list
def get_linked_tags_list(self, tag_list=[]):
"""
Returns the list of tags linked to current. The list can be got
through returned value or tag_list parameter
"""
linked_tag = self.linked
if linked_tag and not (linked_tag in tag_list):
tag_list.append(linked_tag)
linked_tag.get_linked_tags_list(tag_list)
def get_font_value(self):
"""Get tag font value to differ most popular tags in the list"""
popularity = self.get_popularity()
font_value = 1 + (popularity - 1) * TAG_FONT_MULTIPLIER
font_value = min(font_value, MAX_TAG_FONT)
return str(font_value)