##// END OF EJS Templates
Merge tip
Merge tip

File last commit:

r2122:edce8526 default
r2146:69a1b01a merge lite
Show More
sync_filters.py
66 lines | 1.7 KiB | text/x-python | PythonLexer
import xml.etree.ElementTree as et
from boards.models import Post, Tag
TAG_THREAD = 'thread'
TAG_TAGS = 'tags'
TAG_TAG = 'tag'
TAG_TIME_FROM = 'timestamp_from'
class PostFilter:
def __init__(self, content=None):
self.content = content
def filter(self, posts):
return posts
def add_filter(self, model_tag, value):
return model_tag
class ThreadFilter(PostFilter):
def filter(self, posts):
op_id = self.content.text
op = Post.objects.filter(opening=True, id=op_id).first()
if op:
return posts.filter(thread=op.get_thread())
else:
return posts.none()
def add_filter(self, model_tag, value):
thread_tag = et.SubElement(model_tag, TAG_THREAD)
thread_tag.text = str(value)
class TagsFilter(PostFilter):
def filter(self, posts):
tags = []
for tag_tag in self.content:
try:
tags.append(Tag.objects.get(name=tag_tag.text))
except Tag.DoesNotExist:
pass
if tags:
return posts.filter(thread__tags__in=tags)
else:
return posts.none()
def add_filter(self, model_tag, value):
tags_tag = et.SubElement(model_tag, TAG_TAGS)
for tag_name in value:
tag_tag = et.SubElement(tags_tag, TAG_TAG)
tag_tag.text = tag_name
class TimestampFromFilter(PostFilter):
def filter(self, posts):
from_time = self.content.text
return posts.filter(pub_time__gt=from_time)
def add_filter(self, model_tag, value):
tags_from_time = et.SubElement(model_tag, TAG_TIME_FROM)
tags_from_time.text = value