Diverse Code Cleanups

*Code wurde PEP-8 gerecht formatiert
* Kleine Fehler die der PyCharm Inspector beanstandet wurden korrigiert
This commit is contained in:
Christian Berg
2014-11-26 16:04:52 +01:00
committed by Christian Berg
parent f34281089d
commit 86a0db050d
76 changed files with 619 additions and 528 deletions

View File

@@ -1,8 +1,8 @@
'''
"""
Created on 19.09.2011
@author: christian
'''
"""
# import stuff we need from django
from django.contrib import admin
from . import models
@@ -44,17 +44,20 @@ class PageAdmin(admin.ModelAdmin):
'classes': ('collapse', 'closed'),
}),
('Meta Data', {
'fields': ('content_type', 'slug', ('parent', 'position'),
'status', 'template',)
'fields': (
'content_type', 'slug', ('parent', 'position'),
'status', 'template',
)
}),
)
class Media:
class Media(object):
js = [
'/static/js/tiny_mce/tiny_mce.js',
'/static/js/tinymce_setup.js',
'/static/js/tiny_mce/tiny_mce.js',
'/static/js/tinymce_setup.js',
]
admin.site.register(models.Article, ArticleAdmin)
admin.site.register(models.Page, PageAdmin)
admin.site.register(models.Category, CategoryAdmin)

View File

@@ -1,9 +1,9 @@
# -*- encoding: UTF-8 -*-
'''
"""
Created on 30.09.2011
@author: christian
'''
"""
from . import models
from django.core.cache import cache
@@ -16,7 +16,7 @@ def content_menus(request):
# erzeuge das Top-Level Menü
top_menu_items = []
top_level_pages = cache.get('top_level_pages')
if top_level_pages == None:
if top_level_pages is None:
top_level_pages = models.Page.objects.filter(parent=None)
top_level_pages = top_level_pages.exclude(slug='index')
top_level_pages = top_level_pages.order_by('position')
@@ -31,7 +31,7 @@ def content_menus(request):
# Entdecke die aktuell geöffnete Seite
all_pages = cache.get('all_pages')
if all_pages == None:
if all_pages is None:
all_pages = models.Page.objects.values_list('path', 'id')
all_pages = dict((path, page_id) for path, page_id in all_pages)
cache.set('all_pages', all_pages, 360)

View File

@@ -7,13 +7,14 @@ from django.utils.feedgenerator import Rss201rev2Feed
from models import Article
# noinspection PyMethodMayBeStatic
class LatestNews(Feed):
link = "http://www.kasu.at/"
description = _("Current news from Kasu")
title = "Kasu - traditonelle asiatische Spielkultur"
feed_type = Rss201rev2Feed
def items(self, obj):
def items(self):
return Article.objects.published()[:10]
def item_title(self, item):
@@ -23,7 +24,7 @@ class LatestNews(Feed):
return item.author.username
def item_categories(self, item):
return (item.category.name,)
return item.category.name,
def item_description(self, item):
return item.content
@@ -32,6 +33,7 @@ class LatestNews(Feed):
return datetime.combine(item.date_created, time())
# noinspection PyMethodMayBeStatic
class LatestComments(Feed):
"""Feed of latest comments on the current site."""
@@ -41,8 +43,10 @@ class LatestComments(Feed):
feed_type = Rss201rev2Feed
def items(self):
qs = comments.get_model().objects.filter(site__pk=settings.SITE_ID,
is_public=True, is_removed=False)
qs = comments.get_model().objects.filter(
site__pk=settings.SITE_ID,
is_public=True, is_removed=False
)
return qs.order_by('-submit_date')[:40]
def item_author_name(self, item):

View File

@@ -1,8 +1,8 @@
'''
"""
Created on 04.10.2011
@author: christian
'''
"""
import django.forms
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext as _
@@ -17,8 +17,12 @@ class ArticleForm(forms.ModelForm):
required_css_class = 'required'
class Meta(object):
fields = ('headline_de', 'content_de', 'headline_en', 'content_en',
'category', 'image')
fields = (
'headline_de', 'content_de',
'headline_en', 'content_en',
'category',
'image'
)
model = models.Article
def save(self, force_insert=False, force_update=False, commit=True):

