Code cleanup using panda-bears

This commit is contained in:
2020-01-16 20:24:29 +01:00
committed by Xeniac
parent 95f5e0b920
commit 0d3c47d8b3
31 changed files with 59 additions and 1117 deletions

View File

@@ -5,4 +5,4 @@ language = python
bears = PEP8Bear,PyLintBear,PyUnusedCodeBear
use_spaces = True
pylint_cli_options = --load-plugins pylint_django
pylint_disable = E1101,R0201,R0901,R0903
#pylint_disable = E1101,R0201,R0901,R0903

View File

@@ -16,7 +16,7 @@ all: cleanup migrate testserver
venv: $(VENV_PATH)/bin/activate
$(VENV_PATH)/bin/activate:
@test -d $(VENV_PATH) || python3.5 -m venv --clear $(VENV_PATH)
@test -d $(VENV_PATH) || python3 -m venv --clear $(VENV_PATH)
dev-requirements: venv ${DEV_REQUIREMENTS}
${PYTHON} -m pip install -qU pip

1072
TODO

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@ from django.core.cache import cache
from . import models
from utils import STATUS_PUBLISHED
def content_menus(request):
""" Generate the menu tree and add these info to the template context.

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.content\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-12 16:27+0100\n"
"POT-Creation-Date: 2019-12-13 23:38+0100\n"
"PO-Revision-Date: 2018-01-12 15:25+0105\n"
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
"Language-Team: Deutsch <>\n"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.events\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-12 16:27+0100\n"
"POT-Creation-Date: 2019-12-13 23:38+0100\n"
"PO-Revision-Date: 2018-01-12 15:25+0105\n"
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
"Language-Team: Kasu <verein@kasu.at>\n"

View File

@@ -5,7 +5,8 @@ from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.urls import reverse
from django.db.models import Q
from django.http import HttpResponse, Http404
from django.http import Http404
from django.http import HttpResponse
from django.shortcuts import redirect
from django.utils import timezone
from django.utils.translation import ugettext as _

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.utils\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-12 16:27+0100\n"
"POT-Creation-Date: 2019-12-13 23:38+0100\n"
"PO-Revision-Date: 2018-12-30 11:14+0105\n"
"Last-Translator: b' <kasu@xendynastie.at>'\n"
"Language-Team: Kasu <verein@kasu.at>\n"

View File

@@ -14,8 +14,8 @@ if VENV_PATH not in sys.path:
if SOURCE_PATH not in sys.path:
sys.path.append(SOURCE_PATH)
from django.core.wsgi import get_wsgi_application # Ignore PyLintBear (C0413) # Ignore PyLintBear (C0413)
from django.core.wsgi import get_wsgi_application
os.environ['DJANGO_SETTINGS_MODULE'] = 'kasu.settings'
application = get_wsgi_application() # Ignore PyLintBear (C0103) # Ignore PyLintBear (C0103)
application = get_wsgi_application()

View File

@@ -80,7 +80,8 @@ class Workbook(object):
:rtype: object
"""
self.workbook = openpyxl.Workbook()
[self.workbook.add_named_style(style) for style in XLSX_STYLES.values()]
[self.workbook.add_named_style(style)
for style in XLSX_STYLES.values()]
[self.workbook.remove(sheet) for sheet in self.workbook.worksheets]
def generate_sheet(self, title, columns_settings, object_list,
@@ -135,7 +136,8 @@ class Workbook(object):
# write table footer
for column, settings in enumerate(columns_settings, 1):
cell = ws.cell(column=column, row=row, value=settings.get('footer'))
cell = ws.cell(column=column, row=row,
value=settings.get('footer'))
cell.style = settings['style']
row += 1

View File

@@ -21,6 +21,8 @@ def recalculate(modeladmin, request, queryset): # Ignore PyLintBear (W0613)
for ladder_ranking in queryset:
set_dirty(user=ladder_ranking.user_id,
season=ladder_ranking.season)
recalculate.short_description = _("Recalculate")

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.mahjong_ranking\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-12 16:27+0100\n"
"POT-Creation-Date: 2019-12-13 23:38+0100\n"
"PO-Revision-Date: 2018-05-08 00:20+0105\n"
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
"Language-Team: Kasu <verein@kasu.at>\n"

View File

@@ -3,11 +3,13 @@ Rest all dan points to 0 at a given date.
"""
from django.core.management.base import BaseCommand
from datetime import date, datetime, time
from datetime import datetime
from datetime import time
from mahjong_ranking import models
from django.utils.dateparse import parse_date
from django.utils import timezone
class Command(BaseCommand):
""" Recalculate all Kyu/Dan Rankings """
@@ -17,12 +19,13 @@ class Command(BaseCommand):
parser.add_argument('reset_date', type=parse_date)
def handle(self, *args, **options):
legacy_attrs = [ key for key in models.KyuDanRanking.__dict__.keys()
if key.startswith('legacy') ]
legacy_attrs = [key for key in models.KyuDanRanking.__dict__.keys()
if key.startswith('legacy')]
legacy_attrs.remove('legacy_date')
reset_date = timezone.make_aware(datetime.combine(
options.get('reset_date'), time(23, 59, 59)))
models.KyuDanRanking.objects.update(until=reset_date, force_recalc=True)
models.KyuDanRanking.objects.update(
until=reset_date, force_recalc=True)
for ranking in models.KyuDanRanking.objects.filter(dan__gt=0):
print(ranking)
ranking.dan = 1

View File

@@ -32,7 +32,7 @@ class HanchanManager(models.Manager):
hanchans = hanchans.filter(start__lte=until)
return hanchans
def dan_hanchans(self, user, since = None, **filter_args):
def dan_hanchans(self, user, since=None, **filter_args):
""" Return all Hanchans where a specific user has participated and had
gain dan points and make his gamestats availabale.
@@ -53,7 +53,7 @@ class HanchanManager(models.Manager):
[hanchan.get_playerdata(user) for hanchan in queryset]
return queryset
def kyu_hanchans(self, user, since = None, **filter_args):
def kyu_hanchans(self, user, since=None, **filter_args):
""" Return all Hanchans where a specific user has participated and had
gain kyū points and make his gamestats availabale.

View File

@@ -5,6 +5,7 @@ from mahjong_ranking import models
from . import LOGGER
from . import LOGGER
class DenormalizationUpdateMiddleware:
"""To recalculate everything in the queues at the end of a POST request."""

View File

@@ -29,7 +29,8 @@ class EventRanking(models.Model):
Sie beschränken sich aber auf einen Event und werden nur dann angestossen,
wenn der Event als Turnier markiert wurde.
"""
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.PROTECT)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
placement = models.PositiveIntegerField(blank=True, null=True)
avg_placement = models.FloatField(default=4)
@@ -428,7 +429,8 @@ class KyuDanRanking(models.Model):
).order_by('-start')
last_hanchan_this_event = hanchans_this_event[0]
# Das braucht nur am Ende eines Turnieres gemacht werden.
if hanchan != last_hanchan_this_event: return False
if hanchan != last_hanchan_this_event:
return False
event_ranking = EventRanking.objects.get(
user=self.user,
event=hanchan.event
@@ -603,7 +605,8 @@ class KyuDanRanking(models.Model):
class SeasonRanking(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.PROTECT)
season = models.PositiveSmallIntegerField(_('Season'))
placement = models.PositiveIntegerField(blank=True, null=True)
avg_placement = models.FloatField(blank=True, null=True)

View File

@@ -36,4 +36,3 @@ urlpatterns = [ # Ignore PyLintBear (C0103)
url(r'^mahjong/(?P<order_by>[\+\-][a-z_]+)/$',
views.KyuDanRankingList.as_view(), name="kyudanranking-list"),
]

View File

@@ -125,7 +125,7 @@ class EventHanchanForm(EventDetailMixin, PermissionRequiredMixin,
"""Display a Formset to add and Edit Hanchans of the specific Event."""
permission_required = 'mahjong_ranking.add_hanchan'
template_name = 'mahjong_ranking/eventhanchan_form.html'
model=models.Hanchan
model = models.Hanchan
def get_context_data(self, **kwargs):
self.event = models.Event.objects.get(pk=self.kwargs['event'])
@@ -160,7 +160,6 @@ class EventHanchanForm(EventDetailMixin, PermissionRequiredMixin,
return self.render_to_response(context)
class EventHanchanList(EventDetailMixin, generic.ListView):
"List all hanchans played on a given event."
model = models.Hanchan

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.mahjong_ranking\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-12 16:27+0100\n"
"POT-Creation-Date: 2019-12-13 23:38+0100\n"
"PO-Revision-Date: 2016-09-28 00:24+0200\n"
"Last-Translator: Christian Berg <xeniac.at@gmail.com>\n"
"Language-Team: Kasu <verein@kasu.at>\n"

View File

@@ -149,7 +149,8 @@ class Game(models.Model):
class Ranking(models.Model):
"""the player scores in the ladder for one season. """
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.PROTECT)
season = models.PositiveSmallIntegerField(_("Season"))
placement = models.PositiveIntegerField(blank=True, null=True)
avg_placement = models.PositiveSmallIntegerField(blank=True, null=True)

View File

@@ -5,7 +5,6 @@ from django.urls import reverse
from events.models import Event
class MaistarGamesSitemap(GenericSitemap):
@staticmethod
def items():

View File

@@ -51,17 +51,22 @@ def clear_personal_data(modeladmin, request, queryset):
raise PermissionDenied
for membership in queryset:
if membership.membership == False:
[ setattr(membership, fieldname, None) for fieldname in membership.nullable_personal_data ]
[ setattr(membership, fieldname, "") for fieldname in membership.blankable_personal_data ]
[setattr(membership, fieldname, None)
for fieldname in membership.nullable_personal_data]
[setattr(membership, fieldname, "")
for fieldname in membership.blankable_personal_data]
membership.is_active = False
membership.confirmed = False
membership.membership = False
membership.save()
cleared_memberships += 1
else:
modeladmin.message_user(request, _("Can't remove personal data from active member %s.") % membership.username, messages.ERROR)
modeladmin.message_user(request, _(
"Can't remove personal data from active member %s.") % membership.username, messages.ERROR)
if cleared_memberships > 0:
modeladmin.message_user(request, _("Cleared %d personal data profiles.") % cleared_memberships, messages.INFO)
modeladmin.message_user(request, _(
"Cleared %d personal data profiles.") % cleared_memberships, messages.INFO)
clear_personal_data.short_description = _("Clear personal Data")

View File

@@ -3,7 +3,7 @@ Created on 03.10.2011
@author: Christian
"""
from datetime import date, timedelta
from datetime import date
from captcha.fields import ReCaptchaField
from django import forms
from django.conf import settings
@@ -68,13 +68,13 @@ class RegistrationForm(MembershipForm):
label=_('Privacy policy'),
help_text=_(
'I have read and understood the <a href="%s">privacy policy</a>') %
Page.objects.get(slug='privacypolicy').get_absolute_url())
Page.objects.get(slug='privacypolicy').get_absolute_url())
membership = forms.BooleanField(
label=_('Membership'),
help_text=_(
'Yes, I confirm that I am in agreement with the '
'<a href="%s">statutes</a> and would like to become a member.') %
Page.objects.get(slug='statutes').get_absolute_url())
Page.objects.get(slug='statutes').get_absolute_url())
recaptcha = ReCaptchaField()

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.membership\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-12 16:27+0100\n"
"POT-Creation-Date: 2019-12-13 23:38+0100\n"
"PO-Revision-Date: 2018-05-08 00:19+0105\n"
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
"Language-Team: Kasu <verein@kasu.at>\n"

View File

@@ -207,9 +207,9 @@ class Membership(AbstractUser):
)
nullable_personal_data = (
'gender', 'birthday', 'telephone', 'street_name', 'post_code', 'city')
'gender', 'birthday', 'telephone', 'street_name', 'post_code', 'city')
blankable_personal_data = (
'email', 'password', 'first_name', 'last_name', 'website',)
'email', 'password', 'first_name', 'last_name', 'website',)
class Meta(object):
"""To manage object ordering and dispalynames on the admin interface."""

View File

@@ -9,7 +9,7 @@ from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.MembershipDetail.as_view()),
url(r'^$', views.MembershipDetail.as_view()),
url(r'^activate/(?P<activation_key>[\d\w]+)/$',
views.ActivateRegistration.as_view(),
name='membership-activate-registration'),

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kasu.utils\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-12 16:27+0100\n"
"POT-Creation-Date: 2019-12-13 23:38+0100\n"
"PO-Revision-Date: 2016-09-28 00:24+0200\n"
"Last-Translator: Christian Berg <xeniac@posteo.at>\n"
"Language-Team: Kasu <verein@kasu.at>\n"

View File

@@ -13,7 +13,6 @@ class CompressHtmlMiddleware:
:param get_response:
"""
self.get_response = get_response
regex = ">[\s]*<"
def __call__(self, request):
"""
@@ -24,7 +23,6 @@ class CompressHtmlMiddleware:
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
if 'text/html' in response['Content-Type']:
response.content = strip_spaces_between_tags(

View File

@@ -44,7 +44,7 @@ class HtmlTestCase(unittest.TestCase):
xxx-xxxx</FONT></DIV></BODY></HTML>
''',
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'
)
)
)
def test_html_cleaner(self):