def get_list(self, *args, **kwargs): count, threads = super().get_list(*args, **kwargs) for thread in threads: thread.forum = Forum.get(thread.forum).title thread.section = Section.get(thread.section).title thread.author = User.get(thread.author).username return count, threads
def get_list(self, *args, **kwargs): count, sections = super().get_list(*args, **kwargs) for section in sections: section.forum = Forum.get(section.forum).title parent = Section.get(section.parent) if parent: section.parent = parent.title section.created_by = User.get(section.created_by).username return count, sections
def section_view(section_id): section = Section.get(section_id) forum = Forum.get(section.forum) parent_section = Section.get(section.parent) subsections = Section.filter(parent=section.id) # Threads try: page = int(request.args.get('page')) except (TypeError, ValueError): page = 1 if not page or page < 1: page = 1 threads_count = len(Thread.filter(section=section.id)) # FIXME(a.telishev): Threads per page by search pages_count = threads_count // THREADS_PER_PAGE if page > pages_count: page = pages_count prev_page = page - 1 next_page = page + 1 if page == 1: prev_page = None if page == pages_count: next_page = None offset = (page - 1) * THREADS_PER_PAGE search = request.args.get('search', '') search_condition = f'AND thread.title LIKE "%{search}%"' if search else '' query = f""" SELECT thread.id thread_id, thread.title thread_title, thread.created_at thread_created_at, thread.last_answer_time thread_last_answer_time, user.id user_id, user.username username FROM thread INNER JOIN user ON thread.author = user.id WHERE section = %(section_id)s {search_condition} ORDER BY thread.last_answer_time DESC LIMIT %(limit)s OFFSET %(offset)s; """ cursor = get_connector().cursor() cursor.execute(query, { 'section_id': section.id, 'limit': THREADS_PER_PAGE, 'offset': offset, }) threads = { thread_id: { 'id': thread_id, 'title': thread_title, 'created_at': thread_created_at.strftime('%d %b %Y'), 'created_at_h': thread_created_at.strftime('%d %b %Y\n%H:%M:%S'), 'last_answer_time': (thread_last_answer_time.strftime('%d %b %Y\n%H:%M:%S') if thread_last_answer_time else None), 'user_id': user_id, 'username': username, } for ( thread_id, thread_title, thread_created_at, thread_last_answer_time, user_id, username, ) in cursor } if threads: answers_count_query = f""" SELECT thread.id, COUNT(*) FROM thread INNER JOIN answer on thread.id = answer.thread WHERE thread.id IN ({ ', '.join(str(thread_id) for thread_id in threads) }) GROUP BY thread.id; """ cursor.execute(answers_count_query) for thread_id, answers_count in cursor: threads[thread_id]['answers_count'] = answers_count cursor.close() return render_template( 'section.html', section=section, forum=forum, parent_section=parent_section, subsections=subsections, threads=threads.values(), search=search, next_page=next_page, curr_page=page, prev_page=prev_page, )
def thread_view(thread_id): thread = Thread.get(thread_id) forum = Forum.get(thread.forum) section = Section.get(thread.section) parent_section = Section.get(section.parent) author = User.get(thread.author) answers_query = """ SELECT answer.id answer_id, answer.text answer_text, answer.rating answer_rating, answer.created_at answer_created_at, answer.is_off_topic answer_is_off_topic, user.id user_id, user.username username, user.msg_count user_msg_count, user.msg_signature user_signature, user.registered_at user_registered_at FROM answer INNER JOIN user ON answer.author = user.id WHERE answer.thread = %(thread_id)s ORDER BY answer.created_at; """ cursor = get_connector().cursor() cursor.execute(answers_query, {'thread_id': thread.id}) answers = [ Answer( id=answer_id, text=answer_text, rating=answer_rating, created_at=answer_created_at, is_off_topic=answer_is_off_topic, author=User( id=user_id, username=username, msg_count=user_msg_count, msg_signature=user_signature, registered_at=user_registered_at, ) ) for ( answer_id, answer_text, answer_rating, answer_created_at, answer_is_off_topic, user_id, username, user_msg_count, user_signature, user_registered_at, ) in cursor ] labels_query = """ SELECT thread_label.id label_id, thread_label.text label_text FROM threads_labels INNER JOIN thread_label ON threads_labels.label = thread_label.id WHERE threads_labels.thread = %(thread_id)s; """ cursor = get_connector().cursor() cursor.execute(labels_query, {'thread_id': thread.id}) labels = [ ThreadLabel(id=label_id, text=label_text) for label_id, label_text in cursor ] cursor.close() return render_template( 'thread.html', forum=forum, parent_section=parent_section, section=section, author=author, thread=thread, labels=labels, answers=answers, )