View File

@@ -1,36 +1,41 @@
# -*- coding: utf-8 -*-
from content.models import Article, Category
from django.contrib.auth.models import User
import re
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand
from django.template.defaultfilters import slugify
from django.utils.datetime_safe import datetime
import re
import xlrd #@UnresolvedImport
from content.models import Article, Category
import xlrd
# noinspection PyPep8
class Command(BaseCommand):
help = "Importiert die alten Daten aus einer CSV Datei" #@ReservedAssignment
help = "Importiert die alten Daten aus einer CSV Datei" # @ReservedAssignment
date_header_regex = r"""<h1><span class=\"small\">(?P<date>[\d\.]*)[\ -]*</span>[\ -]*(?P<title>.*)</h1>(?P<content>.*)"""
header_regex = r"""<h1>[\ -]*(?P<title>.*)</h1>(?P<content>.*)"""
def __init__(self):
self.author = User.objects.get(username="xeniac")
self.author = get_user_model().objects.get(username="xeniac")
self.category = Category.objects.get(slug='allgemeines')
super(Command, self).__init__()
def create_article(self):
self.slug = slugify(self.headline[:50])
article, created = Article.objects.get_or_create(slug=self.slug, date_created=self.date_created,
defaults={
'author': self.author,
'headline_de': self.headline,
'content_de': self.content,
'category': self.category
})
article, created = Article.objects.get_or_create(slug=self.slug, date_created=self.date_created,
defaults={
'author': self.author,
'headline_de': self.headline,
'content_de': self.content,
'category': self.category
})
if created:
print "Created: %s - %s" % (self.date_created, self.headline)
print "Created: %s - %s" % (self.date_created, self.headline)
article.clean()
article.save()
def parse_with_date(self, original):
match_obj = re.search(self.date_header_regex, original, re.IGNORECASE | re.DOTALL)
if match_obj:
@@ -60,7 +65,7 @@ class Command(BaseCommand):
except IOError:
print "Datei '%s' wurde nicht gefunden! " % args[0]
return False
table = xls_file.sheet_by_index(0)
for row in xrange(1, table.nrows):
if not table.cell_value(row, 2) in ('Archiv', 'News'):

View File

@@ -1,16 +1,17 @@
# -*- coding: utf-8 -*-
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand
from django.utils.datetime_safe import datetime
from events.models import Event, Location
import xlrd # @UnresolvedImport
import xlrd
class Command(BaseCommand):
help = "Importiert die alten Events" # @ReservedAssignment
def __init__(self):
self.author = User.objects.get(username="xeniac")
self.author = get_user_model().objects.get(username="xeniac")
super(Command, self).__init__()
def handle(self, *args, **options):
try:
@@ -22,16 +23,15 @@ class Command(BaseCommand):
table = xls_file.sheet_by_index(0)
for row in xrange(1, table.nrows):
name = table.cell_value(row, 0)
print name
start = xlrd.xldate_as_tuple(table.cell_value(row, 1),
xls_file.datemode)
xls_file.datemode)
start = datetime(start[0], start[1], start[2], 0, 0, 0)
end = xlrd.xldate_as_tuple(table.cell_value(row, 2),
xls_file.datemode)
xls_file.datemode)
end = datetime(end[0], end[1], end[2], 23, 59, 59)
location = Location.objects.get(pk=table.cell_value(row, 3))

View File

