From 9fe32706accb85643f7391fd8c12145547b9b072 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Sat, 2 May 2020 19:21:12 +0200
Subject: [PATCH] [Reformat] flake8 compatible

---
 aleksis/core/__init__.py           |  2 --
 aleksis/core/apps.py               |  6 ++++--
 aleksis/core/checks.py             | 17 +++++++++++++----
 aleksis/core/forms.py              |  5 +----
 aleksis/core/mixins.py             |  2 +-
 aleksis/core/models.py             |  9 ++++++---
 aleksis/core/preferences.py        |  4 ----
 aleksis/core/settings.py           |  8 ++++----
 aleksis/core/tasks.py              |  1 +
 aleksis/core/urls.py               |  1 -
 aleksis/core/util/apps.py          |  6 +++++-
 aleksis/core/util/core_helpers.py  |  3 ++-
 aleksis/core/util/middlewares.py   |  2 --
 aleksis/core/util/notifications.py |  3 ++-
 aleksis/core/util/predicates.py    |  8 ++++++--
 aleksis/core/views.py              |  9 +++------
 16 files changed, 48 insertions(+), 38 deletions(-)

diff --git a/aleksis/core/__init__.py b/aleksis/core/__init__.py
index 802595844..21a49f078 100644
--- a/aleksis/core/__init__.py
+++ b/aleksis/core/__init__.py
@@ -1,5 +1,3 @@
-from django.utils.translation import gettext_lazy as _
-
 import pkg_resources
 
 try:
diff --git a/aleksis/core/apps.py b/aleksis/core/apps.py
index 921d12ff7..93b383001 100644
--- a/aleksis/core/apps.py
+++ b/aleksis/core/apps.py
@@ -1,9 +1,8 @@
 from typing import Any, List, Optional, Tuple
 
 import django.apps
-from django.contrib.auth.signals import user_logged_in
 from django.http import HttpRequest
-from django.utils.translation import gettext_lazy as _
+from django.shortcuts import get_user_model
 
 from dynamic_preferences.registries import preference_models
 
@@ -17,6 +16,9 @@ from .util.core_helpers import has_person
 from .util.sass_helpers import clean_scss
 
 
+User = get_user_model()
+
+
 class CoreConfig(AppConfig):
     name = "aleksis.core"
     verbose_name = "AlekSIS — The Free School Information System"
