def process_thread_paginator(trending=False, rs=None, subreddit=None): """ abstracted because many sources pull from a thread listing source (subreddit permalink, homepage, etc) """ threads_per_page = 15 cur_page = request.args.get('page') or 1 cur_page = int(cur_page) thread_paginator = None # if we are passing in a resultset, that means we are just looking to # quickly paginate some arbitrary data, no sorting if rs: thread_paginator = rs.paginate(cur_page, per_page=threads_per_page, error_out=True) return thread_paginator # sexy line of code :) base_query = subreddit.threads if subreddit else Thread.query if trending: thread_paginator = base_query.order_by(db.desc(Thread.votes)).\ paginate(cur_page, per_page=threads_per_page, error_out=True) else: thread_paginator = base_query.order_by(db.desc(Thread.hotness)).\ paginate(cur_page, per_page=threads_per_page, error_out=True) return thread_paginator
def get_comments(self, order_by='timestamp'): """ default order by timestamp """ if order_by == 'timestamp': return self.children.order_by(db.desc(Comment.created_on)).\ all()[:THREAD.MAX_COMMENTS] else: return self.comments.order_by(db.desc(Comment.created_on)).\ all()[:THREAD.MAX_COMMENTS]
def get_threads(self, order_by='timestamp'): """ default order by timestamp """ if order_by == 'timestamp': return self.threads.order_by(db.desc(Thread.created_on)).\ all()[:SUBREDDIT.MAX_THREADS] else: return self.threads.order_by(db.desc(Thread.created_on)).\ all()[:SUBREDDIT.MAX_THREADS]
def get_comments(self, order_by='timestamp'): """ default order by timestamp return only top levels! """ if order_by == 'timestamp': return self.comments.filter_by(depth=1).\ order_by(db.desc(Comment.created_on)).all()[:THREAD.MAX_COMMENTS] else: return self.comments.filter_by(depth=1).\ order_by(db.desc(Comment.created_on)).all()[:THREAD.MAX_COMMENTS]
def search(query, orderby='creation', filter_user=None, search_title=True, search_text=True, subreddit=None, limit=100): """ search for threads (and maybe comments in the future) """ if not query: return [] query = query.strip() base_query = '%' + query + '%' base_qs = Thread.query title_clause = Thread.title.like(base_query) if search_title else False text_clause = Thread.text.like(base_query) if search_text else False # TODO: Searching by subreddit requires joining, leave out for now. # subreddit_clause = Thread.subreddit.name.like(subreddit.name) if subreddit else False or_clause = db.or_(title_clause, text_clause) base_qs = base_qs.filter(or_clause) if orderby == 'creation': base_qs = base_qs.order_by(db.desc(Thread.created_on)) elif orderby == 'title': base_qs = base_qs.order_by(Thread.title) elif orderby == 'numb_comments': pass base_qs = base_qs.limit(limit) return base_qs