@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
from os import path
from django.conf import settings
from django.utils.timezone import now
from django.core.urlresolvers import reverse
from django.core.cache import cache
@@ -9,19 +11,21 @@ from django.utils.safestring import mark_safe
from django.utils.translation import get_language, ugettext as _
from imagekit.models import ImageSpecField
from imagekit.processors import SmartResize
from utils import STATUS_CHOICES, STATUS_WAITING, STATUS_PUBLISHED, \
STATUS_REJECTED, cleaner, OverwriteStorage # @UnusedImport
from django.core.exceptions import ValidationError
from utils import STATUS_CHOICES, STATUS_WAITING, STATUS_PUBLISHED, \
cleaner
CONTENT_CHOICES = (
(0, u'Django View'),
(1, u'HTML'),
(2, u'PDF')
(0, u'Django View'),
(1, u'HTML'),
(2, u'PDF')
)
def get_upload_path(instance, filename):
'''
"""
Generates the desired file path and filename for an uploaded Image.
With this function Django can save the uploaded images to subfolders that
also have a meaning for humans.
@@ -30,7 +34,7 @@ def get_upload_path(instance, filename):
@type instance: a instace of an models.Model sub-class.
@param filename: The filename of the uploaded image.
@type filename: String
'''
"""
extension = filename[filename.rfind('.') + 1:]
if isinstance(instance, Category):
return "categories/%s.%s" % (instance.slug, extension)
@@ -59,11 +63,11 @@ class Article(ImageModel):
content_en = models.TextField('Content', blank=True)
category = models.ForeignKey('Category', verbose_name=_('Category'))
image = models.ImageField(_('Image'), upload_to='news/',
blank=True, null=True)
blank=True, null=True)
slug = models.SlugField(_('Slug'), unique_for_month='date_created')
author = models.ForeignKey('auth.User', verbose_name=_('Author'))
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('Author'))
status = models.SmallIntegerField(_('Status'), choices=STATUS_CHOICES,
default=STATUS_PUBLISHED)
default=STATUS_PUBLISHED)
date_created = models.DateField(_('Created'), blank=True)
date_modified = models.DateTimeField(_('Modified'), auto_now=True)
objects = ArticleManager()
@@ -117,13 +121,13 @@ class Article(ImageModel):
class Page(models.Model):
'''
"""
Eine Seite auf der Homepage. Sie kann eine "statische" HTML Seite,
die URL einer dynamische Django View, oder ein PDF Dokument sein.
Jede Seite kann neben Deutsch auch auf Englisch angeboten werden.
Ist keine englische Übersetzung vorhanden, wird die deutsche Version
angeboten.
'''
"""
menu_name_de = models.CharField(
'Menü Name',
max_length=255,
@@ -136,26 +140,26 @@ class Page(models.Model):
help_text=_('The short name for the menu-entry of this page')
)
title_de = models.CharField('Titel', max_length=255,
help_text=_('This title appears in the HTML header'))
help_text=_('This title appears in the HTML header'))
title_en = models.CharField('Title', max_length=255, blank=True,
help_text=_('This title appears in the HTML header'))
help_text=_('This title appears in the HTML header'))
slug = models.SlugField(_('slug'))
path = models.CharField(_('Path'), max_length=100, db_index=True,
editable=False, unique=True)
editable=False, unique=True)
parent = models.ForeignKey('self', blank=True, null=True,
related_name='subpages', on_delete=models.SET_NULL)
related_name='subpages', on_delete=models.SET_NULL)
position = models.PositiveSmallIntegerField(_('Position'),
blank=True, null=True)
blank=True, null=True)
status = models.SmallIntegerField(_('status'), choices=STATUS_CHOICES,
default=STATUS_WAITING)
default=STATUS_WAITING)
content_type = models.IntegerField(choices=CONTENT_CHOICES)
content_de = models.TextField('Inhalt', blank=True)
content_en = models.TextField('Content', blank=True)
enable_comments = models.BooleanField(_('enable comments'), default=True)
template = models.CharField(_('Template'), max_length=100,
default="content/page.html")
default="content/page.html")
pdf_de = models.FileField(upload_to='pdf/de/', blank=True, null=True)
pdf_en = models.FileField(upload_to='pdf/en/', blank=True, null=True)
@@ -164,8 +168,8 @@ class Page(models.Model):
@property
def content(self):
return mark_safe(getattr(self, "content_%s" % get_language()) or \
self.content_de)
cont = getattr(self, "content_%s" % get_language()) or self.content_de
return mark_safe(cont)
@property
def css_class(self):
@@ -173,8 +177,8 @@ class Page(models.Model):
@property
def menu_name(self):
return getattr(self, "menu_name_%s" % get_language()) or \
self.menu_name_de
return getattr(self,
"menu_name_%s" % get_language()) or self.menu_name_de
@property
def pdf_file(self):
@@ -185,12 +189,12 @@ class Page(models.Model):
return getattr(self, "title_%s" % get_language()) or self.title_de
def clean(self):
if self.parent == None:
if self.parent is None:
self.path = self.slug
else:
self.path = path.join(self.parent.path, self.slug)
if self.content_type == None:
if self.content_type is None:
if self.pdf_de:
self.content_type = 2
if self.content_de:
@@ -205,14 +209,14 @@ class Page(models.Model):
_(u'Please upload a PDF-File to this PDF-Page.'))
def get_absolute_url(self):
path = '/' + self.path
aboslute_url = '/' + self.path
if self.content_type == 1:
path += '.html'
aboslute_url += '.html'
elif self.content_type == 2:
path += '.pdf'
aboslute_url += '.pdf'
else:
path += '/'
return path
aboslute_url += '/'
return aboslute_url
class Meta(object):
ordering = ['parent__id', 'position']
@@ -227,7 +231,7 @@ class Category(ImageModel):
description_de = models.TextField(_('Description'))
description_en = models.TextField(_('Description'), blank=True)
image = models.ImageField(_('Image'), upload_to='news/categories/',
blank=True, null=True)
blank=True, null=True)
slug = models.SlugField(_('Slug'), unique=True, db_index=True)
class Meta(object):
@@ -242,7 +246,7 @@ class Category(ImageModel):
@property
def description(self):
return getattr(self, "description_%s" % get_language(),
self.description_de)
self.description_de)
def get_absolute_url(self):
return reverse('article-archive', kwargs={'category': self.slug})
@@ -258,5 +262,6 @@ def force_cache_update(sender, instance, **kwargs):
cache.delete('all_pages')
cache.delete('top_level_pages')
models.signals.post_delete.connect(force_cache_update, sender=Page)
models.signals.post_save.connect(force_cache_update, sender=Page)

View File

@@ -1,11 +1,14 @@
from imagekit.specs import ImageSpec
from imagekit import processors
# noinspection PyPep8
class ResizeArticle(processors.Resize):
width = 210
height = 130
crop = True
class Article(ImageSpec):
pre_cache = True
processors = [ResizeArticle]

View File

@@ -45,11 +45,11 @@
<ul class="list" style="margin: 20px;">
{% if active_category %}
{% for date in date_list %}
<li class="date"><a href="{% url "article-archive" category=active_category.slug year=date|date:'Y' %}">{{active_category.name}}: {{ date|date:'Y' }}</a></li>
<li class="date"><a href="{% url 'article-archive' category=active_category.slug year=date|date:'Y' %}">{{active_category.name}}: {{ date|date:'Y' }}</a></li>
{% endfor %}
{% else %}
{% for date in date_list %}
<li class="date"><a href="{% url "article-archive" year=date|date:'Y' %}">{{ date|date:'Y' }}</a></li>
<li class="date"><a href="{% url 'article-archive' year=date|date:'Y' %}">{{ date|date:'Y' }}</a></li>
{% endfor %}
{% endif %}
</ul>
@@ -62,7 +62,7 @@
<article class="article">
<h3><a href="{{article.get_absolute_url}}">{{article.headline}}</a></h3>
<ul class="info">
<li><img src="{{STATIC_URL}}icons/calendar.png" alt="{% trans 'created on' %}:" title="{% trans 'created on' %}"/> <time datetime="{{article.date_created|date:"c"}}">{{ article.date_created|date }}</time></li>
<li><img src="{{STATIC_URL}}icons/calendar.png" alt="{% trans 'created on' %}:" title="{% trans 'created on' %}"/> <time datetime="{{article.date_created|date:'c'}}">{{ article.date_created|date }}</time></li>
<li><img src="{{STATIC_URL}}icons/user_red.png" alt="{% trans 'by' %}:" title="{% trans 'by' %}"/> <span class="author">{{ article.author }}</span></li>
<li><img src="{{STATIC_URL}}icons/comments.png" alt="{% trans 'comments' %}:" title="{% trans 'comments' %}"/> <a href="{{article.get_absolute_url}}#comments" >{{comment_count}} {% trans "comments" %}</a></li>
</ul>
@@ -89,6 +89,6 @@
{% block additional_buttonbar %}
{% if perms.content.add_article %}
<a href="{% url "add-article" %}" class="button"><img src="{{ STATIC_URL }}icons/note_add.png" alt="" /> {% trans "Add Article" %}</a>
<a href="{% url 'add-article' %}" class="button"><img src="{{ STATIC_URL }}icons/note_add.png" alt="" /> {% trans "Add Article" %}</a>
{% endif %}
{% endblock %}

View File

@@ -4,6 +4,6 @@
{% block date_list %}
<h2>{% trans "Archive" %} {{month|date:'E'}}</h2>
<div class="buttonbar">
<a href="{% url "article-archive" year=month|date:'Y' %}" class="button"><img src="{{ STATIC_URL }}icons/arrow_undo.png" alt="{% trans 'back' %}" /> {% trans 'back' %}</a>
<a href="{% url 'article-archive' year=month|date:'Y' %}" class="button"><img src="{{ STATIC_URL }}icons/arrow_undo.png" alt="{% trans 'back' %}" /> {% trans 'back' %}</a>
</div>
{% endblock %}

View File

@@ -9,11 +9,11 @@
<ul class="list" style="margin: 20px;">
{% if active_category %}
{% for date in date_list %}
<li class="date"><a href="{% url "article-archive" category=active_category.slug year=year|date:'Y' month=date|date:'m' %}">{{active_category.name}}: {{ date|date:'F' }}</a></li>
<li class="date"><a href="{% url 'article-archive' category=active_category.slug year=year|date:'Y' month=date|date:'m' %}">{{active_category.name}}: {{ date|date:'F' }}</a></li>
{% endfor %}
{% else %}
{% for date in date_list %}
<li class="date"><a href="{% url "article-archive" year=year|date:'Y' month=date|date:'m' %}">{{ date|date:'F' }}</a></li>
<li class="date"><a href="{% url 'article-archive' year=year|date:'Y' month=date|date:'m' %}">{{ date|date:'F' }}</a></li>
{% endfor %}
{% endif %}
</ul>

View File

@@ -29,8 +29,8 @@
<p>&nbsp;</p>
<ul class="info">
<li class="user"><strong>{% trans 'Author' %}:</strong> <a href="{% url "membership-details" article.author %}" itemprop="author">{{article.author}}</a></li>
<li class="date"><strong>{% trans 'Created on' %}: </strong><time date="{{article.date_created|date:"c"}}">{{ article.date_created|date }}</time></li>
<li class="user"><strong>{% trans 'Author' %}:</strong> <a href="{% url 'membership-details' article.author %}" itemprop="author">{{article.author}}</a></li>
<li class="date"><strong>{% trans 'Created on' %}: </strong><time date="{{article.date_created|date:'c'}}">{{ article.date_created|date }}</time></li>
<li class="category"><strong>{% trans "Category"%}: </strong><a href="{{ article.category.get_absolute_url }}" itemprop="articleSection">{{article.category.name}}</a></li>
</ul>
@@ -49,6 +49,6 @@
{% block buttonbar %}
{% if perms.content.change_article %}
<a href="{% url "edit-article" article.id %}" class="button"><img src="{{STATIC_URL}}icons/note_edit.png" alt="" />{% trans "Edit Article" %}</a>
<a href="{% url 'edit-article' article.id %}" class="button"><img src="{{STATIC_URL}}icons/note_edit.png" alt="" />{% trans "Edit Article" %}</a>
{% endif %}
{% endblock %}

View File

@@ -33,13 +33,13 @@ body {
}
@page {
margin-right: 0mm;
margin-bottom: 0mm;
margin-right: 0;
margin-bottom: 0;
margin-top: 35mm;
margin-left: 2cm;
@frame header {
-pdf-frame-content : page_header;
top: 0mm;
top: 0;
margin: 5mm;
height: 4cm;
}

View File

@@ -1,11 +1,12 @@
'''
"""
Created on 10.06.2012
@author: christian
'''
"""
from django import template
from django.utils.datastructures import SortedDict
import copy
register = template.Library()
@@ -31,7 +32,7 @@ class FieldSetNode(template.Node):
def get_fieldset(parser, token):
try:
_name_, fields, _from_, form, _as_, variable_name = \
token.split_contents()
token.split_contents()
fields = fields[1:-1]
fields = [field.strip() for field in fields.split(',')]
except ValueError:
@@ -40,4 +41,5 @@ def get_fieldset(parser, token):
)
return FieldSetNode(form, variable_name, fields)
get_fieldset = register.tag(get_fieldset)

