##// END OF EJS Templates
Optimized imports and added some docstrings to the post module
Optimized imports and added some docstrings to the post module

File last commit:

r596:5657c06f default
r622:d08e30ea default
Show More
all_threads.py
124 lines | 3.7 KiB | text/x-python | PythonLexer
neko259
Rewriting views to class-based
r542 import string
from django.core.urlresolvers import reverse
from django.db import transaction
from django.shortcuts import render, redirect
from boards import utils
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596 from boards.abstracts.paginator import get_paginator
neko259
Rewriting views to class-based
r542 from boards.forms import ThreadForm, PlainErrorList
from boards.models import Post, Thread, Ban, Tag
from boards.views.banned import BannedView
from boards.views.base import BaseBoardView, PARAMETER_FORM
from boards.views.posting_mixin import PostMixin
import neboard
PARAMETER_CURRENT_PAGE = 'current_page'
PARAMETER_PAGINATOR = 'paginator'
PARAMETER_THREADS = 'threads'
TEMPLATE = 'boards/posting_general.html'
DEFAULT_PAGE = 1
class AllThreadsView(PostMixin, BaseBoardView):
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 def get(self, request, page=DEFAULT_PAGE, form=None):
neko259
Rewriting views to class-based
r542 context = self.get_context_data(request=request)
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 if not form:
form = ThreadForm(error_class=PlainErrorList)
neko259
Rewriting views to class-based
r542
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596 paginator = get_paginator(self.get_threads(),
neboard.settings.THREADS_PER_PAGE)
paginator.current_page = int(page)
neko259
Rewriting views to class-based
r542
threads = paginator.page(page).object_list
context[PARAMETER_THREADS] = threads
context[PARAMETER_FORM] = form
self._get_page_context(paginator, context, page)
return render(request, TEMPLATE, context)
def post(self, request, page=DEFAULT_PAGE):
form = ThreadForm(request.POST, request.FILES,
error_class=PlainErrorList)
form.session = request.session
if form.is_valid():
return self._new_post(request, form)
if form.need_to_ban:
# Ban user because he is suspected to be a bot
self._ban_current_user(request)
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 return self.get(request, page, form)
neko259
Rewriting views to class-based
r542
@staticmethod
def _get_page_context(paginator, context, page):
"""
Get pagination context variables
"""
context[PARAMETER_PAGINATOR] = paginator
context[PARAMETER_CURRENT_PAGE] = paginator.page(int(page))
# TODO This method should be refactored
@transaction.atomic
def _new_post(self, request, form, opening_post=None, html_response=True):
"""
Add a new thread opening post.
"""
ip = utils.get_client_ip(request)
is_banned = Ban.objects.filter(ip=ip).exists()
if is_banned:
if html_response:
return redirect(BannedView().as_view())
else:
return
data = form.cleaned_data
title = data['title']
text = data['text']
text = self._remove_invalid_links(text)
if 'image' in data.keys():
image = data['image']
else:
image = None
tags = []
tag_strings = data['tags']
if tag_strings:
tag_strings = tag_strings.split(' ')
for tag_name in tag_strings:
tag_name = string.lower(tag_name.strip())
if len(tag_name) > 0:
tag, created = Tag.objects.get_or_create(name=tag_name)
tags.append(tag)
post = Post.objects.create_post(title=title, text=text, ip=ip,
image=image, tags=tags,
user=self._get_user(request))
thread_to_show = (opening_post.id if opening_post else post.id)
if html_response:
if opening_post:
return redirect(
reverse('thread', kwargs={'post_id': thread_to_show}) +
'#' + str(post.id))
else:
return redirect('thread', post_id=thread_to_show)
def get_threads(self):
neko259
Minor fixes
r548 return Thread.objects.filter(archived=False).order_by('-bump_time')