##// END OF EJS Templates
Code cleanup part 2
Code cleanup part 2

File last commit:

r722:0a4dc1c4 default
r722:0a4dc1c4 default
Show More
all_threads.py
138 lines | 3.8 KiB | text/x-python | PythonLexer
neko259
Rewriting views to class-based
r542 import string
from django.db import transaction
from django.shortcuts import render, redirect
neko259
Moved imageboard settings to the boards settings module. Added setting to disable archive
r716 from boards import utils, settings
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
neko259
Code cleanup part 2
r722 from boards.views.base import BaseBoardView, CONTEXT_FORM
neko259
Rewriting views to class-based
r542 from boards.views.posting_mixin import PostMixin
neko259
Code cleanup part 2
r722 FORM_TAGS = 'tags'
FORM_TEXT = 'text'
FORM_TITLE = 'title'
FORM_IMAGE = 'image'
neko259
Refactoring in all threads view
r634 TAG_DELIMITER = ' '
neko259
Rewriting views to class-based
r542 PARAMETER_CURRENT_PAGE = 'current_page'
PARAMETER_PAGINATOR = 'paginator'
PARAMETER_THREADS = 'threads'
TEMPLATE = 'boards/posting_general.html'
DEFAULT_PAGE = 1
class AllThreadsView(PostMixin, BaseBoardView):
neko259
Added hidden tags functionality
r635 user = None
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
Implemented search over posts. Moved get_user and get_theme to utils module. Use context processors instead of creating context in the base view. Removed unused imports in some modules
r690 self.user = utils.get_user(request)
neko259
Added hidden tags functionality
r635
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(),
neko259
Moved imageboard settings to the boards settings module. Added setting to disable archive
r716 settings.THREADS_PER_PAGE)
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596 paginator.current_page = int(page)
neko259
Rewriting views to class-based
r542
threads = paginator.page(page).object_list
context[PARAMETER_THREADS] = threads
neko259
Code cleanup part 2
r722 context[CONTEXT_FORM] = form
neko259
Rewriting views to class-based
r542
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():
neko259
Refactoring in all threads view
r634 return self.create_thread(request, form)
neko259
Rewriting views to class-based
r542 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))
neko259
Implemented search over posts. Moved get_user and get_theme to utils module. Use context processors instead of creating context in the base view. Removed unused imports in some modules
r690 @staticmethod
def parse_tags_string(tag_strings):
neko259
Refactoring in all threads view
r634 """
Parses tag list string and returns tag object list.
"""
tags = []
if tag_strings:
tag_strings = tag_strings.split(TAG_DELIMITER)
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)
return tags
neko259
Rewriting views to class-based
r542 @transaction.atomic
neko259
Refactoring in all threads view
r634 def create_thread(self, request, form, html_response=True):
neko259
Rewriting views to class-based
r542 """
neko259
Refactoring in all threads view
r634 Creates a new thread with an opening post.
neko259
Rewriting views to class-based
r542 """
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
neko259
Code cleanup part 2
r722 title = data[FORM_TITLE]
text = data[FORM_TEXT]
neko259
Rewriting views to class-based
r542
text = self._remove_invalid_links(text)
neko259
Code cleanup part 2
r722 if FORM_IMAGE in data.keys():
image = data[FORM_IMAGE]
neko259
Rewriting views to class-based
r542 else:
image = None
neko259
Code cleanup part 2
r722 tag_strings = data[FORM_TAGS]
neko259
Rewriting views to class-based
r542
neko259
Refactoring in all threads view
r634 tags = self.parse_tags_string(tag_strings)
neko259
Rewriting views to class-based
r542
post = Post.objects.create_post(title=title, text=text, ip=ip,
image=image, tags=tags,
neko259
Implemented search over posts. Moved get_user and get_theme to utils module. Use context processors instead of creating context in the base view. Removed unused imports in some modules
r690 user=utils.get_user(request))
neko259
Rewriting views to class-based
r542
if html_response:
neko259
Refactoring in all threads view
r634 return redirect(post.get_url())
neko259
Rewriting views to class-based
r542
def get_threads(self):
neko259
Refactoring in all threads view
r634 """
Gets list of threads that will be shown on a page.
"""
neko259
Removed archive as a separate entity. Archived threads are saved in the same...
r652 return Thread.objects.all().order_by('-bump_time')\
.exclude(tags__in=self.user.hidden_tags.all())