View File

@@ -21,6 +21,7 @@ class ArticleArchiveMixin(object):
return context
# noinspection PyAttributeOutsideInit
class ArticleArchiveIndex(ArticleArchiveMixin, generic.ArchiveIndexView):
queryset = models.Article.objects.filter(status=models.STATUS_PUBLISHED)
date_field = 'date_created'
@@ -83,7 +84,7 @@ class ArticleForm(PermissionRequiredMixin, generic.UpdateView):
form_class = forms.ArticleForm
permission_required = 'content.change_article'
def get_object(self):
def get_object(self, **kwargs):
if self.kwargs.get('pk', None):
return models.Article.objects.get(pk=self.kwargs['pk'])
else:
@@ -91,6 +92,7 @@ class ArticleForm(PermissionRequiredMixin, generic.UpdateView):
class ImageList(generic.View):
# noinspection PyMethodMayBeStatic
def get(self, kwargs):
image_list = []
response = HttpResponse(content_type='text/javascript')
@@ -137,11 +139,10 @@ class PageEditForm(PermissionRequiredMixin, generic.UpdateView):
class PageHtml(generic.DetailView):
def get_object(self, queryset=None):
try:
return models.Page.objects.get(path=self.kwargs['path'],
content_type=1)
content_type=1)
except models.Page.DoesNotExist:
raise Http404(
_("No Page found matching the Path %s") % self.request.path
@@ -152,11 +153,10 @@ class PageHtml(generic.DetailView):
class PagePdf(generic.DeleteView):
def get_object(self, queryset=None):
try:
return models.Page.objects.get(path=self.kwargs['path'],
content_type=2)
content_type=2)
except models.Page.DoesNotExist:
raise Http404(
_("No PDF Document found matching the Path %s") %
@@ -167,7 +167,7 @@ class PagePdf(generic.DeleteView):
try:
pdf_file = open(self.object.pdf_file.path, 'rb')
response = HttpResponse(pdf_file.read(),
content_type='application/pdf')
content_type='application/pdf')
pdf_file.close()
return response
except:
@@ -175,7 +175,7 @@ class PagePdf(generic.DeleteView):
class PageList(generic.View):
# noinspection PyMethodMayBeStatic
def get(self, kwargs):
response = HttpResponse(content_type='text/javascript')
response.write('var tinyMCELinkList = new Array(')
@@ -213,4 +213,5 @@ class StartPage(generic.TemplateView):
'recent_comment_list': recent_comment_list,
}
return context
queryset = models.Article.objects.filter(status=models.STATUS_PUBLISHED)