Eine Menge Aufräumarbeiten.

* Eine Testsuite um Mahrjong Ranking Berechnungen zu testen
* Erste Arbeiten um die Workarounds aus dem "utils" Paket los zu werden.
* Vieles am Code umformatiert für PEP8 conformität
This commit is contained in:
2017-06-07 13:25:30 +02:00
parent 690ebec3b0
commit 3e9689c04a
93 changed files with 33531 additions and 2737 deletions

View File

@@ -1,31 +1,48 @@
# Create your views here.
import os
import django_comments as comments
import os
from csp.decorators import csp_update
from django.conf import settings
from django.http import HttpResponse, Http404
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.views import generic
from . import models, forms
from events.models import Photo
from utils.mixins import PermissionRequiredMixin
from . import models, forms
class ArticleArchiveMixin(object):
"""
Mixin View to add common context data to Views of the news article archive.
"""
def get_category(self, queryset):
try:
self.category = models.Category.objects.get(
slug=self.kwargs['category'])
return queryset.filter(category=self.category)
except models.Category.DoesNotExist:
raise Http404(_("This Category does not exist."))
except KeyError:
"""
Filter the queryset by category if one has been specified in the URL
:param queryset: an model.Article.objects Queryset
:return: an model.Article.objects Queryset filterd by category
"""
category_slug = self.kwargs.get('category')
if not category_slug:
self.category = None
return self.queryset
try:
self.category = models.Category.objects.get(slug=category_slug)
except models.Category.DoesNotExist:
raise Http404(_("This Category does not exist."))
return queryset.filter(category=self.category)
def get_context_data(self, **kwargs):
"""
Adds the categories and the active category to the template context.
:return: an django.template.context
"""
context = super(ArticleArchiveMixin, self).get_context_data(**kwargs)
context['categories'] = models.Category.objects.all()
context['active_category'] = self.category
@@ -33,6 +50,10 @@ class ArticleArchiveMixin(object):
class ArticleArchiveIndex(ArticleArchiveMixin, generic.ArchiveIndexView):
"""
Displays the latest news and the filters to browse the archives.
"""
queryset = models.Article.objects.filter(status=models.STATUS_PUBLISHED)
date_field = 'date_created'
paginate_by = 5
@@ -40,12 +61,21 @@ class ArticleArchiveIndex(ArticleArchiveMixin, generic.ArchiveIndexView):
allow_empty = True
def get_queryset(self):
queryset = generic.ArchiveIndexView.get_queryset(self)
queryset = self.get_category(queryset)
return queryset
"""
Filter the Queryset by category.
:return: models.Article.objects queryset
"""
return self.get_category(
super(ArticleArchiveIndex, self).get_queryset()
)
class ArticleYearArchive(ArticleArchiveMixin, generic.YearArchiveView):
"""
Displays the Articles filterd by a specific year
"""
queryset = models.Article.objects.filter(status=models.STATUS_PUBLISHED)
date_field = 'date_created'
paginate_by = 5
@@ -54,12 +84,21 @@ class ArticleYearArchive(ArticleArchiveMixin, generic.YearArchiveView):
allow_empty = True
def get_queryset(self):
queryset = generic.YearArchiveView.get_queryset(self)
queryset = self.get_category(queryset)
return queryset
"""
Filter the Queryset by category.
:return: models.Article.objects queryset
"""
return self.get_category(
super(ArticleYearArchive, self).get_queryset()
)
class ArticleMonthArchive(ArticleArchiveMixin, generic.MonthArchiveView):
"""
Displays the Articles filterd by a specific month
"""
queryset = models.Article.objects.filter(status=models.STATUS_PUBLISHED)
date_field = 'date_created'
month_format = '%m'
@@ -68,16 +107,28 @@ class ArticleMonthArchive(ArticleArchiveMixin, generic.MonthArchiveView):
allow_empty = True
def get_queryset(self):
queryset = generic.MonthArchiveView.get_queryset(self)
queryset = self.get_category(queryset)
return queryset
"""
Filter the Queryset by category.
:return: models.Article.objects queryset
"""
return self.get_category(
super(ArticleMonthArchive, self).get_queryset()
)
class ArticleDetail(generic.DetailView):
"""
Render the news Article, but only if it got published.
"""
queryset = models.Article.objects.filter(status=models.STATUS_PUBLISHED)
class ArticleForm(PermissionRequiredMixin, generic.UpdateView):
"""
View to add or edit an Article
"""
model = models.Article
form_class = forms.ArticleForm
permission_required = 'content.change_article'
@@ -97,28 +148,11 @@ class ArticleForm(PermissionRequiredMixin, generic.UpdateView):
return models.Article(author=self.request.user)
class ImageList(generic.View):
# noinspection PyMethodMayBeStatic
def get(self, kwargs):
image_list = []
response = HttpResponse(content_type='text/javascript')
response.write('var tinyMCEImageList = new Array(')
os.chdir(settings.MEDIA_ROOT)
for dirpath, dirnames, filenames in os.walk(
'images'): # @UnusedVariable @IgnorePep8
filenames.sort()
for filename in filenames:
image_list.append('["%(name)s", "%(path)s"]' % {
'name': os.path.join(dirpath, filename),
'path': os.path.join(settings.MEDIA_URL, dirpath, filename)
})
response.write(', '.join(image_list))
response.write(');')
return response
class PageAddForm(PermissionRequiredMixin, generic.CreateView):
"""
Renders an Form to create a new page for users with conforming permissions.
"""
form_class = forms.PageForm
template_name = 'content/page_form.html'
permission_required = 'content.add_page'
@@ -132,8 +166,16 @@ class PageAddForm(PermissionRequiredMixin, generic.CreateView):
parent = models.Page.objects.get(path=path)
return {'parent': parent}
@method_decorator(csp_update(SCRIPT_SRC="'unsafe-eval'"))
def dispatch(self, *args, **kwargs):
return super(PageAddForm, self).dispatch(*args, **kwargs)
class PageEditForm(PermissionRequiredMixin, generic.UpdateView):
"""
Renders an Form to edit a page for users with conforming permissions.
"""
form_class = forms.PageForm
permission_required = 'content.change_page'
@@ -145,6 +187,10 @@ class PageEditForm(PermissionRequiredMixin, generic.UpdateView):
path = path[:-1]
return models.Page.objects.get(path=path)
@method_decorator(csp_update(SCRIPT_SRC="'unsafe-eval'"))
def dispatch(self, *args, **kwargs):
return super(PageEditForm, self).dispatch(*args, **kwargs)
class PageHtml(generic.DetailView):
@@ -184,23 +230,6 @@ class PagePdf(generic.DeleteView):
raise Http404('File not Found %s.pdf' % self.kwargs['path'])
class PageList(generic.View):
# noinspection PyMethodMayBeStatic
def get(self, kwargs):
response = HttpResponse(content_type='text/javascript')
response.write('var tinyMCELinkList = new Array(')
page_list = []
for page in models.Page.objects.filter(status=models.STATUS_PUBLISHED):
page_list.append('["%(name)s", "%(path)s"]' % {
'name': page.menu_name,
'path': page.get_absolute_url()
})
response.write(', '.join(page_list))
response.write(');')
return response
class StartPage(generic.TemplateView):
template_name = 'index.html'