diff --git a/aleksis/core/checks.py b/aleksis/core/checks.py
index 19c8b77ba..c1a3dfb24 100644
--- a/aleksis/core/checks.py
+++ b/aleksis/core/checks.py
@@ -22,8 +22,12 @@ def check_app_configs_base_class(
         if not isinstance(app_config, AppConfig):
             results.append(
                 Warning(
-                    f"App config {app_config.name} does not derive from aleksis.core.util.apps.AppConfig.",
-                    hint="Ensure the app uses the correct base class for all registry functionality to work.",
+                    f"App config {app_config.name} does not derive"
+                    "from aleksis.core.util.apps.AppConfig.",
+                    hint=(
+                        "Ensure the app uses the correct base class for all"
+                        "registry functionality to work."
+                    ),
                     obj=app_config,
                     id="aleksis.core.W001",
                 )
@@ -48,8 +52,13 @@ def check_app_models_base_class(
             if ExtensibleModel not in model.__mro__ and PureDjangoModel not in model.__mro__:
                 results.append(
                     Warning(
-                        f"Model {model._meta.object_name} in app config {app_config.name} does not derive from aleksis.core.mixins.ExtensibleModel.",
-                        hint="Ensure all models in AlekSIS use ExtensibleModel as base. If your deviation is intentional, you can add the PureDjangoModel mixin instead to silence this warning.",
+                        f"Model {model._meta.object_name} in app config {app_config.name} does"
+                        "not derive from aleksis.core.mixins.ExtensibleModel.",
+                        hint=(
+                            "Ensure all models in AlekSIS use ExtensibleModel as base."
+                            "If your deviation is intentional, you can add the PureDjangoModel"
+                            "mixin instead to silence this warning."
+                        ),
                         obj=model,
                         id="aleksis.core.W002",
                     )
diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py
index a7989eb48..09f57a249 100644
--- a/aleksis/core/forms.py
+++ b/aleksis/core/forms.py
@@ -1,11 +1,8 @@
 from datetime import datetime, time
-from typing import Optional
 
 from django import forms
 from django.contrib.auth import get_user_model
-from django.contrib.contenttypes.models import ContentType
 from django.core.exceptions import ValidationError
-from django.utils import timezone
 from django.utils.translation import gettext_lazy as _
 
 from django_select2.forms import ModelSelect2MultipleWidget, Select2Widget
@@ -13,7 +10,7 @@ from dynamic_preferences.forms import PreferenceForm
 from material import Fieldset, Layout, Row
 
 from .mixins import ExtensibleForm
-from .models import Announcement, AnnouncementRecipient, Group, Person
+from .models import Announcement, Group, Person
 from .registries import (
     group_preferences_registry,
     person_preferences_registry,
diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py
index 35fb855c6..b7401b613 100644
--- a/aleksis/core/mixins.py
+++ b/aleksis/core/mixins.py
@@ -17,7 +17,7 @@ from rules.contrib.admin import ObjectPermissionsModelAdmin
 
 
 @reversion.register()
-class ExtensibleModel(CRUDMixin):
+class ExtensibleModel():
     """ Base model for all objects in AlekSIS apps
 
     This base model ensures all objects in AlekSIS apps fulfill the
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 542a40255..bf92167d1 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -474,7 +474,9 @@ class Announcement(ExtensibleModel):
         return persons
 
     def get_recipients_for_model(self, obj: Union[models.Model]) -> Sequence[models.Model]:
-        """ Get all recipients for this announcement with a special content type (provided through model) """
+        """ Get all recipients for this announcement
+        with a special content type (provided through model)
+        """
 
         ct = ContentType.objects.get_for_model(obj)
         return [r.recipient for r in self.recipients.filter(content_type=ct)]
@@ -533,8 +535,9 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel):
 
     If your widget does not add any database fields, you should mark it as a proxy model.
 
-    You can provide a Media meta class with custom JS and CSS files which will be added to html head.
-    For further information on media definition see https://docs.djangoproject.com/en/3.0/topics/forms/media/
+    You can provide a Media meta class with custom JS and CSS files which
+    will be added to html head.  For further information on media definition
+    see https://docs.djangoproject.com/en/3.0/topics/forms/media/
 
     Example::
 
diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py
index c36387582..56e7b48d5 100644
--- a/aleksis/core/preferences.py
+++ b/aleksis/core/preferences.py
@@ -2,18 +2,14 @@ from django.conf import settings
 from django.forms import EmailField, ImageField, URLField
 from django.utils.translation import gettext_lazy as _
 
-from colorfield.widgets import ColorWidget
 from dynamic_preferences.preferences import Section
-from dynamic_preferences.registries import global_preferences_registry
 from dynamic_preferences.types import (
-    BooleanPreference,
     ChoicePreference,
     FilePreference,
     StringPreference,
 )
 
 from .registries import (
-    group_preferences_registry,
     person_preferences_registry,
     site_preferences_registry,
 )
diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index 3153f9d8d..b73208afb 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -1,9 +1,6 @@
 import os
-import sys
 from glob import glob
-from importlib import import_module
 
-from django.apps import apps
 from django.utils.translation import gettext_lazy as _
 
 from dynaconf import LazySettings
@@ -482,7 +479,10 @@ PWA_APP_SPLASH_SCREEN = [
         "src": lazy_get_favicon_url(
             title="pwa_icon", size=192, rel="apple", default=STATIC_URL + "icons/apple_180.png"
         ),
-        "media": "(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)",
+        "media": (
+            "(device-width: 320px) and (device-height: 568px) and"
+            "(-webkit-device-pixel-ratio: 2)"
+        ),
     }
 ]
 
diff --git a/aleksis/core/tasks.py b/aleksis/core/tasks.py
index 9a9f1ea39..48f73ac0a 100644
--- a/aleksis/core/tasks.py
+++ b/aleksis/core/tasks.py
@@ -1,3 +1,4 @@
+from django.conf import settings
 from django.core import management
 
 from .util.core_helpers import celery_optional
diff --git a/aleksis/core/urls.py b/aleksis/core/urls.py
index 6f58fc46e..f5b7aa9e9 100644
--- a/aleksis/core/urls.py
+++ b/aleksis/core/urls.py
@@ -9,7 +9,6 @@ from django.views.i18n import JavaScriptCatalog
 import calendarweek.django
 import debug_toolbar
 from django_js_reverse.views import urls_js
-from rules.contrib.views import permission_required
 from two_factor.urls import urlpatterns as tf_urls
 
 from . import views
diff --git a/aleksis/core/util/apps.py b/aleksis/core/util/apps.py
index c1162d4ea..8d41b2d89 100644
--- a/aleksis/core/util/apps.py
+++ b/aleksis/core/util/apps.py
@@ -2,17 +2,21 @@ from importlib import import_module
 from typing import Any, List, Optional, Sequence, Tuple
 
 import django.apps
+from django.contrib.auth import get_user_model
 from django.contrib.auth.signals import user_logged_in, user_logged_out
 from django.db.models.signals import post_migrate, pre_migrate
 from django.http import HttpRequest
 
 from dynamic_preferences.signals import preference_updated
-from license_expression import LicenseSymbol, Licensing
+from license_expression import Licensing
 from spdx_license_list import LICENSES
 
 from .core_helpers import copyright_years
 
 
+User = get_user_model()
+
+
 class AppConfig(django.apps.AppConfig):
     """ An extended version of DJango's AppConfig container. """
 
diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py
index aa4710293..2f44503e7 100644
--- a/aleksis/core/util/core_helpers.py
+++ b/aleksis/core/util/core_helpers.py
@@ -4,7 +4,7 @@ from datetime import datetime, timedelta
 from importlib import import_module
 from itertools import groupby
 from operator import itemgetter
-from typing import Any, Callable, List, Optional, Sequence, Union
+from typing import Any, Callable, Optional, Sequence, Union
 from uuid import uuid4
 
 from django.conf import settings
@@ -12,6 +12,7 @@ from django.db.models import Model
 from django.http import HttpRequest
 from django.utils import timezone
 from django.utils.functional import lazy
+from django.shortcuts import get_object_or_404
 
 
 def copyright_years(years: Sequence[int], seperator: str = ", ", joiner: str = "–") -> str:
diff --git a/aleksis/core/util/middlewares.py b/aleksis/core/util/middlewares.py
index 79f15a139..fc86082ec 100644
--- a/aleksis/core/util/middlewares.py
+++ b/aleksis/core/util/middlewares.py
@@ -1,8 +1,6 @@
 from typing import Callable
 
-from django.core.exceptions import PermissionDenied
 from django.http import HttpRequest, HttpResponse
-from django.utils.translation import gettext_lazy as _
 
 from ..models import DummyPerson
 from .core_helpers import has_person
diff --git a/aleksis/core/util/notifications.py b/aleksis/core/util/notifications.py
index 7ab63a64e..fd294e5a1 100644
--- a/aleksis/core/util/notifications.py
+++ b/aleksis/core/util/notifications.py
@@ -10,7 +10,8 @@ from django.utils.translation import gettext_lazy as _
 
 from templated_email import send_templated_mail
 
-from .core_helpers import celery_optional, lazy_preference
+from .models import Notification
+from .core_helpers import lazy_preference
 
 try:
     from twilio.rest import Client as TwilioClient
diff --git a/aleksis/core/util/predicates.py b/aleksis/core/util/predicates.py
index 6c8deb132..d76df8310 100644
--- a/aleksis/core/util/predicates.py
+++ b/aleksis/core/util/predicates.py
@@ -58,7 +58,9 @@ def has_object_perm(perm: str):
 
 
 def has_any_object(perm: str, klass):
-    """ Build predicate which checks whether a user has access to objects with the provided permission """
+    """ Build predicate which checks whether a user has access
+    to objects with the provided permission
+    """
 
     name = f"has_any_object:{perm}"
 
@@ -93,6 +95,8 @@ def is_group_owner(user: User, group: Group) -> bool:
 
 @predicate
 def is_notification_recipient(user: User, obj: Model) -> bool:
-    """ Predicate which checks whether the recipient of the notification a user wants to mark read is this user """
+    """ Predicate which checks whether the recipient of the
+    notification a user wants to mark read is this user
+    """
 
     return user == obj.recipient.user
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index fab71fd0c..49594d647 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -1,4 +1,3 @@
-from importlib import import_module
 from typing import Optional
 
 from django.apps import apps
@@ -28,7 +27,7 @@ from .forms import (
     PersonsAccountsFormSet,
     SitePreferenceForm,
 )
-from .models import Activity, Announcement, DashboardWidget, Group, Notification, Person
+from .models import Announcement, DashboardWidget, Group, Notification, Person
 from .registries import (
     group_preferences_registry,
     person_preferences_registry,
@@ -317,8 +316,6 @@ def system_status(request: HttpRequest) -> HttpResponse:
 def notification_mark_read(request: HttpRequest, id_: int) -> HttpResponse:
     """ Mark a notification read """
 
-    context = {}
-
     notification = objectgetter_optional(Notification, None, False)(request, id_)
 
     notification.read = True
@@ -431,14 +428,14 @@ def preferences(
             raise PermissionDenied()
     elif registry_name == "person":
         registry = person_preferences_registry
-        instance = get_person_by_pk(request, pk)
+        instance = objectgetter_optional(Person, None, False)(request, pk)
         form_class = PersonPreferenceForm
 
         if not request.user.has_perm("core.change_person_preferences", instance):
             raise PermissionDenied()
     elif registry_name == "group":
         registry = group_preferences_registry
-        instance = get_group_by_pk(request, pk)
+        instance = objectgetter_optional(Group, None, False)(request, pk)
         form_class = GroupPreferenceForm
 
         if not request.user.has_perm("core.change_group_preferences", instance):
-- 
GitLab