diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 609df45a0..af37df551 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -22,7 +22,6 @@
+ [For code in general](#for-code-in-general)
- [Quotation marks inside strings](#quotation-marks-inside-strings)
- [String concatenation](#string-concatenation)
- - [Imports](#imports)
+ [For each module (file)](#for-each-module-file)
- [Folder/directory location](#folderdirectory-location)
- [Filename](#filename)
@@ -158,22 +157,6 @@ if an f-string is hard to read, extract inserted code to variables, and insert t
For translation strings (using `gettext` or `gettext_lazy`), use the standard `format()` method for concatenation.
For example:
`_("{chant} Batman!").format(chant="NaN" * 15)` (where `gettext_lazy` is imported as `_`).
-#### Imports
-
-Group imports in three "paragraphs" (separated by an empty line) in the following order:
-1. Modules from Python's standard library
-2. Third-party modules
-3. Modules part of this project
-
-Within each import group/paragraph, sort plain imports first, followed by `from` imports.
-Additionally, sort imports alphabetically, including names listed in `from` imports.
-
*Tip: All of this can easily be done using PyCharm's
-[Optimize Imports feature](https://www.jetbrains.com/pycharm/guide/tips/optimize-imports/) (Ctrl+Alt+O/⌃⌥O by default) -
-possibly requiring some tweaking of the settings.*
-
-All imports in a file that are from the same app as the mentioned file, should be relative
-(e.g. `from .models import User` or `from .. import views`).
-
### For each module (file)
diff --git a/pyproject.toml b/pyproject.toml
index 0230c5614..b50d6c73e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -68,13 +68,19 @@ show-fixes = true
format.docstring-code-format = true
lint.select = [
- "E", # flake8/pycodestyle (Error)
- "F", # flake8/Pyflakes
+ "E", # flake8/pycodestyle (Error)
+ "F", # flake8/Pyflakes
+ "I", # isort
+ "TID252", # https://docs.astral.sh/ruff/rules/relative-imports/#relative-imports-tid252
]
# Disable line length check in migrations
lint.per-file-ignores."**/migrations/**" = [ "E501" ]
+lint.flake8-tidy-imports.ban-relative-imports = "all"
+
+lint.isort.combine-as-imports = true
+
# Ignore E501 for comments starting with TODO, FIXME, etc.
lint.pycodestyle.ignore-overlong-task-comments = true
diff --git a/src/announcements/admin.py b/src/announcements/admin.py
index 8865e1c7b..257d49fa3 100644
--- a/src/announcements/admin.py
+++ b/src/announcements/admin.py
@@ -2,12 +2,12 @@
from django.template.defaultfilters import urlize
from django.utils.translation import gettext_lazy as _
+from announcements.models import Announcement
from util.admin_utils import (
DefaultAdminWidgetsMixin,
list_filter_factory,
search_escaped_and_unescaped,
)
-from .models import Announcement
class AnnouncementAdmin(DefaultAdminWidgetsMixin, admin.ModelAdmin):
diff --git a/src/announcements/forms.py b/src/announcements/forms.py
index 013fb90bd..e415c6ab3 100644
--- a/src/announcements/forms.py
+++ b/src/announcements/forms.py
@@ -1,7 +1,7 @@
from django.forms import ModelForm
+from announcements.models import Announcement
from web.widgets import SemanticChoiceInput, SemanticDateTimeInput
-from .models import Announcement
class AnnouncementForm(ModelForm):
diff --git a/src/announcements/migrations/0001_initial.py b/src/announcements/migrations/0001_initial.py
index 7a2a15917..99c4d92d0 100644
--- a/src/announcements/migrations/0001_initial.py
+++ b/src/announcements/migrations/0001_initial.py
@@ -1,7 +1,9 @@
# Generated by Django 3.0.4 on 2020-03-14 12:57
import datetime
+
from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/announcements/migrations/0002_help_text_and_naming.py b/src/announcements/migrations/0002_help_text_and_naming.py
index c880d424f..19a4d1f00 100644
--- a/src/announcements/migrations/0002_help_text_and_naming.py
+++ b/src/announcements/migrations/0002_help_text_and_naming.py
@@ -1,6 +1,7 @@
# Generated by Django 3.0.4 on 2020-03-14 18:38
import datetime
+
from django.db import migrations, models
diff --git a/src/announcements/migrations/0003_use_timezone_aware_default.py b/src/announcements/migrations/0003_use_timezone_aware_default.py
index 98a1c403d..6cad3b6d5 100644
--- a/src/announcements/migrations/0003_use_timezone_aware_default.py
+++ b/src/announcements/migrations/0003_use_timezone_aware_default.py
@@ -1,7 +1,7 @@
# Generated by Django 3.0.11 on 2020-11-10 16:21
-from django.db import migrations, models
import django.utils.timezone
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/announcements/migrations/0004_remove_announcement_fields_max_length_and_null.py b/src/announcements/migrations/0004_remove_announcement_fields_max_length_and_null.py
index a1227ffe5..721e7f787 100644
--- a/src/announcements/migrations/0004_remove_announcement_fields_max_length_and_null.py
+++ b/src/announcements/migrations/0004_remove_announcement_fields_max_length_and_null.py
@@ -1,6 +1,7 @@
# Generated by Django 3.1.2 on 2020-10-30 00:10
from django.db import migrations
+
import web.modelfields
import web.multilingual.modelfields
diff --git a/src/announcements/templatetags/announcement_tags.py b/src/announcements/templatetags/announcement_tags.py
index 4643fc264..b2691dac4 100644
--- a/src/announcements/templatetags/announcement_tags.py
+++ b/src/announcements/templatetags/announcement_tags.py
@@ -1,6 +1,6 @@
from django import template
-from ..models import Announcement
+from announcements.models import Announcement
register = template.Library()
diff --git a/src/announcements/tests/test_urls.py b/src/announcements/tests/test_urls.py
index 881a7e6f2..c607cf91a 100644
--- a/src/announcements/tests/test_urls.py
+++ b/src/announcements/tests/test_urls.py
@@ -2,12 +2,12 @@
from django.utils import timezone
from django_hosts import reverse
+from announcements.models import Announcement
from util.test_utils import (
Get,
assert_requesting_paths_succeeds,
generate_all_admin_urls_for_model_and_objs,
)
-from ..models import Announcement
class UrlTests(TestCase):
diff --git a/src/announcements/urls.py b/src/announcements/urls.py
index 05c4c6222..b49a07a58 100644
--- a/src/announcements/urls.py
+++ b/src/announcements/urls.py
@@ -1,7 +1,6 @@
from django.urls import include, path
-from . import views
-
+from announcements import views
urlpatterns = []
diff --git a/src/announcements/views.py b/src/announcements/views.py
index e870928fd..e9635c85a 100644
--- a/src/announcements/views.py
+++ b/src/announcements/views.py
@@ -5,9 +5,9 @@
from django.utils.translation import gettext_lazy as _
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
+from announcements.forms import AnnouncementForm
+from announcements.models import Announcement
from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin
-from .forms import AnnouncementForm
-from .models import Announcement
class AdminAnnouncementListView(PermissionRequiredMixin, ListView):
diff --git a/src/card/formfields.py b/src/card/formfields.py
index 01809df67..cb5cfb291 100644
--- a/src/card/formfields.py
+++ b/src/card/formfields.py
@@ -2,8 +2,8 @@
from django.utils.text import capfirst
from django.utils.translation import gettext_lazy as _
-from .validators import card_number_input_validator
-from .widgets import CardNumberInput
+from card.validators import card_number_input_validator
+from card.widgets import CardNumberInput
class CardNumberField(forms.CharField):
diff --git a/src/card/modelfields.py b/src/card/modelfields.py
index cef494d50..965fb68ab 100644
--- a/src/card/modelfields.py
+++ b/src/card/modelfields.py
@@ -1,7 +1,7 @@
from django.db import models
from django.utils.translation import gettext_lazy as _
-from .validators import card_number_validator
+from card.validators import card_number_validator
class CardNumberField(models.CharField):
@@ -25,7 +25,7 @@ def __init__(self, **kwargs):
)
def formfield(self, **kwargs):
- from . import formfields # Avoids circular importing
+ from card import formfields # Avoids circular importing
return super().formfield(
**{
diff --git a/src/card/tests/test_modelfields.py b/src/card/tests/test_modelfields.py
index 6da1364f4..23365c228 100644
--- a/src/card/tests/test_modelfields.py
+++ b/src/card/tests/test_modelfields.py
@@ -1,6 +1,6 @@
from unittest import TestCase
-from ..modelfields import CardNumber, CardNumberField
+from card.modelfields import CardNumber, CardNumberField
class CardNumberModelFieldTest(TestCase):
diff --git a/src/card/utils.py b/src/card/utils.py
index e119e484d..c45306c35 100644
--- a/src/card/utils.py
+++ b/src/card/utils.py
@@ -1,8 +1,8 @@
from django.core.exceptions import ValidationError
+from card.formfields import CardNumberField
from make_queue.models.course import Printer3DCourse
from users.models import User
-from .formfields import CardNumberField
def is_valid(card_number):
diff --git a/src/card/validators.py b/src/card/validators.py
index 7fbd3f0b5..d5dfd9b3b 100644
--- a/src/card/validators.py
+++ b/src/card/validators.py
@@ -1,7 +1,6 @@
from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy as _
-
# Used for validating user input through the form field
card_number_input_validator = RegexValidator(
r"^\d{7,10}$", _("Card number must be between seven and ten digits long.")
diff --git a/src/card/views.py b/src/card/views.py
index 1edcb8dbe..eb9bee2b8 100644
--- a/src/card/views.py
+++ b/src/card/views.py
@@ -7,7 +7,7 @@
from django.views import View
from django.views.decorators.csrf import csrf_exempt
-from . import utils
+from card import utils
@method_decorator(csrf_exempt, name="dispatch")
diff --git a/src/card/widgets.py b/src/card/widgets.py
index 4b5f646a5..2c12ebfe5 100644
--- a/src/card/widgets.py
+++ b/src/card/widgets.py
@@ -1,6 +1,6 @@
from django import forms
-from .modelfields import CardNumber
+from card.modelfields import CardNumber
class CardNumberInput(forms.TextInput):
diff --git a/src/checkin/admin.py b/src/checkin/admin.py
index 1af281c3f..0373a1563 100644
--- a/src/checkin/admin.py
+++ b/src/checkin/admin.py
@@ -1,7 +1,7 @@
from django.contrib import admin
+from checkin.models import Profile, Skill, SuggestSkill, UserSkill
from util.admin_utils import DefaultAdminWidgetsMixin
-from .models import Profile, Skill, SuggestSkill, UserSkill
class ProfileAdmin(DefaultAdminWidgetsMixin, admin.ModelAdmin):
diff --git a/src/checkin/api/views.py b/src/checkin/api/views.py
index e60683e30..54513fe12 100644
--- a/src/checkin/api/views.py
+++ b/src/checkin/api/views.py
@@ -7,8 +7,8 @@
from django.views.generic import DeleteView, TemplateView
from card import utils as card_utils
+from checkin.models import RegisterProfile, Skill, SuggestSkill
from util.view_utils import PreventGetRequestsMixin, UTF8JsonResponse
-from ..models import RegisterProfile, Skill, SuggestSkill
class AdminAPISuggestSkillVoteView(
diff --git a/src/checkin/migrations/0001_initial.py b/src/checkin/migrations/0001_initial.py
index 39adb0557..84aa02287 100644
--- a/src/checkin/migrations/0001_initial.py
+++ b/src/checkin/migrations/0001_initial.py
@@ -1,8 +1,8 @@
# Generated by Django 2.0.2 on 2018-05-02 14:37
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/checkin/migrations/0009_alter_verbose_names_and_related_names.py b/src/checkin/migrations/0009_alter_verbose_names_and_related_names.py
index 830835ff6..78eefee21 100644
--- a/src/checkin/migrations/0009_alter_verbose_names_and_related_names.py
+++ b/src/checkin/migrations/0009_alter_verbose_names_and_related_names.py
@@ -1,8 +1,8 @@
# Generated by Django 2.2.5 on 2019-12-31 00:52
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/checkin/migrations/0011_alter_profile_and_skill_and_suggestskill_image_filename.py b/src/checkin/migrations/0011_alter_profile_and_skill_and_suggestskill_image_filename.py
index e6dc55b8d..abd9a44a4 100644
--- a/src/checkin/migrations/0011_alter_profile_and_skill_and_suggestskill_image_filename.py
+++ b/src/checkin/migrations/0011_alter_profile_and_skill_and_suggestskill_image_filename.py
@@ -1,9 +1,11 @@
# Generated by Django 4.0.1 on 2022-01-20 19:12
-from django.conf import settings
-from django.db import migrations, models
import functools
from pathlib import Path
+
+from django.conf import settings
+from django.db import migrations, models
+
import util.modelfields
import util.storage
diff --git a/src/checkin/migrations/0012_profile_user_non_nullable.py b/src/checkin/migrations/0012_profile_user_non_nullable.py
index 664d3af7c..77f6de1de 100644
--- a/src/checkin/migrations/0012_profile_user_non_nullable.py
+++ b/src/checkin/migrations/0012_profile_user_non_nullable.py
@@ -1,8 +1,8 @@
# Generated by Django 2.2.5 on 2019-12-31 00:52
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
def delete_profiles_without_user(apps, schema_editor):
diff --git a/src/checkin/tests/test_urls.py b/src/checkin/tests/test_urls.py
index 900cbd263..74512c7b4 100644
--- a/src/checkin/tests/test_urls.py
+++ b/src/checkin/tests/test_urls.py
@@ -1,13 +1,13 @@
from django.test import TestCase
from django_hosts import reverse
+from checkin.models import Profile, Skill, SuggestSkill, UserSkill
from users.models import User
from util.test_utils import (
Get,
assert_requesting_paths_succeeds,
generate_all_admin_urls_for_model_and_objs,
)
-from ..models import Profile, Skill, SuggestSkill, UserSkill
class UrlTests(TestCase):
diff --git a/src/checkin/urls.py b/src/checkin/urls.py
index b850efc20..a5b020463 100644
--- a/src/checkin/urls.py
+++ b/src/checkin/urls.py
@@ -1,8 +1,7 @@
from django.contrib.auth.decorators import login_required
from django.urls import path
-from . import views
-
+from checkin import views
urlpatterns = [
# This path is currently not in use
diff --git a/src/checkin/views.py b/src/checkin/views.py
index fb8f2e930..e8c7abff3 100644
--- a/src/checkin/views.py
+++ b/src/checkin/views.py
@@ -13,9 +13,9 @@
from django.views.generic import TemplateView
from card.views import RFIDView
-from util.view_utils import PreventGetRequestsMixin
-from .models import Profile, RegisterProfile, Skill, SuggestSkill, UserSkill
+from checkin.models import Profile, RegisterProfile, Skill, SuggestSkill, UserSkill
from make_queue.models.course import CoursePermission
+from util.view_utils import PreventGetRequestsMixin
class AdminCheckInView(RFIDView):
diff --git a/src/contentbox/admin.py b/src/contentbox/admin.py
index b9513f56d..6334322fc 100644
--- a/src/contentbox/admin.py
+++ b/src/contentbox/admin.py
@@ -2,9 +2,9 @@
from django.utils.translation import gettext_lazy as _
from simple_history.admin import SimpleHistoryAdmin
+from contentbox.models import ContentBox
from util import html_utils
from util.admin_utils import DefaultAdminWidgetsMixin, search_escaped_and_unescaped
-from .models import ContentBox
class ContentBoxAdmin(DefaultAdminWidgetsMixin, SimpleHistoryAdmin):
diff --git a/src/contentbox/forms.py b/src/contentbox/forms.py
index 330927962..d6c3ba66d 100644
--- a/src/contentbox/forms.py
+++ b/src/contentbox/forms.py
@@ -1,11 +1,11 @@
from django import forms
from django.conf import settings
+from contentbox.models import ContentBox
from web.multilingual.widgets import (
MultiLingualRichTextUploading,
MultiLingualTextInput,
)
-from .models import ContentBox
class ContentBoxForm(forms.ModelForm):
diff --git a/src/contentbox/migrations/0005_auto_20181209_1836.py b/src/contentbox/migrations/0005_auto_20181209_1836.py
index aa2a2f98b..798c5a890 100644
--- a/src/contentbox/migrations/0005_auto_20181209_1836.py
+++ b/src/contentbox/migrations/0005_auto_20181209_1836.py
@@ -1,6 +1,8 @@
# Generated by Django 2.1.2 on 2018-12-09 17:36
import json
+
from django.db import migrations
+
import web.multilingual.modelfields
diff --git a/src/contentbox/migrations/0008_contentbox_last_modified.py b/src/contentbox/migrations/0008_contentbox_last_modified.py
index 5ff587045..95fc1232b 100644
--- a/src/contentbox/migrations/0008_contentbox_last_modified.py
+++ b/src/contentbox/migrations/0008_contentbox_last_modified.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.8 on 2021-10-25 18:28
from datetime import datetime
+
from django.db import migrations, models
diff --git a/src/contentbox/migrations/0011_historicalcontentbox.py b/src/contentbox/migrations/0011_historicalcontentbox.py
index fe9350c71..26cb14956 100644
--- a/src/contentbox/migrations/0011_historicalcontentbox.py
+++ b/src/contentbox/migrations/0011_historicalcontentbox.py
@@ -1,9 +1,10 @@
# Generated by Django 4.0.2 on 2022-02-28 23:10
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/contentbox/migrations/0012_rename_title_contentbox_url_name.py b/src/contentbox/migrations/0012_rename_title_contentbox_url_name.py
index e2c2bad1f..5dfb5be0a 100644
--- a/src/contentbox/migrations/0012_rename_title_contentbox_url_name.py
+++ b/src/contentbox/migrations/0012_rename_title_contentbox_url_name.py
@@ -1,8 +1,9 @@
# Generated by Django 4.0.1 on 2022-01-11 18:56
+import re
+
import django.core.validators
from django.db import migrations, models
-import re
class Migration(migrations.Migration):
diff --git a/src/contentbox/migrations/0013_contentbox_title.py b/src/contentbox/migrations/0013_contentbox_title.py
index 1b68fee55..72ea7f82c 100644
--- a/src/contentbox/migrations/0013_contentbox_title.py
+++ b/src/contentbox/migrations/0013_contentbox_title.py
@@ -1,6 +1,7 @@
# Generated by Django 4.0.1 on 2022-01-11 19:54
from django.db import migrations
+
import web.multilingual.modelfields
from web.multilingual.data_structures import MultiLingualTextStructure
diff --git a/src/contentbox/migrations/0015_historicalcontentbox_extra_change_permissions.py b/src/contentbox/migrations/0015_historicalcontentbox_extra_change_permissions.py
index 10538a34e..735763226 100644
--- a/src/contentbox/migrations/0015_historicalcontentbox_extra_change_permissions.py
+++ b/src/contentbox/migrations/0015_historicalcontentbox_extra_change_permissions.py
@@ -1,7 +1,7 @@
# Generated by Django 4.1.3 on 2022-11-21 03:42
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/contentbox/tests/test_urls.py b/src/contentbox/tests/test_urls.py
index 276fe1d8a..056e5ac7e 100644
--- a/src/contentbox/tests/test_urls.py
+++ b/src/contentbox/tests/test_urls.py
@@ -11,6 +11,8 @@
from django.urls import URLPattern, URLResolver
from django_hosts import reverse
+from contentbox.models import ContentBox
+from contentbox.views import ContentBoxDetailView
from docs.tests.test_urls import DOCS_CLIENT_DEFAULTS
from internal.tests.test_urls import INTERNAL_CLIENT_DEFAULTS, reverse_internal
from users.models import User
@@ -25,8 +27,6 @@
from web.multilingual.data_structures import MultiLingualTextStructure
from web.multilingual.widgets import MultiLingualTextEdit
from web.tests.test_urls import ADMIN_CLIENT_DEFAULTS
-from ..models import ContentBox
-from ..views import ContentBoxDetailView
class ReverseCallable(Protocol):
diff --git a/src/contentbox/tests/test_views.py b/src/contentbox/tests/test_views.py
index 06aba30e8..e90b4b944 100644
--- a/src/contentbox/tests/test_views.py
+++ b/src/contentbox/tests/test_views.py
@@ -8,18 +8,21 @@
from django.test import Client, TestCase, override_settings
from django_hosts import reverse
+from contentbox.forms import ContentBoxForm, EditSourceContentBoxForm
+from contentbox.models import ContentBox
+from contentbox.tests.urls import hosts, urls_main
+from contentbox.tests.urls.hosts import TEST_INTERNAL_CLIENT_DEFAULTS
+from contentbox.tests.urls.urls_internal import (
+ INTERNAL_TEST_URL_NAME,
+ internal_change_perm,
+)
+from contentbox.tests.urls.urls_main import TEST_MULTI_URL_NAMES, TEST_URL_NAME
from users.models import User
from util.auth_utils import get_perm
from util.test_utils import assertRedirectsWithPathPrefix
from util.url_utils import reverse_admin
from web.multilingual.widgets import MultiLingualTextEdit
from web.tests.test_urls import ADMIN_CLIENT_DEFAULTS
-from .urls import hosts, urls_main
-from .urls.hosts import TEST_INTERNAL_CLIENT_DEFAULTS
-from .urls.urls_internal import INTERNAL_TEST_URL_NAME, internal_change_perm
-from .urls.urls_main import TEST_MULTI_URL_NAMES, TEST_URL_NAME
-from ..forms import ContentBoxForm, EditSourceContentBoxForm
-from ..models import ContentBox
@override_settings(
diff --git a/src/contentbox/tests/urls/hosts.py b/src/contentbox/tests/urls/hosts.py
index 87b2c9504..fbb5d2e6c 100644
--- a/src/contentbox/tests/urls/hosts.py
+++ b/src/contentbox/tests/urls/hosts.py
@@ -14,9 +14,8 @@
)
settings.ALLOWED_REDIRECT_HOSTS = generate_all_hosts(settings.ALL_SUBDOMAINS)
+from contentbox.tests.urls import urls_internal, urls_main # noqa: E402
from web.hosts import host_patterns as base_host_patterns # noqa: E402
-from . import urls_internal, urls_main # noqa: E402
-
host_patterns = base_host_patterns + [
host(r"test-internal", urls_internal.__name__, name="test_internal"),
diff --git a/src/contentbox/tests/urls/urls_internal.py b/src/contentbox/tests/urls/urls_internal.py
index da01e48c1..11282749f 100644
--- a/src/contentbox/tests/urls/urls_internal.py
+++ b/src/contentbox/tests/urls/urls_internal.py
@@ -1,9 +1,8 @@
from django.conf.urls.i18n import i18n_patterns
from django.urls import path
+from contentbox.views import ContentBoxDetailView, ContentBoxUpdateView
from internal.urls import urlpatterns as internal_urlpatterns
-from ...views import ContentBoxDetailView, ContentBoxUpdateView
-
INTERNAL_TEST_URL_NAME = "internal_test_url_name"
internal_change_perm = "contentbox.perm1"
diff --git a/src/contentbox/tests/urls/urls_main.py b/src/contentbox/tests/urls/urls_main.py
index 6ba0b1331..6fcaeda4e 100644
--- a/src/contentbox/tests/urls/urls_main.py
+++ b/src/contentbox/tests/urls/urls_main.py
@@ -1,8 +1,7 @@
from django.conf.urls.i18n import i18n_patterns
+from contentbox.views import ContentBoxDetailView
from web.urls import urlpatterns as base_urlpatterns
-from ...views import ContentBoxDetailView
-
TEST_URL_NAME = "test_url_name"
TEST_MULTI_URL_NAMES = ("test_main", "test_alt1", "test_alt2")
diff --git a/src/contentbox/views.py b/src/contentbox/views.py
index e5139f7ba..7c8b1c39d 100644
--- a/src/contentbox/views.py
+++ b/src/contentbox/views.py
@@ -10,10 +10,10 @@
from django.views.generic import DetailView, UpdateView
from django_hosts import reverse
+from contentbox.forms import ContentBoxForm, EditSourceContentBoxForm
+from contentbox.models import ContentBox
from util.url_utils import get_reverse_host_kwargs_from_url, reverse_admin
from util.view_utils import CustomFieldsetFormMixin
-from .forms import ContentBoxForm, EditSourceContentBoxForm
-from .models import ContentBox
class ContentBoxDetailView(DetailView):
diff --git a/src/dataporten/ldap_utils.py b/src/dataporten/ldap_utils.py
index 7e4fc5d89..fafd1c25c 100644
--- a/src/dataporten/ldap_utils.py
+++ b/src/dataporten/ldap_utils.py
@@ -6,7 +6,6 @@
from users.models import User
-
LDAP_HOST = "ldap://at.ntnu.no"
LDAP_BASE = "dc=ntnu, dc=no"
diff --git a/src/dataporten/tests/test_views.py b/src/dataporten/tests/test_views.py
index aceca386b..097d8d7af 100644
--- a/src/dataporten/tests/test_views.py
+++ b/src/dataporten/tests/test_views.py
@@ -6,10 +6,10 @@
from django_hosts import reverse
from social_django.models import UserSocialAuth
+from dataporten import views
+from dataporten.social import DataportenOAuth2
from users.models import User
from util.test_utils import mock_module_attrs
-from .. import views
-from ..social import DataportenOAuth2
def mock_complete(*args, **kwargs):
diff --git a/src/dataporten/views.py b/src/dataporten/views.py
index b8a9d756c..d6f25f005 100644
--- a/src/dataporten/views.py
+++ b/src/dataporten/views.py
@@ -6,9 +6,9 @@
from social_django import views as social_views
from social_django.models import UserSocialAuth
+from dataporten import ldap_utils
from users.models import User
from util.logging_utils import log_request_exception
-from . import ldap_utils
# Assign these functions to module-level variables, to facilitate testing (through
# monkey patching)
diff --git a/src/docs/admin.py b/src/docs/admin.py
index b6aff55ee..34702c56a 100644
--- a/src/docs/admin.py
+++ b/src/docs/admin.py
@@ -1,7 +1,6 @@
from django.contrib import admin
-from .models import Content, Page
-
+from docs.models import Content, Page
admin.site.register(Page)
admin.site.register(Content)
diff --git a/src/docs/converters.py b/src/docs/converters.py
index 48c7f71f7..e05fdfc18 100644
--- a/src/docs/converters.py
+++ b/src/docs/converters.py
@@ -1,5 +1,5 @@
-from .models import Page
-from .validators import page_title_regex
+from docs.models import Page
+from docs.validators import page_title_regex
class SpecificPageByTitle:
diff --git a/src/docs/forms.py b/src/docs/forms.py
index d7c89667e..57f9c87e5 100644
--- a/src/docs/forms.py
+++ b/src/docs/forms.py
@@ -1,8 +1,8 @@
from django import forms
from django.utils.translation import gettext_lazy as _
+from docs.models import Content, Page
from web.widgets import CKEditorUploadingWidget
-from .models import Content, Page
class AddPageForm(forms.ModelForm):
diff --git a/src/docs/migrations/0001_initial.py b/src/docs/migrations/0001_initial.py
index fd89ca3ad..1a33b9ddf 100644
--- a/src/docs/migrations/0001_initial.py
+++ b/src/docs/migrations/0001_initial.py
@@ -1,8 +1,8 @@
# Generated by Django 2.2.8 on 2019-12-14 22:00
import ckeditor_uploader.fields
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/docs/migrations/0003_user_association.py b/src/docs/migrations/0003_user_association.py
index 0be338558..74e31875a 100644
--- a/src/docs/migrations/0003_user_association.py
+++ b/src/docs/migrations/0003_user_association.py
@@ -1,8 +1,8 @@
# Generated by Django 2.2.8 on 2019-12-15 15:01
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/docs/migrations/0004_page_current_content.py b/src/docs/migrations/0004_page_current_content.py
index 28a57a133..e4fedfd93 100644
--- a/src/docs/migrations/0004_page_current_content.py
+++ b/src/docs/migrations/0004_page_current_content.py
@@ -1,7 +1,7 @@
# Generated by Django 2.2.8 on 2019-12-16 21:32
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/docs/migrations/0006_page_current_content_onetoone_and_related_names.py b/src/docs/migrations/0006_page_current_content_onetoone_and_related_names.py
index c17336e4d..fa3b0ad25 100644
--- a/src/docs/migrations/0006_page_current_content_onetoone_and_related_names.py
+++ b/src/docs/migrations/0006_page_current_content_onetoone_and_related_names.py
@@ -1,8 +1,8 @@
# Generated by Django 3.1.2 on 2020-11-20 12:41
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/docs/models.py b/src/docs/models.py
index b9e90cdec..1c3c98781 100644
--- a/src/docs/models.py
+++ b/src/docs/models.py
@@ -3,9 +3,8 @@
from django.utils.translation import gettext_lazy as _
from django_hosts import reverse
+from docs.validators import page_title_validator
from users.models import User
-from .validators import page_title_validator
-
MAIN_PAGE_TITLE = "Documentation"
diff --git a/src/docs/tests/test_urls.py b/src/docs/tests/test_urls.py
index 4d64eabca..ff0f54135 100644
--- a/src/docs/tests/test_urls.py
+++ b/src/docs/tests/test_urls.py
@@ -4,6 +4,7 @@
from django.test import TestCase
from django.utils import timezone
+from docs.models import Content, Page
from users.models import User
from util.test_utils import (
Get,
@@ -11,8 +12,6 @@
generate_all_admin_urls_for_model_and_objs,
)
from util.url_utils import reverse_docs
-from ..models import Content, Page
-
# Makes sure that the subdomain of all requests is `docs`
DOCS_CLIENT_DEFAULTS = {"SERVER_NAME": f"docs.{settings.PARENT_HOST}"}
diff --git a/src/docs/urls.py b/src/docs/urls.py
index b8e4d88e4..ec9a28af1 100644
--- a/src/docs/urls.py
+++ b/src/docs/urls.py
@@ -5,14 +5,13 @@
from django.urls import include, path, register_converter
from django.views.generic import TemplateView
+from docs import converters, views
from util.url_utils import (
ckeditor_uploader_urls,
debug_toolbar_urls,
logout_urls,
permission_required_else_denied,
)
-from . import converters, views
-
register_converter(converters.SpecificPageByTitle, "PageTitle")
diff --git a/src/docs/validators.py b/src/docs/validators.py
index 343f2931c..a231f16ee 100644
--- a/src/docs/validators.py
+++ b/src/docs/validators.py
@@ -1,7 +1,6 @@
from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy as _
-
page_title_regex = r"^[0-9A-Za-z ():]+$"
page_title_validator = RegexValidator(
regex=page_title_regex,
diff --git a/src/docs/views.py b/src/docs/views.py
index 7c9cf6846..7ff68a03a 100644
--- a/src/docs/views.py
+++ b/src/docs/views.py
@@ -15,6 +15,13 @@
)
from django.views.generic.edit import ModelFormMixin
+from docs.forms import (
+ AddPageForm,
+ ChangePageVersionForm,
+ DocumentationPageSearchQueryForm,
+ PageContentForm,
+)
+from docs.models import MAIN_PAGE_TITLE, Content, Page
from util.templatetags.string_tags import title_en
from util.view_utils import (
CustomFieldsetFormMixin,
@@ -22,13 +29,6 @@
QueryParameterFormMixin,
insert_form_field_values,
)
-from .forms import (
- AddPageForm,
- ChangePageVersionForm,
- DocumentationPageSearchQueryForm,
- PageContentForm,
-)
-from .models import Content, MAIN_PAGE_TITLE, Page
class DocumentationPageRelatedViewMixin:
diff --git a/src/faq/admin.py b/src/faq/admin.py
index 6b1093fc5..f8dd70a46 100644
--- a/src/faq/admin.py
+++ b/src/faq/admin.py
@@ -2,13 +2,13 @@
from django.utils.translation import gettext_lazy as _
from simple_history.admin import SimpleHistoryAdmin
+from faq.models import Category, Question
from util import html_utils
from util.admin_utils import (
DefaultAdminWidgetsMixin,
link_to_admin_change_form,
search_escaped_and_unescaped,
)
-from .models import Category, Question
class QuestionAdmin(DefaultAdminWidgetsMixin, SimpleHistoryAdmin):
diff --git a/src/faq/forms.py b/src/faq/forms.py
index 5f753ac4e..d09b35c5a 100644
--- a/src/faq/forms.py
+++ b/src/faq/forms.py
@@ -1,8 +1,8 @@
from django import forms
from django.utils.translation import gettext_lazy as _
+from faq.models import Category, Question
from web.widgets import SemanticMultipleSelectInput
-from .models import Category, Question
class QuestionForm(forms.ModelForm):
diff --git a/src/faq/migrations/0001_initial.py b/src/faq/migrations/0001_initial.py
index c02c19404..3ff0fd2a5 100644
--- a/src/faq/migrations/0001_initial.py
+++ b/src/faq/migrations/0001_initial.py
@@ -1,6 +1,7 @@
# Generated by Django 3.1.3 on 2021-01-25 15:10
from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/faq/migrations/0003_question_last_modified.py b/src/faq/migrations/0003_question_last_modified.py
index aa651f199..9ceb4a84d 100644
--- a/src/faq/migrations/0003_question_last_modified.py
+++ b/src/faq/migrations/0003_question_last_modified.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.8 on 2021-10-25 18:28
from datetime import datetime
+
from django.db import migrations, models
diff --git a/src/faq/migrations/0004_historicalquestion.py b/src/faq/migrations/0004_historicalquestion.py
index 5dc7b0370..034daf9dd 100644
--- a/src/faq/migrations/0004_historicalquestion.py
+++ b/src/faq/migrations/0004_historicalquestion.py
@@ -1,9 +1,10 @@
# Generated by Django 4.0.2 on 2022-02-28 23:10
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/faq/migrations/0006_historicalquestion_categories.py b/src/faq/migrations/0006_historicalquestion_categories.py
index 720185ad5..6fbb1e631 100644
--- a/src/faq/migrations/0006_historicalquestion_categories.py
+++ b/src/faq/migrations/0006_historicalquestion_categories.py
@@ -1,7 +1,7 @@
# Generated by Django 4.1.3 on 2022-11-21 03:42
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/faq/urls.py b/src/faq/urls.py
index 2688415e7..081eb9009 100644
--- a/src/faq/urls.py
+++ b/src/faq/urls.py
@@ -1,7 +1,6 @@
from django.urls import include, path
-from . import views
-
+from faq import views
urlpatterns = [
path("", views.FAQListView.as_view(), name="faq_list"),
diff --git a/src/faq/views.py b/src/faq/views.py
index 44e9c0b6b..67507b059 100644
--- a/src/faq/views.py
+++ b/src/faq/views.py
@@ -11,10 +11,10 @@
UpdateView,
)
+from faq.forms import CategoryForm, QuestionForm
+from faq.models import Category, Question
from users.models import User
from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin
-from .forms import CategoryForm, QuestionForm
-from .models import Category, Question
class FAQListView(ListView):
diff --git a/src/groups/admin.py b/src/groups/admin.py
index d5508c6e7..8956099b3 100644
--- a/src/groups/admin.py
+++ b/src/groups/admin.py
@@ -1,8 +1,8 @@
from django.contrib import admin
from simple_history.admin import SimpleHistoryAdmin
+from groups.models import Committee, InheritanceGroup
from util.admin_utils import DefaultAdminWidgetsMixin
-from .models import Committee, InheritanceGroup
class InheritanceGroupAdmin(SimpleHistoryAdmin):
diff --git a/src/groups/apps.py b/src/groups/apps.py
index 842b145ec..ba9434cf5 100644
--- a/src/groups/apps.py
+++ b/src/groups/apps.py
@@ -8,7 +8,7 @@ class GroupsConfig(AppConfig):
def ready(self):
# Importing models (which is done in the `signals` module) should not be done in
# the global scope, as it would have caused an `AppRegistryNotReady` error
- from . import signals
+ from groups import signals
# Register / connect to the signals here when the app starts
signals.connect()
diff --git a/src/groups/forms.py b/src/groups/forms.py
index 2a16bb329..d74f56c53 100644
--- a/src/groups/forms.py
+++ b/src/groups/forms.py
@@ -1,7 +1,7 @@
from django import forms
+from groups.models import Committee
from web.widgets import SemanticFileInput
-from .models import Committee
class CommitteeForm(forms.ModelForm):
diff --git a/src/groups/migrations/0001_initial.py b/src/groups/migrations/0001_initial.py
index efdd556cf..746ae97b2 100644
--- a/src/groups/migrations/0001_initial.py
+++ b/src/groups/migrations/0001_initial.py
@@ -1,8 +1,8 @@
# Generated by Django 2.0.1 on 2018-01-19 15:20
import django.contrib.auth.models
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/groups/migrations/0002_committee.py b/src/groups/migrations/0002_committee.py
index 88563a89f..89ea22ee0 100644
--- a/src/groups/migrations/0002_committee.py
+++ b/src/groups/migrations/0002_committee.py
@@ -1,7 +1,7 @@
# Generated by Django 2.0.1 on 2018-02-01 15:22
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/groups/migrations/0003_auto_20180925_2204.py b/src/groups/migrations/0003_auto_20180925_2204.py
index f44ccd448..0ad5667e1 100644
--- a/src/groups/migrations/0003_auto_20180925_2204.py
+++ b/src/groups/migrations/0003_auto_20180925_2204.py
@@ -1,8 +1,8 @@
# Generated by Django 2.1.1 on 2018-09-25 20:04
import ckeditor.fields
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/groups/migrations/0007_add_related_and_verbose_names.py b/src/groups/migrations/0007_add_related_and_verbose_names.py
index 916baa5e1..7676fa067 100644
--- a/src/groups/migrations/0007_add_related_and_verbose_names.py
+++ b/src/groups/migrations/0007_add_related_and_verbose_names.py
@@ -1,7 +1,7 @@
# Generated by Django 3.1.2 on 2020-11-20 13:00
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/groups/migrations/0008_committee_and_inheritancegroup_last_modified.py b/src/groups/migrations/0008_committee_and_inheritancegroup_last_modified.py
index 6d10e0694..ed20bb1a0 100644
--- a/src/groups/migrations/0008_committee_and_inheritancegroup_last_modified.py
+++ b/src/groups/migrations/0008_committee_and_inheritancegroup_last_modified.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.8 on 2021-10-25 18:28
from datetime import datetime
+
from django.db import migrations, models
diff --git a/src/groups/migrations/0009_historicalcommittee.py b/src/groups/migrations/0009_historicalcommittee.py
index 6a4b42640..b3bd4c2ae 100644
--- a/src/groups/migrations/0009_historicalcommittee.py
+++ b/src/groups/migrations/0009_historicalcommittee.py
@@ -1,9 +1,9 @@
# Generated by Django 4.0.2 on 2022-02-28 23:10
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/groups/migrations/0010_alter_committee_image_filename.py b/src/groups/migrations/0010_alter_committee_image_filename.py
index 8de045349..c230c4385 100644
--- a/src/groups/migrations/0010_alter_committee_image_filename.py
+++ b/src/groups/migrations/0010_alter_committee_image_filename.py
@@ -1,9 +1,11 @@
# Generated by Django 4.0.1 on 2022-01-20 19:12
-from django.conf import settings
-from django.db import migrations, models
import functools
from pathlib import Path
+
+from django.conf import settings
+from django.db import migrations, models
+
import util.modelfields
import util.storage
diff --git a/src/groups/migrations/0011_historicalinheritancegroup.py b/src/groups/migrations/0011_historicalinheritancegroup.py
index 922c23bd3..b9ac3801d 100644
--- a/src/groups/migrations/0011_historicalinheritancegroup.py
+++ b/src/groups/migrations/0011_historicalinheritancegroup.py
@@ -1,9 +1,9 @@
# Generated by Django 4.0.3 on 2022-04-04 19:12
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/groups/migrations/0013_historicalinheritancegroup_own_permissions.py b/src/groups/migrations/0013_historicalinheritancegroup_own_permissions.py
index e12dd7a30..827e7bda1 100644
--- a/src/groups/migrations/0013_historicalinheritancegroup_own_permissions.py
+++ b/src/groups/migrations/0013_historicalinheritancegroup_own_permissions.py
@@ -1,8 +1,8 @@
# Generated by Django 4.1.3 on 2022-11-21 03:42
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/groups/signals.py b/src/groups/signals.py
index ccd2e1b83..609b01944 100644
--- a/src/groups/signals.py
+++ b/src/groups/signals.py
@@ -1,6 +1,6 @@
from django.db.models.signals import m2m_changed
-from .models import InheritanceGroup
+from groups.models import InheritanceGroup
def update_permissions(instance: InheritanceGroup, action, reverse, **kwargs):
diff --git a/src/groups/tests/test_admin.py b/src/groups/tests/test_admin.py
index e9325c4ba..9cb762b3b 100644
--- a/src/groups/tests/test_admin.py
+++ b/src/groups/tests/test_admin.py
@@ -4,12 +4,12 @@
from django.contrib.contenttypes.models import ContentType
from django.test import Client, TestCase
+from groups.admin import InheritanceGroupAdmin
+from groups.models import InheritanceGroup
from users.models import User
from util.test_utils import set_without_duplicates
from util.url_utils import reverse_admin
from web.tests.test_urls import ADMIN_CLIENT_DEFAULTS
-from ..admin import InheritanceGroupAdmin
-from ..models import InheritanceGroup
class InheritanceGroupAdminTestCase(TestCase):
diff --git a/src/groups/tests/test_models.py b/src/groups/tests/test_models.py
index 680a3f572..c922798fd 100644
--- a/src/groups/tests/test_models.py
+++ b/src/groups/tests/test_models.py
@@ -2,10 +2,10 @@
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase
+from groups.models import Committee, InheritanceGroup
from news.models import Article
from users.models import User
from util.auth_utils import perm_to_str
-from ..models import Committee, InheritanceGroup
class PermGroupTestCase(TestCase):
diff --git a/src/groups/tests/test_urls.py b/src/groups/tests/test_urls.py
index d0279dc79..d1a7b43af 100644
--- a/src/groups/tests/test_urls.py
+++ b/src/groups/tests/test_urls.py
@@ -2,14 +2,14 @@
from django.test import TestCase
from django_hosts import reverse
+from groups.models import Committee, InheritanceGroup
from util.test_utils import (
+ MOCK_JPG_FILE,
CleanUpTempFilesTestMixin,
Get,
- MOCK_JPG_FILE,
assert_requesting_paths_succeeds,
generate_all_admin_urls_for_model_and_objs,
)
-from ..models import Committee, InheritanceGroup
class UrlTests(CleanUpTempFilesTestMixin, TestCase):
diff --git a/src/groups/urls.py b/src/groups/urls.py
index 6c9b5b167..f2571ecde 100644
--- a/src/groups/urls.py
+++ b/src/groups/urls.py
@@ -1,7 +1,6 @@
from django.urls import path
-from . import views
-
+from groups import views
urlpatterns = [
path("", views.CommitteeListView.as_view(), name="committee_list"),
diff --git a/src/groups/views.py b/src/groups/views.py
index fb6d5812a..5e3e6f094 100644
--- a/src/groups/views.py
+++ b/src/groups/views.py
@@ -3,9 +3,9 @@
from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView, ListView, UpdateView
+from groups.forms import CommitteeForm
+from groups.models import Committee
from util.view_utils import CustomFieldsetFormMixin
-from .forms import CommitteeForm
-from .models import Committee
class CommitteeListView(ListView):
diff --git a/src/internal/admin.py b/src/internal/admin.py
index 9e24d39b6..7a6a3ead5 100644
--- a/src/internal/admin.py
+++ b/src/internal/admin.py
@@ -3,13 +3,13 @@
from django.utils.translation import gettext_lazy as _
from simple_history.admin import SimpleHistoryAdmin
+from internal.models import Member, Quote, Secret, SystemAccess
from util import html_utils
from util.admin_utils import (
DefaultAdminWidgetsMixin,
UserSearchFieldsMixin,
search_escaped_and_unescaped,
)
-from .models import Member, Quote, Secret, SystemAccess
class MemberAdmin(DefaultAdminWidgetsMixin, SimpleHistoryAdmin):
diff --git a/src/internal/apps.py b/src/internal/apps.py
index ec301757c..ce6bf99ce 100644
--- a/src/internal/apps.py
+++ b/src/internal/apps.py
@@ -8,7 +8,7 @@ class InternalConfig(AppConfig):
def ready(self):
# Importing models (which is done in the `signals` module) should not be done in
# the global scope, as it would have caused an `AppRegistryNotReady` error
- from . import signals
+ from internal import signals
# Register / connect to the signals here when the app starts
signals.connect()
diff --git a/src/internal/formfields.py b/src/internal/formfields.py
index 8c5805dfd..14eddc67e 100644
--- a/src/internal/formfields.py
+++ b/src/internal/formfields.py
@@ -1,7 +1,7 @@
from django import forms
-from .util import semester_to_year, year_to_semester
-from .validators import semester_string_validator
+from internal.util import semester_to_year, year_to_semester
+from internal.validators import semester_string_validator
class SemesterField(forms.CharField):
diff --git a/src/internal/forms.py b/src/internal/forms.py
index b959d2295..8fc92c35d 100644
--- a/src/internal/forms.py
+++ b/src/internal/forms.py
@@ -4,13 +4,13 @@
from card import utils as card_utils
from card.formfields import CardNumberField
+from internal.models import Member, Quote, Secret, SystemAccess
from users.models import User
from web.widgets import (
SemanticDateInput,
SemanticMultipleSelectInput,
SemanticSearchableChoiceInput,
)
-from .models import Member, Quote, Secret, SystemAccess
class AddMemberForm(forms.ModelForm):
diff --git a/src/internal/migrations/0001_initial.py b/src/internal/migrations/0001_initial.py
index 184dbbb17..52a2964d3 100644
--- a/src/internal/migrations/0001_initial.py
+++ b/src/internal/migrations/0001_initial.py
@@ -1,9 +1,10 @@
# Generated by Django 2.1.5 on 2019-03-03 13:23
import datetime
+
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/internal/migrations/0002_verbose_names_and_allow_blank.py b/src/internal/migrations/0002_verbose_names_and_allow_blank.py
index 09406886e..5fffc4502 100644
--- a/src/internal/migrations/0002_verbose_names_and_allow_blank.py
+++ b/src/internal/migrations/0002_verbose_names_and_allow_blank.py
@@ -1,9 +1,10 @@
# Generated by Django 2.1.5 on 2019-03-14 08:13
import datetime
+
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/internal/migrations/0003_member_property_to_system_access.py b/src/internal/migrations/0003_member_property_to_system_access.py
index 96a99cbcd..1947e0329 100644
--- a/src/internal/migrations/0003_member_property_to_system_access.py
+++ b/src/internal/migrations/0003_member_property_to_system_access.py
@@ -1,7 +1,7 @@
# Generated by Django 2.1.5 on 2019-03-16 11:05
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/internal/migrations/0004_member_phone_number_field.py b/src/internal/migrations/0004_member_phone_number_field.py
index d1815a2fe..739c728e5 100644
--- a/src/internal/migrations/0004_member_phone_number_field.py
+++ b/src/internal/migrations/0004_member_phone_number_field.py
@@ -1,7 +1,7 @@
# Generated by Django 2.1.7 on 2019-03-29 20:39
-from django.db import migrations
import phonenumber_field.modelfields
+from django.db import migrations
class Migration(migrations.Migration):
diff --git a/src/internal/migrations/0006_secret.py b/src/internal/migrations/0006_secret.py
index 580fb65a1..8905d8236 100644
--- a/src/internal/migrations/0006_secret.py
+++ b/src/internal/migrations/0006_secret.py
@@ -1,6 +1,7 @@
# Generated by Django 3.0.10 on 2020-11-12 15:25
from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/internal/migrations/0007_remove_member_fields_max_length_and_null.py b/src/internal/migrations/0007_remove_member_fields_max_length_and_null.py
index 27f5d155a..7840354f0 100644
--- a/src/internal/migrations/0007_remove_member_fields_max_length_and_null.py
+++ b/src/internal/migrations/0007_remove_member_fields_max_length_and_null.py
@@ -1,7 +1,8 @@
# Generated by Django 3.1.2 on 2020-10-22 22:36
-from django.db import migrations, models
import phonenumber_field.modelfields
+from django.db import migrations, models
+
import web.modelfields
diff --git a/src/internal/migrations/0010_add_related_names.py b/src/internal/migrations/0010_add_related_names.py
index e5899737e..ecddd45e9 100644
--- a/src/internal/migrations/0010_add_related_names.py
+++ b/src/internal/migrations/0010_add_related_names.py
@@ -1,8 +1,8 @@
# Generated by Django 3.1.2 on 2020-11-20 13:00
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/internal/migrations/0012_member_and_systemaccess_last_modified.py b/src/internal/migrations/0012_member_and_systemaccess_last_modified.py
index 28a3a9aaf..8db2c5c19 100644
--- a/src/internal/migrations/0012_member_and_systemaccess_last_modified.py
+++ b/src/internal/migrations/0012_member_and_systemaccess_last_modified.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.8 on 2021-10-25 18:28
from datetime import datetime
+
from django.db import migrations, models
diff --git a/src/internal/migrations/0015_member_gmail_and_MAKE_email_and_ntnu_starting_semester_and_github_and_discord_and_minecraft_username.py b/src/internal/migrations/0015_member_gmail_and_MAKE_email_and_ntnu_starting_semester_and_github_and_discord_and_minecraft_username.py
index db3793be5..ad422f042 100644
--- a/src/internal/migrations/0015_member_gmail_and_MAKE_email_and_ntnu_starting_semester_and_github_and_discord_and_minecraft_username.py
+++ b/src/internal/migrations/0015_member_gmail_and_MAKE_email_and_ntnu_starting_semester_and_github_and_discord_and_minecraft_username.py
@@ -1,6 +1,7 @@
# Generated by Django 3.1.2 on 2020-10-22 22:42
from django.db import migrations, models
+
import internal.modelfields
import internal.validators
import web.modelfields
diff --git a/src/internal/migrations/0017_historicalsecret.py b/src/internal/migrations/0017_historicalsecret.py
index 7d580d200..c6ae13b3b 100644
--- a/src/internal/migrations/0017_historicalsecret.py
+++ b/src/internal/migrations/0017_historicalsecret.py
@@ -1,9 +1,10 @@
# Generated by Django 4.0.2 on 2022-02-28 23:10
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/internal/migrations/0018_quote.py b/src/internal/migrations/0018_quote.py
index c2fba3981..8dea08452 100644
--- a/src/internal/migrations/0018_quote.py
+++ b/src/internal/migrations/0018_quote.py
@@ -1,8 +1,8 @@
# Generated by Django 3.2.11 on 2022-03-28 17:21
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/internal/migrations/0019_quote_date.py b/src/internal/migrations/0019_quote_date.py
index d230e9cb4..d105395c1 100644
--- a/src/internal/migrations/0019_quote_date.py
+++ b/src/internal/migrations/0019_quote_date.py
@@ -1,6 +1,7 @@
# Generated by Django 4.0.3 on 2022-04-02 22:58
from datetime import date
+
from django.db import migrations, models
diff --git a/src/internal/migrations/0021_alter_historicalsecret_content_and_more.py b/src/internal/migrations/0021_alter_historicalsecret_content_and_more.py
index 2138c8fa5..090df5b90 100644
--- a/src/internal/migrations/0021_alter_historicalsecret_content_and_more.py
+++ b/src/internal/migrations/0021_alter_historicalsecret_content_and_more.py
@@ -4,6 +4,7 @@
import ckeditor_uploader.fields
from django.conf import settings
from django.db import migrations
+
import web.modelfields
from web.multilingual.data_structures import MultiLingualTextStructure
diff --git a/src/internal/migrations/0022_member_user_set_null_on_delete.py b/src/internal/migrations/0022_member_user_set_null_on_delete.py
index 9ffd9de4e..c6e653204 100644
--- a/src/internal/migrations/0022_member_user_set_null_on_delete.py
+++ b/src/internal/migrations/0022_member_user_set_null_on_delete.py
@@ -1,8 +1,8 @@
# Generated by Django 3.1.4 on 2021-04-15 11:54
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/internal/migrations/0024_historicalmember_and_historicalmember_committees.py b/src/internal/migrations/0024_historicalmember_and_historicalmember_committees.py
index 2d52b560b..814a426c9 100644
--- a/src/internal/migrations/0024_historicalmember_and_historicalmember_committees.py
+++ b/src/internal/migrations/0024_historicalmember_and_historicalmember_committees.py
@@ -1,14 +1,16 @@
# Generated by Django 4.1.3 on 2022-11-21 04:00
import datetime
-from django.conf import settings
+
import django.core.validators
-from django.db import migrations, models
import django.db.models.deletion
-import internal.modelfields
-import internal.validators
import phonenumber_field.modelfields
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
+import internal.modelfields
+import internal.validators
import web.modelfields
diff --git a/src/internal/migrations/0025_secret_extra_view_permissions_and_historicalsecret_extra_view_permissions.py b/src/internal/migrations/0025_secret_extra_view_permissions_and_historicalsecret_extra_view_permissions.py
index 2133b5b4b..fd45bb096 100644
--- a/src/internal/migrations/0025_secret_extra_view_permissions_and_historicalsecret_extra_view_permissions.py
+++ b/src/internal/migrations/0025_secret_extra_view_permissions_and_historicalsecret_extra_view_permissions.py
@@ -1,8 +1,8 @@
# Generated by Django 4.1.7 on 2023-03-24 10:16
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/internal/modelfields.py b/src/internal/modelfields.py
index 011f9a829..0fc963437 100644
--- a/src/internal/modelfields.py
+++ b/src/internal/modelfields.py
@@ -1,8 +1,8 @@
from django.db import models
-from . import formfields
-from .util import semester_to_year
-from .validators import validate_semester_float
+from internal import formfields
+from internal.util import semester_to_year
+from internal.validators import validate_semester_float
class SemesterField(models.FloatField):
diff --git a/src/internal/models.py b/src/internal/models.py
index bfcb202b0..777dcf82a 100644
--- a/src/internal/models.py
+++ b/src/internal/models.py
@@ -13,13 +13,13 @@
from simple_history.models import HistoricalRecords
from groups.models import Committee
+from internal.modelfields import SemesterField
+from internal.util import date_to_semester, year_to_semester
+from internal.validators import WhitelistedEmailValidator
from users.models import User
from util.auth_utils import perm_to_str, perms_to_str
from util.url_utils import reverse_internal
from web.modelfields import UnlimitedCharField
-from .modelfields import SemesterField
-from .util import date_to_semester, year_to_semester
-from .validators import WhitelistedEmailValidator
class Member(models.Model):
diff --git a/src/internal/signals.py b/src/internal/signals.py
index 05f4cc96e..75a8d4d72 100644
--- a/src/internal/signals.py
+++ b/src/internal/signals.py
@@ -1,7 +1,7 @@
from django.db.models.signals import m2m_changed
from groups.models import Committee
-from .models import Member
+from internal.models import Member
def member_update_user_groups(instance: Member, action, pk_set=None, **kwargs):
diff --git a/src/internal/templatetags/member.py b/src/internal/templatetags/member.py
index 588649810..1e83a2a0e 100644
--- a/src/internal/templatetags/member.py
+++ b/src/internal/templatetags/member.py
@@ -2,8 +2,8 @@
from django.utils.text import capfirst
from django.utils.translation import gettext_lazy as _
+from internal.models import Member
from users.models import User
-from ..models import Member
register = template.Library()
diff --git a/src/internal/tests/test_urls.py b/src/internal/tests/test_urls.py
index b16427a9e..26664e34b 100644
--- a/src/internal/tests/test_urls.py
+++ b/src/internal/tests/test_urls.py
@@ -4,17 +4,16 @@
from django.test import Client, TestCase
from contentbox.models import ContentBox
+from internal.forms import MemberStatusForm
+from internal.models import Member, Quote, Secret, SystemAccess
from users.models import User
from util.test_utils import (
Get,
- assertRedirectsWithPathPrefix,
assert_requesting_paths_succeeds,
+ assertRedirectsWithPathPrefix,
generate_all_admin_urls_for_model_and_objs,
)
from util.url_utils import reverse_internal
-from ..forms import MemberStatusForm
-from ..models import Member, Quote, Secret, SystemAccess
-
# Makes sure that the subdomain of all requests is `i`
INTERNAL_CLIENT_DEFAULTS = {"SERVER_NAME": f"i.{settings.PARENT_HOST}"}
diff --git a/src/internal/tests/test_util.py b/src/internal/tests/test_util.py
index 42ef4dc93..a1acfdff2 100644
--- a/src/internal/tests/test_util.py
+++ b/src/internal/tests/test_util.py
@@ -2,7 +2,7 @@
from django.utils.dateparse import parse_date
-from ..util import date_to_semester, semester_to_year, year_to_semester
+from internal.util import date_to_semester, semester_to_year, year_to_semester
class UtilTests(StandardTestCase):
diff --git a/src/internal/tests/test_views.py b/src/internal/tests/test_views.py
index 128b3870c..67b78ce72 100644
--- a/src/internal/tests/test_views.py
+++ b/src/internal/tests/test_views.py
@@ -10,13 +10,13 @@
from contentbox.forms import EditSourceContentBoxForm
from contentbox.models import ContentBox
+from internal.models import Secret
+from internal.tests.test_urls import INTERNAL_CLIENT_DEFAULTS
from users.models import User
from util.auth_utils import get_perms, perm_to_str
from util.url_utils import reverse_admin, reverse_internal
from web.multilingual.data_structures import MultiLingualTextStructure
from web.tests.test_urls import ADMIN_CLIENT_DEFAULTS
-from .test_urls import INTERNAL_CLIENT_DEFAULTS
-from ..models import Secret
class InternalContentBoxTests(TestCase):
diff --git a/src/internal/urls.py b/src/internal/urls.py
index 299791622..0843ff7a2 100644
--- a/src/internal/urls.py
+++ b/src/internal/urls.py
@@ -5,14 +5,13 @@
from django.urls import include, path
from django.views.generic import TemplateView
+from internal import views
from util.url_utils import (
ckeditor_uploader_urls,
debug_toolbar_urls,
logout_urls,
permission_required_else_denied,
)
-from . import views
-
urlpatterns = [
path(
diff --git a/src/internal/util.py b/src/internal/util.py
index 31007b5dd..6e2e1800d 100644
--- a/src/internal/util.py
+++ b/src/internal/util.py
@@ -2,7 +2,7 @@
from django.utils import timezone
-from .validators import semester_string_regex
+from internal.validators import semester_string_regex
def date_to_semester(date_: date) -> str:
diff --git a/src/internal/views.py b/src/internal/views.py
index df5b29c49..688f619f4 100644
--- a/src/internal/views.py
+++ b/src/internal/views.py
@@ -12,9 +12,7 @@
from django.views.generic.detail import SingleObjectMixin
from contentbox.views import ContentBoxDetailView, ContentBoxUpdateView
-from make_queue.models.course import Printer3DCourse
-from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin
-from .forms import (
+from internal.forms import (
AddMemberForm,
ChangeMemberForm,
MemberQuitForm,
@@ -25,7 +23,9 @@
SecretsForm,
SystemAccessValueForm,
)
-from .models import Member, Quote, Secret, SystemAccess
+from internal.models import Member, Quote, Secret, SystemAccess
+from make_queue.models.course import Printer3DCourse
+from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin
class InternalContentBoxDetailView(ContentBoxDetailView):
diff --git a/src/make_queue/admin.py b/src/make_queue/admin.py
index a3a9a9c1c..7c65d2029 100644
--- a/src/make_queue/admin.py
+++ b/src/make_queue/admin.py
@@ -4,17 +4,17 @@
from django.utils.translation import gettext_lazy as _
from simple_history.admin import SimpleHistoryAdmin
+from make_queue.models.course import CoursePermission, Printer3DCourse
+from make_queue.models.machine import Machine, MachineType, MachineUsageRule
+from make_queue.models.reservation import Quota, Reservation, ReservationRule
from util import html_utils
from util.admin_utils import (
DefaultAdminWidgetsMixin,
UserSearchFieldsMixin,
- search_escaped_and_unescaped,
link_to_admin_change_form,
+ search_escaped_and_unescaped,
)
from util.templatetags.html_tags import anchor_tag
-from .models.course import CoursePermission, Printer3DCourse
-from .models.machine import Machine, MachineType, MachineUsageRule
-from .models.reservation import Quota, Reservation, ReservationRule
class MachineTypeAdmin(DefaultAdminWidgetsMixin, admin.ModelAdmin):
diff --git a/src/make_queue/api/forms.py b/src/make_queue/api/forms.py
index c0963c05c..473760e0e 100644
--- a/src/make_queue/api/forms.py
+++ b/src/make_queue/api/forms.py
@@ -1,6 +1,6 @@
from django import forms
-from ..models.reservation import Reservation
+from make_queue.models.reservation import Reservation
class APIMachineDataQueryForm(forms.Form):
diff --git a/src/make_queue/api/views.py b/src/make_queue/api/views.py
index 2694bd123..0c764fbf0 100644
--- a/src/make_queue/api/views.py
+++ b/src/make_queue/api/views.py
@@ -5,6 +5,16 @@
from django.utils.translation import gettext_lazy as _
from django.views.generic import DeleteView, ListView, TemplateView, UpdateView
+from make_queue.api.forms import APIMachineDataQueryForm, APIReservationListQueryForm
+from make_queue.models.reservation import Quota, Reservation, ReservationRule
+from make_queue.templatetags.reservation_extra import (
+ can_delete_reservation,
+ can_mark_reservation_finished,
+)
+from make_queue.views.machine import (
+ MachineRelatedViewMixin,
+ MachineTypeRelatedViewMixin,
+)
from users.models import User
from util.locale_utils import iso_datetime_format
from util.view_utils import (
@@ -12,13 +22,6 @@
QueryParameterFormMixin,
UTF8JsonResponse,
)
-from .forms import APIMachineDataQueryForm, APIReservationListQueryForm
-from ..models.reservation import Quota, Reservation, ReservationRule
-from ..templatetags.reservation_extra import (
- can_delete_reservation,
- can_mark_reservation_finished,
-)
-from ..views.machine import MachineRelatedViewMixin, MachineTypeRelatedViewMixin
class APIMachineDataView(
diff --git a/src/make_queue/forms/course.py b/src/make_queue/forms/course.py
index e51185955..be01f56c5 100644
--- a/src/make_queue/forms/course.py
+++ b/src/make_queue/forms/course.py
@@ -4,13 +4,13 @@
from card import utils as card_utils
from card.formfields import CardNumberField
+from make_queue.models.course import CoursePermission, Printer3DCourse
from users.models import User
from web.widgets import (
SemanticChoiceInput,
SemanticDateInput,
SemanticSearchableChoiceInput,
)
-from ..models.course import CoursePermission, Printer3DCourse
class Printer3DCourseForm(forms.ModelForm):
diff --git a/src/make_queue/forms/machine.py b/src/make_queue/forms/machine.py
index cef1b24c0..45d768c67 100644
--- a/src/make_queue/forms/machine.py
+++ b/src/make_queue/forms/machine.py
@@ -7,10 +7,10 @@
from django.utils.translation import gettext_lazy as _
from js_asset import JS
+from make_queue.models.machine import Machine, MachineType
from util.locale_utils import last_week_of_year, year_and_week_to_monday
from util.templatetags.datetime_tags import long_datetime
from web.widgets import MazeMapSearchInput, SemanticChoiceInput
-from ..models.machine import Machine, MachineType
class MachineFormBase(forms.ModelForm):
diff --git a/src/make_queue/forms/quota.py b/src/make_queue/forms/quota.py
index eea3f8341..3a35bbf89 100644
--- a/src/make_queue/forms/quota.py
+++ b/src/make_queue/forms/quota.py
@@ -4,11 +4,11 @@
from django.utils.translation import gettext_lazy as _
from js_asset import JS
+from make_queue.formfields import UserModelChoiceField
+from make_queue.models.machine import MachineType
+from make_queue.models.reservation import Quota
from users.models import User
from web.widgets import SemanticChoiceInput, SemanticSearchableChoiceInput
-from ..formfields import UserModelChoiceField
-from ..models.machine import MachineType
-from ..models.reservation import Quota
class QuotaForm(forms.ModelForm):
diff --git a/src/make_queue/forms/reservation.py b/src/make_queue/forms/reservation.py
index d04fcc282..66713a2ce 100644
--- a/src/make_queue/forms/reservation.py
+++ b/src/make_queue/forms/reservation.py
@@ -3,9 +3,9 @@
from django.utils.text import capfirst
from django.utils.translation import gettext_lazy as _
+from make_queue.models.machine import Machine, MachineType
from news.models import TimePlace
from web.widgets import SemanticChoiceInput
-from ..models.machine import Machine, MachineType
class ReservationForm(forms.Form):
diff --git a/src/make_queue/forms/reservation_rule.py b/src/make_queue/forms/reservation_rule.py
index f419e813d..0fb68a2a5 100644
--- a/src/make_queue/forms/reservation_rule.py
+++ b/src/make_queue/forms/reservation_rule.py
@@ -1,9 +1,9 @@
from django import forms
from django.utils.translation import gettext_lazy as _
+from make_queue.models.machine import MachineType
+from make_queue.models.reservation import ReservationRule
from web.widgets import Direction, DirectionalCheckboxSelectMultiple, SemanticTimeInput
-from ..models.machine import MachineType
-from ..models.reservation import ReservationRule
class ReservationRuleForm(forms.ModelForm):
diff --git a/src/make_queue/migrations/0001_initial.py b/src/make_queue/migrations/0001_initial.py
index f19e2f893..f9deeffab 100644
--- a/src/make_queue/migrations/0001_initial.py
+++ b/src/make_queue/migrations/0001_initial.py
@@ -1,8 +1,8 @@
# Generated by Django 2.0 on 2018-03-07 17:48
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/make_queue/migrations/0007_auto_20180914_1306.py b/src/make_queue/migrations/0007_auto_20180914_1306.py
index a84407ade..06bd9b149 100644
--- a/src/make_queue/migrations/0007_auto_20180914_1306.py
+++ b/src/make_queue/migrations/0007_auto_20180914_1306.py
@@ -1,8 +1,8 @@
# Generated by Django 2.1 on 2018-09-14 11:06
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/make_queue/migrations/0008_auto_20181103_1524.py b/src/make_queue/migrations/0008_auto_20181103_1524.py
index 5ca7f858a..07722b4ba 100644
--- a/src/make_queue/migrations/0008_auto_20181103_1524.py
+++ b/src/make_queue/migrations/0008_auto_20181103_1524.py
@@ -1,9 +1,10 @@
# Generated by Django 2.1.2 on 2018-11-03 14:24
import ckeditor_uploader.fields
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
+
import make_queue.models.fields
diff --git a/src/make_queue/migrations/0010_unique_username_in_course_registration.py b/src/make_queue/migrations/0010_unique_username_in_course_registration.py
index 9f8733cd3..4a74bc0ff 100644
--- a/src/make_queue/migrations/0010_unique_username_in_course_registration.py
+++ b/src/make_queue/migrations/0010_unique_username_in_course_registration.py
@@ -1,6 +1,7 @@
# Generated by Django 2.1.5 on 2019-03-02 21:10
from django.db import migrations
+
import make_queue.models.fields
diff --git a/src/make_queue/migrations/0012_usage_rules_multilingual_content_field.py b/src/make_queue/migrations/0012_usage_rules_multilingual_content_field.py
index 049d37769..7b3bbd899 100644
--- a/src/make_queue/migrations/0012_usage_rules_multilingual_content_field.py
+++ b/src/make_queue/migrations/0012_usage_rules_multilingual_content_field.py
@@ -1,6 +1,8 @@
# Generated by Django 2.1.5 on 2019-03-25 12:13
import json
+
from django.db import migrations
+
import web.multilingual.modelfields
diff --git a/src/make_queue/migrations/0013_course_card_number_field.py b/src/make_queue/migrations/0013_course_card_number_field.py
index ca166affb..0ea546d83 100644
--- a/src/make_queue/migrations/0013_course_card_number_field.py
+++ b/src/make_queue/migrations/0013_course_card_number_field.py
@@ -1,9 +1,10 @@
# Generated by Django 2.2.5 on 2019-10-09 18:38
-import card.modelfields
import django.core.validators
from django.db import migrations, models
+import card.modelfields
+
def to_cardnumberfield(apps, schema_editor):
Printer3DCourse = apps.get_model("make_queue", "Printer3DCourse")
diff --git a/src/make_queue/migrations/0015_machinetype.py b/src/make_queue/migrations/0015_machinetype.py
index 4393e8579..1f2714cae 100644
--- a/src/make_queue/migrations/0015_machinetype.py
+++ b/src/make_queue/migrations/0015_machinetype.py
@@ -2,8 +2,8 @@
import json
from typing import Union
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
import web.multilingual.modelfields
from web.multilingual.data_structures import MultiLingualTextStructure
diff --git a/src/make_queue/migrations/0016_auto_20201103_1431.py b/src/make_queue/migrations/0016_auto_20201103_1431.py
index 9a87423be..4eda9447d 100644
--- a/src/make_queue/migrations/0016_auto_20201103_1431.py
+++ b/src/make_queue/migrations/0016_auto_20201103_1431.py
@@ -1,7 +1,8 @@
# Generated by Django 3.0.10 on 2020-11-03 13:31
-from django.db import migrations, models
import django.db.models.deletion
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/make_queue/migrations/0017_remove_fields_max_length_and_add_blank.py b/src/make_queue/migrations/0017_remove_fields_max_length_and_add_blank.py
index 62b0136d9..8b05dbafa 100644
--- a/src/make_queue/migrations/0017_remove_fields_max_length_and_add_blank.py
+++ b/src/make_queue/migrations/0017_remove_fields_max_length_and_add_blank.py
@@ -1,9 +1,10 @@
# Generated by Django 3.0.5 on 2020-09-13 01:30
-import card.modelfields
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
+
+import card.modelfields
import make_queue.models.fields
import web.modelfields
import web.multilingual.modelfields
diff --git a/src/make_queue/migrations/0019_add_related_names.py b/src/make_queue/migrations/0019_add_related_names.py
index 3d8236be8..ad77d849e 100644
--- a/src/make_queue/migrations/0019_add_related_names.py
+++ b/src/make_queue/migrations/0019_add_related_names.py
@@ -1,8 +1,8 @@
# Generated by Django 3.1.2 on 2020-11-04 02:23
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/make_queue/migrations/0022_printer3dcourse_user_onetoone_and_related_name.py b/src/make_queue/migrations/0022_printer3dcourse_user_onetoone_and_related_name.py
index bb25945af..c7eb13487 100644
--- a/src/make_queue/migrations/0022_printer3dcourse_user_onetoone_and_related_name.py
+++ b/src/make_queue/migrations/0022_printer3dcourse_user_onetoone_and_related_name.py
@@ -1,8 +1,8 @@
# Generated by Django 3.1.2 on 2020-11-20 13:00
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/make_queue/migrations/0023_machine_stream_name.py b/src/make_queue/migrations/0023_machine_stream_name.py
index 8ee3309a2..c5dc126ec 100644
--- a/src/make_queue/migrations/0023_machine_stream_name.py
+++ b/src/make_queue/migrations/0023_machine_stream_name.py
@@ -1,9 +1,10 @@
# Generated by Django 3.0.10 on 2020-11-09 23:55
+import re
+
import django.core.validators
from django.db import migrations, models
from django.utils.text import slugify
-import re
def set_stream_name(apps, schema_editor):
diff --git a/src/make_queue/migrations/0024_machine_and_machineusagerule_and_printer3dcourse_and_reservationrule_last_modified.py b/src/make_queue/migrations/0024_machine_and_machineusagerule_and_printer3dcourse_and_reservationrule_last_modified.py
index 62133dfd1..07ff88df5 100644
--- a/src/make_queue/migrations/0024_machine_and_machineusagerule_and_printer3dcourse_and_reservationrule_last_modified.py
+++ b/src/make_queue/migrations/0024_machine_and_machineusagerule_and_printer3dcourse_and_reservationrule_last_modified.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.8 on 2021-10-26 01:43
from datetime import datetime
+
from django.db import migrations, models
diff --git a/src/make_queue/migrations/0025_reservationrule_start_days_multiselectfield.py b/src/make_queue/migrations/0025_reservationrule_start_days_multiselectfield.py
index 4bd6e5dc1..6b84ddf07 100644
--- a/src/make_queue/migrations/0025_reservationrule_start_days_multiselectfield.py
+++ b/src/make_queue/migrations/0025_reservationrule_start_days_multiselectfield.py
@@ -1,7 +1,7 @@
# Generated by Django 3.0.10 on 2020-09-20 01:52
-from django.db import migrations
import multiselectfield.db.fields
+from django.db import migrations
def convert_start_days_from_bit_field_to_multiselect(apps, schema_editor):
diff --git a/src/make_queue/migrations/0026_historicalmachineusagerule.py b/src/make_queue/migrations/0026_historicalmachineusagerule.py
index 46b0edc7e..34fd121e3 100644
--- a/src/make_queue/migrations/0026_historicalmachineusagerule.py
+++ b/src/make_queue/migrations/0026_historicalmachineusagerule.py
@@ -1,9 +1,10 @@
# Generated by Django 4.0.2 on 2022-02-28 23:10
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/make_queue/migrations/0030_machine_info_message.py b/src/make_queue/migrations/0030_machine_info_message.py
index 52dac326f..ad384911e 100644
--- a/src/make_queue/migrations/0030_machine_info_message.py
+++ b/src/make_queue/migrations/0030_machine_info_message.py
@@ -1,8 +1,9 @@
# Generated by Django 4.0.4 on 2022-04-19 22:11
from datetime import datetime
-from django.db import migrations, models
+
import django.utils.timezone
+from django.db import migrations, models
def set_info_message_date_for_existing_machines(apps, schema_editor):
diff --git a/src/make_queue/migrations/0033_historicalmachine.py b/src/make_queue/migrations/0033_historicalmachine.py
index 94f6504f1..fdb0fe75d 100644
--- a/src/make_queue/migrations/0033_historicalmachine.py
+++ b/src/make_queue/migrations/0033_historicalmachine.py
@@ -1,11 +1,13 @@
# Generated by Django 4.0.6 on 2022-09-20 15:28
-from django.conf import settings
+import re
+
import django.core.validators
-from django.db import migrations, models
import django.db.models.deletion
-import re
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
import web.modelfields
diff --git a/src/make_queue/migrations/0034_alter_reservationrule_start_days.py b/src/make_queue/migrations/0034_alter_reservationrule_start_days.py
index aa017ce77..ce138f34b 100644
--- a/src/make_queue/migrations/0034_alter_reservationrule_start_days.py
+++ b/src/make_queue/migrations/0034_alter_reservationrule_start_days.py
@@ -1,8 +1,9 @@
# Generated by Django 5.0.2 on 2024-04-04 17:18
-import web.modelfields
from django.db import migrations
+import web.modelfields
+
class Migration(migrations.Migration):
dependencies = [
diff --git a/src/make_queue/migrations/0035_coursepermission_printer3dcourse_course_permissions_and_more.py b/src/make_queue/migrations/0035_coursepermission_printer3dcourse_course_permissions_and_more.py
index 1da369551..a7e1b4c07 100644
--- a/src/make_queue/migrations/0035_coursepermission_printer3dcourse_course_permissions_and_more.py
+++ b/src/make_queue/migrations/0035_coursepermission_printer3dcourse_course_permissions_and_more.py
@@ -1,8 +1,9 @@
# Generated by Django 4.2.9 on 2024-10-03 17:16
+import django.db.models.deletion
from django.db import migrations, models
+
from make_queue.models.course import CoursePermission
-import django.db.models.deletion
def create_default_permissions(apps, schema_editor):
diff --git a/src/make_queue/models/course.py b/src/make_queue/models/course.py
index 284e32f7a..4354dd6e5 100644
--- a/src/make_queue/models/course.py
+++ b/src/make_queue/models/course.py
@@ -1,13 +1,13 @@
+from functools import cached_property
+
from django.db import models
from django.db.models.constraints import CheckConstraint
from django.db.models.query_utils import Q
from django.utils.translation import gettext_lazy as _
-from functools import cached_property
-
from card.modelfields import CardNumberField
+from make_queue.models.fields import UsernameField
from users.models import User
-from .fields import UsernameField
class CoursePermission(models.Model):
diff --git a/src/make_queue/models/machine.py b/src/make_queue/models/machine.py
index cdef4003d..0c81f6f3e 100644
--- a/src/make_queue/models/machine.py
+++ b/src/make_queue/models/machine.py
@@ -10,14 +10,14 @@
from django_hosts import reverse
from simple_history.models import HistoricalRecords
+from make_queue.models.course import CoursePermission, Printer3DCourse
from users.models import User
from util.validators import lowercase_slug_validator
-from web.modelfields import URLTextField, UnlimitedCharField
+from web.modelfields import UnlimitedCharField, URLTextField
from web.multilingual.modelfields import (
MultiLingualRichTextUploadingField,
MultiLingualTextField,
)
-from .course import CoursePermission, Printer3DCourse
class MachineTypeQuerySet(models.QuerySet):
diff --git a/src/make_queue/models/reservation.py b/src/make_queue/models/reservation.py
index a3bf0feca..234e87040 100644
--- a/src/make_queue/models/reservation.py
+++ b/src/make_queue/models/reservation.py
@@ -11,7 +11,7 @@
from django.utils.text import capfirst
from django.utils.translation import gettext_lazy as _
-
+from make_queue.models.machine import Machine, MachineType
from news.models import TimePlace
from users.models import User
from util.locale_utils import (
@@ -20,8 +20,7 @@
timedelta_to_hours,
)
from util.model_utils import ComparisonType, comparison_boilerplate
-from web.modelfields import UnlimitedCharField, MultiSelectField
-from .machine import Machine, MachineType
+from web.modelfields import MultiSelectField, UnlimitedCharField
class Quota(models.Model):
diff --git a/src/make_queue/templatetags/reservation_extra.py b/src/make_queue/templatetags/reservation_extra.py
index 216c3f9c3..b43189d28 100644
--- a/src/make_queue/templatetags/reservation_extra.py
+++ b/src/make_queue/templatetags/reservation_extra.py
@@ -8,10 +8,10 @@
from django.utils.timesince import timeuntil
from django.utils.translation import gettext_lazy as _
+from make_queue.models.machine import Machine
+from make_queue.models.reservation import Quota, Reservation
from users.models import User
from util.locale_utils import TIME_STRINGS, get_current_year_and_week, get_year_and_week
-from ..models.machine import Machine
-from ..models.reservation import Quota, Reservation
register = template.Library()
diff --git a/src/make_queue/tests/forms/test_course_forms.py b/src/make_queue/tests/forms/test_course_forms.py
index 96d7081cf..1d5caf6e5 100644
--- a/src/make_queue/tests/forms/test_course_forms.py
+++ b/src/make_queue/tests/forms/test_course_forms.py
@@ -1,8 +1,8 @@
from django.test import Client, TestCase
+from make_queue.forms.course import Printer3DCourseForm
+from make_queue.models.course import Printer3DCourse
from users.models import User
-from ...forms.course import Printer3DCourseForm
-from ...models.course import Printer3DCourse
class TestPrinter3DCourseForm(TestCase):
diff --git a/src/make_queue/tests/forms/test_machine_forms.py b/src/make_queue/tests/forms/test_machine_forms.py
index 4f86ac344..4cb689b49 100644
--- a/src/make_queue/tests/forms/test_machine_forms.py
+++ b/src/make_queue/tests/forms/test_machine_forms.py
@@ -3,10 +3,10 @@
from django.test import TestCase
+from make_queue.forms.machine import AddMachineForm, ChangeMachineForm
+from make_queue.models.machine import Machine, MachineType
from util.locale_utils import parse_datetime_localized
from util.test_utils import with_time
-from ...forms.machine import AddMachineForm, ChangeMachineForm
-from ...models.machine import Machine, MachineType
class TestCreateMachineForm(TestCase):
diff --git a/src/make_queue/tests/forms/test_reservation_forms.py b/src/make_queue/tests/forms/test_reservation_forms.py
index 6c74ab6c9..3b2eddfef 100644
--- a/src/make_queue/tests/forms/test_reservation_forms.py
+++ b/src/make_queue/tests/forms/test_reservation_forms.py
@@ -3,9 +3,9 @@
from django.test import TestCase
from django.utils import timezone
+from make_queue.forms.reservation import ReservationForm
+from make_queue.models.machine import Machine, MachineType
from news.models import Event, TimePlace
-from ...forms.reservation import ReservationForm
-from ...models.machine import Machine, MachineType
class TestReservationForm(TestCase):
diff --git a/src/make_queue/tests/models/test_course.py b/src/make_queue/tests/models/test_course.py
index c6f4fa051..ec8a7fcb9 100644
--- a/src/make_queue/tests/models/test_course.py
+++ b/src/make_queue/tests/models/test_course.py
@@ -1,8 +1,8 @@
from django.test import TestCase
from django.utils import timezone
+from make_queue.models.course import Printer3DCourse
from users.models import User
-from ...models.course import Printer3DCourse
class TestCardAndCourseSave(TestCase):
diff --git a/src/make_queue/tests/models/test_machines.py b/src/make_queue/tests/models/test_machines.py
index 3ab812526..8984d9d3b 100644
--- a/src/make_queue/tests/models/test_machines.py
+++ b/src/make_queue/tests/models/test_machines.py
@@ -4,10 +4,10 @@
from django.test import TestCase
from django.utils import timezone
+from make_queue.models.course import CoursePermission, Printer3DCourse
+from make_queue.models.machine import Machine, MachineType
+from make_queue.models.reservation import Quota, Reservation
from users.models import User
-from ...models.course import CoursePermission, Printer3DCourse
-from ...models.machine import Machine, MachineType
-from ...models.reservation import Quota, Reservation
class TestGenericMachine(TestCase):
diff --git a/src/make_queue/tests/models/test_reservation.py b/src/make_queue/tests/models/test_reservation.py
index caac0eb08..fa3f4f17c 100644
--- a/src/make_queue/tests/models/test_reservation.py
+++ b/src/make_queue/tests/models/test_reservation.py
@@ -8,14 +8,13 @@
from django.utils import timezone
from django.utils.dateparse import parse_time
+from make_queue.models.course import CoursePermission, Printer3DCourse
+from make_queue.models.machine import Machine, MachineType
+from make_queue.models.reservation import Quota, Reservation, ReservationRule
+from make_queue.templatetags.reservation_extra import can_change_reservation
from news.models import Event, TimePlace
from users.models import User
from util.locale_utils import parse_datetime_localized
-from ...models.course import CoursePermission, Printer3DCourse
-from ...models.machine import Machine, MachineType
-from ...models.reservation import Quota, Reservation, ReservationRule
-from ...templatetags.reservation_extra import can_change_reservation
-
Day = ReservationRule.Day
diff --git a/src/make_queue/tests/models/test_reservation_rule.py b/src/make_queue/tests/models/test_reservation_rule.py
index 62aa732d4..6820ddcb9 100644
--- a/src/make_queue/tests/models/test_reservation_rule.py
+++ b/src/make_queue/tests/models/test_reservation_rule.py
@@ -3,10 +3,9 @@
from django.test import TestCase
from django.utils.dateparse import parse_datetime, parse_time
-from ...forms.reservation_rule import ReservationRuleForm
-from ...models.machine import MachineType
-from ...models.reservation import ReservationRule
-
+from make_queue.forms.reservation_rule import ReservationRuleForm
+from make_queue.models.machine import MachineType
+from make_queue.models.reservation import ReservationRule
Day = ReservationRule.Day
Period = ReservationRule.Period
diff --git a/src/make_queue/tests/templatetags/test_reservation_extra.py b/src/make_queue/tests/templatetags/test_reservation_extra.py
index 4aefa5556..b41a1c3c7 100644
--- a/src/make_queue/tests/templatetags/test_reservation_extra.py
+++ b/src/make_queue/tests/templatetags/test_reservation_extra.py
@@ -6,16 +6,16 @@
from django.urls import reverse
from django.utils import timezone
-from users.models import User
-from util.locale_utils import parse_datetime_localized
-from ...models.course import Printer3DCourse
-from ...models.machine import Machine, MachineType
-from ...models.reservation import Quota, Reservation
-from ...templatetags.reservation_extra import (
+from make_queue.models.course import Printer3DCourse
+from make_queue.models.machine import Machine, MachineType
+from make_queue.models.reservation import Quota, Reservation
+from make_queue.templatetags.reservation_extra import (
calendar_url_reservation,
current_calendar_url,
get_stream_image_path,
)
+from users.models import User
+from util.locale_utils import parse_datetime_localized
class TestReservationExtra(TestCase):
diff --git a/src/make_queue/tests/test_urls.py b/src/make_queue/tests/test_urls.py
index 91eccd491..b7a4b21d6 100644
--- a/src/make_queue/tests/test_urls.py
+++ b/src/make_queue/tests/test_urls.py
@@ -7,20 +7,19 @@
from django.utils.http import urlencode
from django_hosts import reverse
+from make_queue.forms.reservation import ReservationListQueryForm
+from make_queue.models.course import Printer3DCourse
+from make_queue.models.machine import Machine, MachineType, MachineUsageRule
+from make_queue.models.reservation import Quota, Reservation, ReservationRule
from news.models import Event, TimePlace
from users.models import User
from util.test_utils import (
+ MOCK_JPG_FILE,
CleanUpTempFilesTestMixin,
Get,
- MOCK_JPG_FILE,
assert_requesting_paths_succeeds,
generate_all_admin_urls_for_model_and_objs,
)
-from ..forms.reservation import ReservationListQueryForm
-from ..models.course import Printer3DCourse
-from ..models.machine import Machine, MachineType, MachineUsageRule
-from ..models.reservation import Quota, Reservation, ReservationRule
-
Day = ReservationRule.Day
diff --git a/src/make_queue/tests/views/test_api_reservation_views.py b/src/make_queue/tests/views/test_api_reservation_views.py
index e5c36ab7a..797ad5f9d 100644
--- a/src/make_queue/tests/views/test_api_reservation_views.py
+++ b/src/make_queue/tests/views/test_api_reservation_views.py
@@ -9,15 +9,14 @@
from django.utils.dateparse import parse_time
from django_hosts import reverse
+from make_queue.api.views import APIReservationListView
+from make_queue.models.course import Printer3DCourse
+from make_queue.models.machine import Machine, MachineType
+from make_queue.models.reservation import Quota, Reservation, ReservationRule
+from make_queue.templatetags.reservation_extra import can_change_reservation
from news.models import Event, TimePlace
from users.models import User
from util.locale_utils import parse_datetime_localized
-from ...api.views import APIReservationListView
-from ...models.course import Printer3DCourse
-from ...models.machine import Machine, MachineType
-from ...models.reservation import Quota, Reservation, ReservationRule
-from ...templatetags.reservation_extra import can_change_reservation
-
Day = ReservationRule.Day
diff --git a/src/make_queue/tests/views/test_machine_views.py b/src/make_queue/tests/views/test_machine_views.py
index 754b2acbe..6094a0a09 100644
--- a/src/make_queue/tests/views/test_machine_views.py
+++ b/src/make_queue/tests/views/test_machine_views.py
@@ -7,10 +7,10 @@
from django.utils.dateparse import parse_datetime
from django_hosts import reverse
+from make_queue.forms.machine import AddMachineForm, ChangeMachineForm
+from make_queue.models.course import CoursePermission, Printer3DCourse
+from make_queue.models.machine import Machine, MachineType
from users.models import User
-from ...forms.machine import AddMachineForm, ChangeMachineForm
-from ...models.course import CoursePermission, Printer3DCourse
-from ...models.machine import Machine, MachineType
class TestMachineListView(TestCase):
diff --git a/src/make_queue/tests/views/test_quota_views.py b/src/make_queue/tests/views/test_quota_views.py
index 27777e2e0..7b05198aa 100644
--- a/src/make_queue/tests/views/test_quota_views.py
+++ b/src/make_queue/tests/views/test_quota_views.py
@@ -3,10 +3,10 @@
from django.test import Client, TestCase
from django_hosts import reverse
+from make_queue.models.machine import MachineType
+from make_queue.models.reservation import Quota
+from make_queue.views.quota import AdminQuotaPanelView
from users.models import User
-from ...models.machine import MachineType
-from ...models.reservation import Quota
-from ...views.quota import AdminQuotaPanelView
class TestAdminUserQuotaListView(TestCase):
diff --git a/src/make_queue/tests/views/test_reservation_views.py b/src/make_queue/tests/views/test_reservation_views.py
index 50a387e50..2a6e10d38 100644
--- a/src/make_queue/tests/views/test_reservation_views.py
+++ b/src/make_queue/tests/views/test_reservation_views.py
@@ -10,16 +10,16 @@
from django.utils import timezone
from django_hosts import reverse
+from make_queue.forms.reservation import ReservationForm, ReservationListQueryForm
+from make_queue.models.course import CoursePermission, Printer3DCourse
+from make_queue.models.machine import Machine, MachineType
+from make_queue.models.reservation import Quota, Reservation
+from make_queue.tests.utility import post_request_with_user, request_with_user
+from make_queue.views.reservation import ReservationCreateView, ReservationUpdateView
from news.models import Event, TimePlace
from users.models import User
from util.locale_utils import iso_datetime_format, parse_datetime_localized
from util.test_utils import set_without_duplicates
-from ..utility import post_request_with_user, request_with_user
-from ...forms.reservation import ReservationForm, ReservationListQueryForm
-from ...models.course import CoursePermission, Printer3DCourse
-from ...models.machine import Machine, MachineType
-from ...models.reservation import Quota, Reservation
-from ...views.reservation import ReservationCreateView, ReservationUpdateView
class ReservationCreateOrUpdateViewTestBase(TestCase, ABC):
diff --git a/src/make_queue/urls.py b/src/make_queue/urls.py
index ce2674077..6e850e930 100644
--- a/src/make_queue/urls.py
+++ b/src/make_queue/urls.py
@@ -2,8 +2,8 @@
from django.contrib.auth.decorators import login_required
from django.urls import include, path
-from .api import views as api_views
-from .views import (
+from make_queue.api import views as api_views
+from make_queue.views import (
course as course_views,
machine as machine_views,
quota as quota_views,
@@ -11,7 +11,6 @@
reservation_rule as reservation_rule_views,
)
-
specific_machinetype_urlpatterns = [
path(
"reservationrules/",
diff --git a/src/make_queue/views/course.py b/src/make_queue/views/course.py
index c85d3f6ac..04b2fe42a 100644
--- a/src/make_queue/views/course.py
+++ b/src/make_queue/views/course.py
@@ -11,9 +11,9 @@
from django.utils.translation import gettext_lazy as _
from django.views.generic import CreateView, DeleteView, ListView, UpdateView, View
+from make_queue.forms.course import Printer3DCourseForm
+from make_queue.models.course import Printer3DCourse
from util.view_utils import PreventGetRequestsMixin
-from ..forms.course import Printer3DCourseForm
-from ..models.course import Printer3DCourse
class Printer3DCourseListView(PermissionRequiredMixin, ListView):
diff --git a/src/make_queue/views/machine.py b/src/make_queue/views/machine.py
index 3365ff2b2..2a4fd4929 100644
--- a/src/make_queue/views/machine.py
+++ b/src/make_queue/views/machine.py
@@ -12,17 +12,21 @@
UpdateView,
)
+from make_queue.forms.machine import (
+ AddMachineForm,
+ ChangeMachineForm,
+ MachineDetailQueryForm,
+)
+from make_queue.forms.reservation import ReservationListQueryForm
+from make_queue.models.machine import Machine, MachineType, MachineUsageRule
+from make_queue.models.reservation import Quota
+from make_queue.templatetags.reservation_extra import reservation_denied_message
from util.locale_utils import get_current_year_and_week, year_and_week_to_monday
from util.view_utils import (
CustomFieldsetFormMixin,
PreventGetRequestsMixin,
QueryParameterFormMixin,
)
-from ..forms.machine import AddMachineForm, ChangeMachineForm, MachineDetailQueryForm
-from ..forms.reservation import ReservationListQueryForm
-from ..models.machine import Machine, MachineType, MachineUsageRule
-from ..models.reservation import Quota
-from ..templatetags.reservation_extra import reservation_denied_message
# noinspection PyUnresolvedReferences
diff --git a/src/make_queue/views/quota.py b/src/make_queue/views/quota.py
index 18af4ebad..e9dc798fc 100644
--- a/src/make_queue/views/quota.py
+++ b/src/make_queue/views/quota.py
@@ -15,14 +15,14 @@
)
from django.views.generic.edit import ModelFormMixin
+from make_queue.forms.quota import AdminQuotaPanelQueryForm, QuotaForm
+from make_queue.models.reservation import Quota
from users.models import User
from util.view_utils import (
CustomFieldsetFormMixin,
PreventGetRequestsMixin,
QueryParameterFormMixin,
)
-from ..forms.quota import AdminQuotaPanelQueryForm, QuotaForm
-from ..models.reservation import Quota
class AdminQuotaPanelView(
diff --git a/src/make_queue/views/reservation.py b/src/make_queue/views/reservation.py
index 6e5c1fd7c..b05cba4d1 100644
--- a/src/make_queue/views/reservation.py
+++ b/src/make_queue/views/reservation.py
@@ -11,22 +11,22 @@
from django.views.generic import FormView, ListView, TemplateView
from django_hosts import reverse
-from news.models import TimePlace
-from util.locale_utils import timedelta_to_hours
-from util.logging_utils import log_request_exception
-from util.view_utils import QueryParameterFormMixin
-from .machine import MachineRelatedViewMixin
-from ..forms.reservation import (
+from make_queue.forms.reservation import (
ReservationFindFreeSlotsForm,
ReservationForm,
ReservationListQueryForm,
)
-from ..models.machine import Machine, MachineType
-from ..models.reservation import Reservation, ReservationRule
-from ..templatetags.reservation_extra import (
+from make_queue.models.machine import Machine, MachineType
+from make_queue.models.reservation import Reservation, ReservationRule
+from make_queue.templatetags.reservation_extra import (
calendar_url_reservation,
can_change_reservation,
)
+from make_queue.views.machine import MachineRelatedViewMixin
+from news.models import TimePlace
+from util.locale_utils import timedelta_to_hours
+from util.logging_utils import log_request_exception
+from util.view_utils import QueryParameterFormMixin
# TODO: rewrite this whole view (and everything that uses it), so that it's more
diff --git a/src/make_queue/views/reservation_rule.py b/src/make_queue/views/reservation_rule.py
index 27956a5aa..5491bb21d 100644
--- a/src/make_queue/views/reservation_rule.py
+++ b/src/make_queue/views/reservation_rule.py
@@ -6,15 +6,15 @@
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
from django.views.generic.edit import ModelFormMixin
+from make_queue.forms.reservation_rule import ReservationRuleForm
+from make_queue.models.reservation import Quota, ReservationRule
+from make_queue.views.machine import MachineTypeRelatedViewMixin
from users.models import User
from util.view_utils import (
CustomFieldsetFormMixin,
PreventGetRequestsMixin,
insert_form_field_values,
)
-from ..forms.reservation_rule import ReservationRuleForm
-from ..models.reservation import Quota, ReservationRule
-from ..views.machine import MachineTypeRelatedViewMixin
class ReservationRuleListView(MachineTypeRelatedViewMixin, ListView):
diff --git a/src/makerspace/admin.py b/src/makerspace/admin.py
index d2037f323..7046e3be0 100644
--- a/src/makerspace/admin.py
+++ b/src/makerspace/admin.py
@@ -2,9 +2,9 @@
from django.utils.translation import gettext_lazy as _
from simple_history.admin import SimpleHistoryAdmin
+from makerspace.models import Equipment
from util import html_utils
from util.admin_utils import DefaultAdminWidgetsMixin, search_escaped_and_unescaped
-from .models import Equipment
class EquipmentAdmin(DefaultAdminWidgetsMixin, SimpleHistoryAdmin):
diff --git a/src/makerspace/forms.py b/src/makerspace/forms.py
index f8d1d3aaa..2fd112c15 100644
--- a/src/makerspace/forms.py
+++ b/src/makerspace/forms.py
@@ -1,7 +1,7 @@
from django import forms
+from makerspace.models import Equipment
from web.widgets import SemanticFileInput
-from .models import Equipment
class EquipmentForm(forms.ModelForm):
diff --git a/src/makerspace/migrations/0001_initial.py b/src/makerspace/migrations/0001_initial.py
index c9b2e5156..1ec72acf8 100644
--- a/src/makerspace/migrations/0001_initial.py
+++ b/src/makerspace/migrations/0001_initial.py
@@ -1,6 +1,7 @@
# Generated by Django 3.0.4 on 2020-05-26 11:51
from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/makerspace/migrations/0004_remove_equipment_title_max_length.py b/src/makerspace/migrations/0004_remove_equipment_title_max_length.py
index 08cf7b178..4ee58ad17 100644
--- a/src/makerspace/migrations/0004_remove_equipment_title_max_length.py
+++ b/src/makerspace/migrations/0004_remove_equipment_title_max_length.py
@@ -1,6 +1,7 @@
# Generated by Django 3.1.2 on 2020-10-24 22:17
from django.db import migrations
+
import web.multilingual.modelfields
diff --git a/src/makerspace/migrations/0006_equipment_last_modified.py b/src/makerspace/migrations/0006_equipment_last_modified.py
index 8abc5e121..659a7ff7e 100644
--- a/src/makerspace/migrations/0006_equipment_last_modified.py
+++ b/src/makerspace/migrations/0006_equipment_last_modified.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.8 on 2021-10-25 18:28
from datetime import datetime
+
from django.db import migrations, models
diff --git a/src/makerspace/migrations/0007_historicalequipment.py b/src/makerspace/migrations/0007_historicalequipment.py
index a114d7e61..3f7ce030a 100644
--- a/src/makerspace/migrations/0007_historicalequipment.py
+++ b/src/makerspace/migrations/0007_historicalequipment.py
@@ -1,9 +1,10 @@
# Generated by Django 4.0.2 on 2022-02-28 23:10
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/makerspace/migrations/0008_alter_equipment_image_filename.py b/src/makerspace/migrations/0008_alter_equipment_image_filename.py
index 5bbd4ed7f..f8e01deae 100644
--- a/src/makerspace/migrations/0008_alter_equipment_image_filename.py
+++ b/src/makerspace/migrations/0008_alter_equipment_image_filename.py
@@ -1,9 +1,11 @@
# Generated by Django 4.0.1 on 2022-01-20 19:12
-from django.conf import settings
-from django.db import migrations, models
import functools
from pathlib import Path
+
+from django.conf import settings
+from django.db import migrations, models
+
import util.modelfields
import util.storage
diff --git a/src/makerspace/tests/test_urls.py b/src/makerspace/tests/test_urls.py
index 57031a67f..d433a8683 100644
--- a/src/makerspace/tests/test_urls.py
+++ b/src/makerspace/tests/test_urls.py
@@ -1,14 +1,14 @@
from django.test import TestCase
from django_hosts import reverse
+from makerspace.models import Equipment
from util.test_utils import (
+ MOCK_JPG_FILE,
CleanUpTempFilesTestMixin,
Get,
- MOCK_JPG_FILE,
assert_requesting_paths_succeeds,
generate_all_admin_urls_for_model_and_objs,
)
-from ..models import Equipment
class UrlTests(CleanUpTempFilesTestMixin, TestCase):
diff --git a/src/makerspace/urls.py b/src/makerspace/urls.py
index 6d519c270..2be5e0587 100644
--- a/src/makerspace/urls.py
+++ b/src/makerspace/urls.py
@@ -1,8 +1,7 @@
from django.urls import include, path
from contentbox.views import ContentBoxDetailView
-from . import views
-
+from makerspace import views
equipment_urlpatterns = [
path("", views.EquipmentListView.as_view(), name="equipment_list"),
diff --git a/src/makerspace/views.py b/src/makerspace/views.py
index 46f9e0e84..27288da7e 100644
--- a/src/makerspace/views.py
+++ b/src/makerspace/views.py
@@ -12,10 +12,10 @@
)
from contentbox.views import ContentBoxDetailView
+from makerspace.forms import EquipmentForm
+from makerspace.models import Equipment
from util.templatetags.string_tags import title_en
from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin
-from .forms import EquipmentForm
-from .models import Equipment
class MakerspaceView(ContentBoxDetailView):
diff --git a/src/news/admin.py b/src/news/admin.py
index fe3d4d469..2d70bde40 100644
--- a/src/news/admin.py
+++ b/src/news/admin.py
@@ -8,6 +8,8 @@
from django.utils.translation import gettext_lazy as _
from simple_history.admin import SimpleHistoryAdmin
+from news.forms import ArticleForm, EventForm, NewsBaseForm
+from news.models import Article, Event, EventTicket, NewsBase, TimePlace
from util import html_utils
from util.admin_utils import (
DefaultAdminWidgetsMixin,
@@ -18,8 +20,6 @@
)
from util.locale_utils import short_datetime_format
from util.templatetags.html_tags import anchor_tag, urlize_target_blank
-from .forms import ArticleForm, EventForm, NewsBaseForm
-from .models import Article, Event, EventTicket, NewsBase, TimePlace
class NewsBaseAdmin(DefaultAdminWidgetsMixin, SimpleHistoryAdmin):
diff --git a/src/news/api/views.py b/src/news/api/views.py
index f3aed3872..84aa77b6a 100644
--- a/src/news/api/views.py
+++ b/src/news/api/views.py
@@ -4,10 +4,10 @@
from django.views.generic import FormView
from django.views.generic.detail import SingleObjectMixin
+from news.forms import ToggleForm
+from news.models import Article, Event, TimePlace
+from news.views.event import TimePlaceRelatedViewMixin
from util.view_utils import PreventGetRequestsMixin, UTF8JsonResponse
-from ..forms import ToggleForm
-from ..models import Article, Event, TimePlace
-from ..views.event import TimePlaceRelatedViewMixin
class AdminAPINewsBaseToggleView(
diff --git a/src/news/forms.py b/src/news/forms.py
index fd063279f..c20e7e1ad 100644
--- a/src/news/forms.py
+++ b/src/news/forms.py
@@ -5,13 +5,13 @@
from django.db.models import Model
from django.utils.translation import gettext_lazy as _
+from news.models import Article, Event, EventTicket, NewsBase, TimePlace
from web.widgets import (
MazeMapSearchInput,
SemanticChoiceInput,
SemanticDateTimeInput,
SemanticFileInput,
)
-from .models import Article, Event, EventTicket, NewsBase, TimePlace
class TimePlaceForm(forms.ModelForm):
diff --git a/src/news/ical.py b/src/news/ical.py
index 6bd67ac8c..ce9b6e453 100644
--- a/src/news/ical.py
+++ b/src/news/ical.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django_ical.views import ICalFeed
-from .models import TimePlace
+from news.models import TimePlace
class EventFeed(ICalFeed):
diff --git a/src/news/migrations/0001_initial.py b/src/news/migrations/0001_initial.py
index 7ccd66253..771723797 100644
--- a/src/news/migrations/0001_initial.py
+++ b/src/news/migrations/0001_initial.py
@@ -1,10 +1,11 @@
# Generated by Django 2.0.1 on 2018-02-14 12:54
-import ckeditor.fields
import datetime
-from django.db import migrations, models
+
+import ckeditor.fields
import django.db.models.deletion
import django.utils.timezone
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/news/migrations/0007_auto_20180412_1740.py b/src/news/migrations/0007_auto_20180412_1740.py
index 973dc1091..c6135dbbe 100644
--- a/src/news/migrations/0007_auto_20180412_1740.py
+++ b/src/news/migrations/0007_auto_20180412_1740.py
@@ -1,8 +1,9 @@
# Generated by Django 2.0.4 on 2018-04-12 15:40
import datetime
-from django.db import migrations, models
+
import django.utils.timezone
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/news/migrations/0009_auto_20180503_0141.py b/src/news/migrations/0009_auto_20180503_0141.py
index 8f9c126a4..e13c1d399 100644
--- a/src/news/migrations/0009_auto_20180503_0141.py
+++ b/src/news/migrations/0009_auto_20180503_0141.py
@@ -1,6 +1,7 @@
# Generated by Django 2.0.5 on 2018-05-02 23:41
import datetime
+
from django.db import migrations, models
diff --git a/src/news/migrations/0011_auto_20181209_1836.py b/src/news/migrations/0011_auto_20181209_1836.py
index 4fdbd7145..1b41424bb 100644
--- a/src/news/migrations/0011_auto_20181209_1836.py
+++ b/src/news/migrations/0011_auto_20181209_1836.py
@@ -1,6 +1,7 @@
# Generated by Django 2.1.2 on 2018-12-09 17:36
from django.db import migrations
+
import web.multilingual.modelfields
diff --git a/src/news/migrations/0012_auto_20190127_1249.py b/src/news/migrations/0012_auto_20190127_1249.py
index e9d3dfd73..74bd7a623 100644
--- a/src/news/migrations/0012_auto_20190127_1249.py
+++ b/src/news/migrations/0012_auto_20190127_1249.py
@@ -1,10 +1,11 @@
# Generated by Django 2.1.5 on 2019-01-27 11:49
import datetime
+import uuid
+
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
-import uuid
class Migration(migrations.Migration):
diff --git a/src/news/migrations/0013_remove_hoopla.py b/src/news/migrations/0013_remove_hoopla.py
index 4cc706a0a..ba6abfc72 100644
--- a/src/news/migrations/0013_remove_hoopla.py
+++ b/src/news/migrations/0013_remove_hoopla.py
@@ -1,6 +1,7 @@
# Generated by Django 2.1.5 on 2019-02-23 00:33
from django.db import migrations
+
import web.multilingual.modelfields
diff --git a/src/news/migrations/0015_clickbait_required.py b/src/news/migrations/0015_clickbait_required.py
index 2a2e0528d..b546d7d15 100644
--- a/src/news/migrations/0015_clickbait_required.py
+++ b/src/news/migrations/0015_clickbait_required.py
@@ -1,6 +1,7 @@
# Generated by Django 2.1.5 on 2019-02-23 12:16
from django.db import migrations
+
import web.multilingual.modelfields
diff --git a/src/news/migrations/0017_use_datetime_instead_of_date_and_time.py b/src/news/migrations/0017_use_datetime_instead_of_date_and_time.py
index c38595b1f..94e4d331b 100644
--- a/src/news/migrations/0017_use_datetime_instead_of_date_and_time.py
+++ b/src/news/migrations/0017_use_datetime_instead_of_date_and_time.py
@@ -1,8 +1,8 @@
# Generated by Django 2.2.8 on 2020-02-02 11:53
from datetime import datetime
-from django.db import migrations, models
import django.utils.timezone
+from django.db import migrations, models
def merge_article_date_and_time(apps, schema_editor):
diff --git a/src/news/migrations/0018_remove_fields_max_length.py b/src/news/migrations/0018_remove_fields_max_length.py
index 890dfaa6a..159d8966f 100644
--- a/src/news/migrations/0018_remove_fields_max_length.py
+++ b/src/news/migrations/0018_remove_fields_max_length.py
@@ -1,6 +1,7 @@
# Generated by Django 3.1.2 on 2020-10-30 00:10
from django.db import migrations
+
import web.modelfields
import web.multilingual.modelfields
diff --git a/src/news/migrations/0019_add_related_names.py b/src/news/migrations/0019_add_related_names.py
index f358a4034..068dd8e2e 100644
--- a/src/news/migrations/0019_add_related_names.py
+++ b/src/news/migrations/0019_add_related_names.py
@@ -1,8 +1,8 @@
# Generated by Django 3.1.2 on 2020-10-30 00:10
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
class Migration(migrations.Migration):
diff --git a/src/news/migrations/0022_abstract_newsbase.py b/src/news/migrations/0022_abstract_newsbase.py
index 5e84ffdb8..3c3882bea 100644
--- a/src/news/migrations/0022_abstract_newsbase.py
+++ b/src/news/migrations/0022_abstract_newsbase.py
@@ -1,8 +1,9 @@
# Generated by Django 3.1.4 on 2020-12-18 14:41
-from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/news/migrations/0023_article_and_event_and_timeplace_last_modified.py b/src/news/migrations/0023_article_and_event_and_timeplace_last_modified.py
index c366a2dbd..4211a64a7 100644
--- a/src/news/migrations/0023_article_and_event_and_timeplace_last_modified.py
+++ b/src/news/migrations/0023_article_and_event_and_timeplace_last_modified.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.8 on 2021-11-01 11:10
from datetime import datetime
+
from django.db import migrations, models
diff --git a/src/news/migrations/0024_article_and_event_image_description.py b/src/news/migrations/0024_article_and_event_image_description.py
index ce318dbb9..b3ed53bb8 100644
--- a/src/news/migrations/0024_article_and_event_image_description.py
+++ b/src/news/migrations/0024_article_and_event_image_description.py
@@ -1,6 +1,7 @@
# Generated by Django 4.0 on 2021-12-16 12:58
from django.db import migrations
+
import web.multilingual.modelfields
from web.multilingual.data_structures import MultiLingualTextStructure
diff --git a/src/news/migrations/0025_historicalevent_historicalarticle.py b/src/news/migrations/0025_historicalevent_historicalarticle.py
index f10de8009..58d4a8f9e 100644
--- a/src/news/migrations/0025_historicalevent_historicalarticle.py
+++ b/src/news/migrations/0025_historicalevent_historicalarticle.py
@@ -1,10 +1,11 @@
# Generated by Django 4.0.2 on 2022-02-28 23:10
-from django.conf import settings
-from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import simple_history.models
+from django.conf import settings
+from django.db import migrations, models
+
import web.multilingual.modelfields
diff --git a/src/news/migrations/0026_alter_article_and_event_image_filename.py b/src/news/migrations/0026_alter_article_and_event_image_filename.py
index 049045648..d72b0c2b8 100644
--- a/src/news/migrations/0026_alter_article_and_event_image_filename.py
+++ b/src/news/migrations/0026_alter_article_and_event_image_filename.py
@@ -1,10 +1,12 @@
# Generated by Django 4.0.1 on 2022-01-20 19:12
+import functools
+from pathlib import Path
+
from django.conf import settings
from django.db import migrations, models
-import functools
+
import news.models
-from pathlib import Path
import util.modelfields
import util.storage
diff --git a/src/news/migrations/0027_remove_eventticket__email_and__name.py b/src/news/migrations/0027_remove_eventticket__email_and__name.py
index c045df2cb..782c6b1fa 100644
--- a/src/news/migrations/0027_remove_eventticket__email_and__name.py
+++ b/src/news/migrations/0027_remove_eventticket__email_and__name.py
@@ -1,8 +1,8 @@
# Generated by Django 3.2.11 on 2022-03-14 03:46
+import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
-import django.db.models.deletion
def delete_tickets_without_user(apps, schema_editor):
diff --git a/src/news/migrations/0028_add_eventticket_constraints.py b/src/news/migrations/0028_add_eventticket_constraints.py
index 7203b4fe0..21a480016 100644
--- a/src/news/migrations/0028_add_eventticket_constraints.py
+++ b/src/news/migrations/0028_add_eventticket_constraints.py
@@ -1,6 +1,7 @@
# Generated by Django 3.2.11 on 2022-03-14 03:54
from collections import defaultdict
+
from django.db import migrations, models
diff --git a/src/news/migrations/0030_eventticket_creation_date_and_active_last_modified.py b/src/news/migrations/0030_eventticket_creation_date_and_active_last_modified.py
index 9387c2ba4..685afae1a 100644
--- a/src/news/migrations/0030_eventticket_creation_date_and_active_last_modified.py
+++ b/src/news/migrations/0030_eventticket_creation_date_and_active_last_modified.py
@@ -1,8 +1,9 @@
# Generated by Django 4.0.6 on 2022-09-12 19:51
from datetime import datetime
-from django.db import migrations, models
+
import django.utils.timezone
+from django.db import migrations, models
class Migration(migrations.Migration):
diff --git a/src/news/models.py b/src/news/models.py
index 2a3c34bb8..a913439e5 100644
--- a/src/news/models.py
+++ b/src/news/models.py
@@ -11,7 +11,7 @@
from util.locale_utils import short_date_format
from util.modelfields import CompressedImageField
from util.storage import OverwriteStorage, UploadToUtils
-from web.modelfields import URLTextField, UnlimitedCharField
+from web.modelfields import UnlimitedCharField, URLTextField
from web.multilingual.modelfields import (
MultiLingualRichTextUploadingField,
MultiLingualTextField,
diff --git a/src/news/templatetags/event_tags.py b/src/news/templatetags/event_tags.py
index 2a6b06d7d..efdc027bd 100644
--- a/src/news/templatetags/event_tags.py
+++ b/src/news/templatetags/event_tags.py
@@ -1,7 +1,7 @@
from django import template
+from news.models import Event, TimePlace
from users.models import User
-from ..models import Event, TimePlace
register = template.Library()
diff --git a/src/news/tests/forms/test_time_place_form.py b/src/news/tests/forms/test_time_place_form.py
index 17a19515f..d69d63a34 100644
--- a/src/news/tests/forms/test_time_place_form.py
+++ b/src/news/tests/forms/test_time_place_form.py
@@ -3,9 +3,9 @@
from django.test import TestCase
from django.utils import timezone
-from util.test_utils import CleanUpTempFilesTestMixin, MOCK_JPG_FILE
-from ...forms import TimePlaceForm
-from ...models import Event
+from news.forms import TimePlaceForm
+from news.models import Event
+from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin
class FormTestCase(CleanUpTempFilesTestMixin, TestCase):
diff --git a/src/news/tests/models/test_models.py b/src/news/tests/models/test_models.py
index 592508864..77571bc53 100644
--- a/src/news/tests/models/test_models.py
+++ b/src/news/tests/models/test_models.py
@@ -5,13 +5,13 @@
from django.test import TestCase
from django.utils import timezone
+from news.models import Article, Event, EventTicket, TimePlace
from users.models import User
from util.locale_utils import parse_datetime_localized
from util.test_utils import (
assertRaisesIntegrityError_withRollback,
set_without_duplicates,
)
-from ...models import Article, Event, EventTicket, TimePlace
class ArticleEventAndTimePlaceTests(TestCase):
diff --git a/src/news/tests/test_urls.py b/src/news/tests/test_urls.py
index 7203b0323..71aecbaa0 100644
--- a/src/news/tests/test_urls.py
+++ b/src/news/tests/test_urls.py
@@ -8,9 +8,9 @@
from news.models import Article, Event, EventTicket, TimePlace
from users.models import User
from util.test_utils import (
+ MOCK_JPG_FILE,
CleanUpTempFilesTestMixin,
Get,
- MOCK_JPG_FILE,
assert_requesting_paths_succeeds,
generate_all_admin_urls_for_model_and_objs,
)
diff --git a/src/news/tests/views/test_article_views.py b/src/news/tests/views/test_article_views.py
index dc1e60cb3..c3f8cd397 100644
--- a/src/news/tests/views/test_article_views.py
+++ b/src/news/tests/views/test_article_views.py
@@ -6,9 +6,9 @@
from django.utils import timezone
from django_hosts import reverse
+from news.models import Article
from users.models import User
-from util.test_utils import CleanUpTempFilesTestMixin, MOCK_JPG_FILE
-from ...models import Article
+from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin
class ArticleViewTests(CleanUpTempFilesTestMixin, TestCase):
diff --git a/src/news/tests/views/test_event_ticket_views.py b/src/news/tests/views/test_event_ticket_views.py
index 6eebeba4c..3e5f3c0cc 100644
--- a/src/news/tests/views/test_event_ticket_views.py
+++ b/src/news/tests/views/test_event_ticket_views.py
@@ -10,11 +10,11 @@
from django.utils import lorem_ipsum, timezone
from django_hosts import reverse
+from news.models import Event, EventTicket, TimePlace
from users.models import User
from util.model_utils import duplicate
-from util.test_utils import CleanUpTempFilesTestMixin, MOCK_JPG_FILE
+from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin
from web.multilingual.data_structures import MultiLingualTextStructure
-from ...models import Event, EventTicket, TimePlace
class TestEventTicketViews(CleanUpTempFilesTestMixin, TestCase):
diff --git a/src/news/tests/views/test_event_time_place_views.py b/src/news/tests/views/test_event_time_place_views.py
index 14c057317..4d1180bca 100644
--- a/src/news/tests/views/test_event_time_place_views.py
+++ b/src/news/tests/views/test_event_time_place_views.py
@@ -6,9 +6,9 @@
from django.utils import timezone
from django_hosts import reverse
+from news.models import Event, EventTicket, TimePlace
from users.models import User
-from util.test_utils import CleanUpTempFilesTestMixin, MOCK_JPG_FILE
-from ...models import Event, EventTicket, TimePlace
+from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin
class ViewTestCase(CleanUpTempFilesTestMixin, TestCase):
diff --git a/src/news/urls.py b/src/news/urls.py
index 01f71693a..cedae07d3 100644
--- a/src/news/urls.py
+++ b/src/news/urls.py
@@ -1,10 +1,9 @@
from django.contrib.auth.decorators import login_required
from django.urls import include, path
-from .api import views as api_views
-from .ical import SingleTimePlaceFeed
-from .views import article as article_views, event as event_views
-
+from news.api import views as api_views
+from news.ical import SingleTimePlaceFeed
+from news.views import article as article_views, event as event_views
article_urlpatterns = [
path("", article_views.ArticleListView.as_view(), name="article_list"),
diff --git a/src/news/views/article.py b/src/news/views/article.py
index 270bac1c2..f8f2f4802 100644
--- a/src/news/views/article.py
+++ b/src/news/views/article.py
@@ -11,9 +11,9 @@
UpdateView,
)
+from news.forms import ArticleForm, NewsBaseForm
+from news.models import Article, NewsBase
from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin
-from ..forms import ArticleForm, NewsBaseForm
-from ..models import Article, NewsBase
class ArticleListView(ListView):
diff --git a/src/news/views/event.py b/src/news/views/event.py
index 037140ae3..a6804de86 100644
--- a/src/news/views/event.py
+++ b/src/news/views/event.py
@@ -28,6 +28,14 @@
from django_hosts import reverse as django_hosts_reverse
from mail import email
+from news.forms import (
+ EventForm,
+ EventParticipantsSearchQueryForm,
+ EventTicketForm,
+ TimePlaceForm,
+)
+from news.models import Event, EventQuerySet, EventTicket, TimePlace, User
+from news.views.article import NewsBaseFormMixin
from util.locale_utils import short_datetime_format
from util.logging_utils import log_request_exception
from util.view_utils import (
@@ -37,14 +45,6 @@
QueryParameterFormMixin,
insert_form_field_values,
)
-from .article import NewsBaseFormMixin
-from ..forms import (
- EventForm,
- EventParticipantsSearchQueryForm,
- EventTicketForm,
- TimePlaceForm,
-)
-from ..models import Event, EventQuerySet, EventTicket, TimePlace, User
class EventListView(ListView):
diff --git a/src/users/admin.py b/src/users/admin.py
index 47f04a2cc..df47ab31a 100644
--- a/src/users/admin.py
+++ b/src/users/admin.py
@@ -4,8 +4,8 @@
from django.utils.text import capfirst
from django.utils.translation import gettext_lazy as _
+from users.models import User
from util.admin_utils import DefaultAdminWidgetsMixin, UserSearchFieldsMixin
-from .models import User
class UserAdmin(DefaultAdminWidgetsMixin, UserSearchFieldsMixin, DjangoUserAdmin):
diff --git a/src/users/migrations/0001_initial.py b/src/users/migrations/0001_initial.py
index c6be738ff..2c98aa2c5 100644
--- a/src/users/migrations/0001_initial.py
+++ b/src/users/migrations/0001_initial.py
@@ -2,8 +2,8 @@
import django.contrib.auth.models
import django.contrib.auth.validators
-from django.db import migrations, models
import django.utils.timezone
+from django.db import migrations, models
"""
This migration will fail if the database is non-empty. One has to manually replace the default Django user model
diff --git a/src/users/migrations/0003_user_card_number.py b/src/users/migrations/0003_user_card_number.py
index 663c869f0..ce1f0bd01 100644
--- a/src/users/migrations/0003_user_card_number.py
+++ b/src/users/migrations/0003_user_card_number.py
@@ -1,8 +1,9 @@
# Generated by Django 2.2.5 on 2019-10-18 17:41
-import card.modelfields
from django.db import migrations
+import card.modelfields
+
class Migration(migrations.Migration):
dependencies = [
diff --git a/src/users/tests/test_models.py b/src/users/tests/test_models.py
index b13c0a765..7f8f2a76c 100644
--- a/src/users/tests/test_models.py
+++ b/src/users/tests/test_models.py
@@ -1,7 +1,7 @@
from django.test import TestCase
from card.modelfields import CardNumber
-from ..models import User
+from users.models import User
class UserModelTests(TestCase):
diff --git a/src/users/tests/test_urls.py b/src/users/tests/test_urls.py
index 33e59cbf3..71f866966 100644
--- a/src/users/tests/test_urls.py
+++ b/src/users/tests/test_urls.py
@@ -1,12 +1,12 @@
from django.test import TestCase
from django_hosts import reverse
+from users.models import User
from util.test_utils import (
Get,
assert_requesting_paths_succeeds,
generate_all_admin_urls_for_model_and_objs,
)
-from ..models import User
class UrlTests(TestCase):
diff --git a/src/users/urls.py b/src/users/urls.py
index 6657083e2..1483c887c 100644
--- a/src/users/urls.py
+++ b/src/users/urls.py
@@ -1,7 +1,6 @@
from django.urls import path
-from .api import views as api_views
-
+from users.api import views as api_views
# --- Admin API URL patterns (imported in `web/urls.py`) ---
diff --git a/src/util/admin_utils.py b/src/util/admin_utils.py
index 99022fc9b..11bc0297a 100644
--- a/src/util/admin_utils.py
+++ b/src/util/admin_utils.py
@@ -18,7 +18,7 @@
from users.models import User
from util.html_utils import escape_to_named_characters
from util.templatetags.html_tags import anchor_tag
-from web.modelfields import URLTextField, UnlimitedCharField
+from web.modelfields import UnlimitedCharField, URLTextField
from web.multilingual.admin import create_multi_lingual_admin_formfield
diff --git a/src/util/apps.py b/src/util/apps.py
index 6434a9ddf..45b55c836 100644
--- a/src/util/apps.py
+++ b/src/util/apps.py
@@ -8,7 +8,7 @@ class UtilConfig(AppConfig):
def ready(self):
# Importing models (which is done in the `signals` module) should not be done in
# the global scope, as it would have caused an `AppRegistryNotReady` error
- from . import signals
+ from util import signals
# Register / connect to the signals here when the app starts
signals.connect()
diff --git a/src/util/formfields.py b/src/util/formfields.py
index 1211315ba..02178267b 100644
--- a/src/util/formfields.py
+++ b/src/util/formfields.py
@@ -2,11 +2,11 @@
import sys
from io import BytesIO
-from PIL import Image
from django import forms
from django.core.files import File
from django.core.files.uploadedfile import InMemoryUploadedFile, TemporaryUploadedFile
from django.db.models.fields.files import ImageFieldFile
+from PIL import Image
from util.file_utils import file_contents_equal, filenames_equal
from util.logging_utils import get_request_logger
diff --git a/src/util/locale_utils.py b/src/util/locale_utils.py
index 06934177b..56c93891e 100644
--- a/src/util/locale_utils.py
+++ b/src/util/locale_utils.py
@@ -6,7 +6,6 @@
from django.utils.timezone import make_aware
from django.utils.translation import ngettext_lazy
-
DEFAULT_TIMEZONE = timezone.get_default_timezone()
# Code based on https://github.com/django/django/blob/9736596bce4f711ccf2914284938d85748838c94/django/utils/timesince.py#L8-L15
TIME_STRINGS = {
diff --git a/src/util/modelfields.py b/src/util/modelfields.py
index 5782ae5f2..6585f0ac4 100644
--- a/src/util/modelfields.py
+++ b/src/util/modelfields.py
@@ -1,6 +1,6 @@
from django.db import models
-from . import formfields
+from util import formfields
class CompressedImageField(models.ImageField):
diff --git a/src/util/signals.py b/src/util/signals.py
index 4ca65c89c..6dca69955 100644
--- a/src/util/signals.py
+++ b/src/util/signals.py
@@ -2,7 +2,7 @@
from django.db import models
from django.db.models.signals import post_save
-from .storage import UploadToUtils
+from util.storage import UploadToUtils
def connect():
diff --git a/src/util/test_utils.py b/src/util/test_utils.py
index b5b92bfc7..059384c3a 100644
--- a/src/util/test_utils.py
+++ b/src/util/test_utils.py
@@ -18,8 +18,7 @@
from django.utils.dateparse import parse_time
from users.models import User
-from .url_utils import reverse_admin
-
+from util.url_utils import reverse_admin
T = TypeVar("T")
ModelT = TypeVar("ModelT", bound=models.Model)
diff --git a/src/util/tests/test_html_tags.py b/src/util/tests/test_html_tags.py
index bb361c882..685ee831c 100644
--- a/src/util/tests/test_html_tags.py
+++ b/src/util/tests/test_html_tags.py
@@ -1,6 +1,6 @@
from django.test import SimpleTestCase
-from ..templatetags.html_tags import anchor_tag, urlize_target_blank
+from util.templatetags.html_tags import anchor_tag, urlize_target_blank
# noinspection HttpUrlsUsage
diff --git a/src/util/tests/test_html_utils.py b/src/util/tests/test_html_utils.py
index 39e88410f..4a3ecfb7b 100644
--- a/src/util/tests/test_html_utils.py
+++ b/src/util/tests/test_html_utils.py
@@ -2,7 +2,7 @@
import string
from unittest import TestCase
-from ..html_utils import ESCAPE_UNICODE_TO_HTML5, escape_to_named_characters
+from util.html_utils import ESCAPE_UNICODE_TO_HTML5, escape_to_named_characters
class Test(TestCase):
diff --git a/src/util/tests/test_locale_utils.py b/src/util/tests/test_locale_utils.py
index 48c593a43..c1310c050 100644
--- a/src/util/tests/test_locale_utils.py
+++ b/src/util/tests/test_locale_utils.py
@@ -5,7 +5,7 @@
from django.utils.dateparse import parse_datetime
from make_queue.models.reservation import ReservationRule
-from ..locale_utils import (
+from util.locale_utils import (
exact_weekday_to_day_name,
timedelta_to_hours,
year_and_week_to_monday,
diff --git a/src/util/tests/test_permission_tags.py b/src/util/tests/test_permission_tags.py
index 038af3fd2..12d6b49e5 100644
--- a/src/util/tests/test_permission_tags.py
+++ b/src/util/tests/test_permission_tags.py
@@ -2,8 +2,11 @@
from django.test import TestCase
from users.models import User
-from ..auth_utils import get_perm
-from ..templatetags.permission_tags import can_view_admin_panel, has_any_permissions_for
+from util.auth_utils import get_perm
+from util.templatetags.permission_tags import (
+ can_view_admin_panel,
+ has_any_permissions_for,
+)
class PermissionTagTests(TestCase):
diff --git a/src/util/tests/test_semantic_ui_calendar_extra.py b/src/util/tests/test_semantic_ui_calendar_extra.py
index 5e91db747..171274e9a 100644
--- a/src/util/tests/test_semantic_ui_calendar_extra.py
+++ b/src/util/tests/test_semantic_ui_calendar_extra.py
@@ -2,8 +2,8 @@
from django.test import TestCase
-from ..locale_utils import parse_datetime_localized
-from ..templatetags.datetime_tags import formatted_localtime
+from util.locale_utils import parse_datetime_localized
+from util.templatetags.datetime_tags import formatted_localtime
class TemplateTagTestCases(TestCase):
diff --git a/src/util/tests/test_test_utils.py b/src/util/tests/test_test_utils.py
index 9b4831af4..971156c50 100644
--- a/src/util/tests/test_test_utils.py
+++ b/src/util/tests/test_test_utils.py
@@ -4,12 +4,12 @@
from django.test import TestCase
from users.models import User
-from . import test_test_utils_helper_funcs
-from ..test_utils import (
+from util.test_utils import (
generate_all_admin_urls_for_model_and_objs,
mock_module_attrs,
set_without_duplicates,
)
+from util.tests import test_test_utils_helper_funcs
def original_func_monkey_patched(arg):
diff --git a/src/util/tests/test_url_utils.py b/src/util/tests/test_url_utils.py
index ef5f1bd04..46a8fbc38 100644
--- a/src/util/tests/test_url_utils.py
+++ b/src/util/tests/test_url_utils.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django.test import SimpleTestCase
-from ..url_utils import get_reverse_host_kwargs_from_url, urljoin_query
+from util.url_utils import get_reverse_host_kwargs_from_url, urljoin_query
class UrlUtilsTests(SimpleTestCase):
diff --git a/src/util/validators.py b/src/util/validators.py
index f35bb2c30..c3986f87a 100644
--- a/src/util/validators.py
+++ b/src/util/validators.py
@@ -3,7 +3,6 @@
from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy as _
-
lowercase_slug_regex = re.compile(r"^[a-z0-9_-]+$")
lowercase_slug_validator = RegexValidator(
regex=lowercase_slug_regex,
diff --git a/src/util/view_utils.py b/src/util/view_utils.py
index 53cfcce23..29c1d1c2b 100644
--- a/src/util/view_utils.py
+++ b/src/util/view_utils.py
@@ -10,7 +10,7 @@
from django.views.generic.base import RedirectView, TemplateResponseMixin, View
from django.views.generic.edit import FormMixin
-from .url_utils import urljoin_query
+from util.url_utils import urljoin_query
def insert_form_field_values(form_kwargs: dict, field_name_to_value: dict[str, Any]):
diff --git a/src/web/admin_urls.py b/src/web/admin_urls.py
index 134375ab1..d901274d8 100644
--- a/src/web/admin_urls.py
+++ b/src/web/admin_urls.py
@@ -10,7 +10,6 @@
from util.url_utils import ckeditor_uploader_urls, debug_toolbar_urls, logout_urls
-
urlpatterns = [
path(
"robots.txt",
diff --git a/src/web/apps.py b/src/web/apps.py
index c00abda80..a1f38d963 100644
--- a/src/web/apps.py
+++ b/src/web/apps.py
@@ -9,7 +9,7 @@ class WebConfig(AppConfig):
def ready(self):
# Importing models (which is done in the `signals` module) should not be done in
# the global scope, as it would have caused an `AppRegistryNotReady` error
- from . import signals
+ from web import signals
# Register / connect to the signals here when the app starts
signals.connect()
diff --git a/src/web/asgi.py b/src/web/asgi.py
index ec877702e..4802fc3d4 100644
--- a/src/web/asgi.py
+++ b/src/web/asgi.py
@@ -18,7 +18,6 @@
from mail.email import EmailConsumer # noqa: E402
-
channel_routes = {
"email": EmailConsumer.as_asgi(),
}
diff --git a/src/web/hosts.py b/src/web/hosts.py
index db3b6a422..56127fad1 100644
--- a/src/web/hosts.py
+++ b/src/web/hosts.py
@@ -1,7 +1,6 @@
from django.conf import settings
from django_hosts import host
-
host_patterns = [
host(r"(i|internal|internt)", "internal.urls", name="internal"),
host(r"admin", "web.admin_urls", name="admin"),
diff --git a/src/web/management/commands/compilemessages.py b/src/web/management/commands/compilemessages.py
index 2e216c912..c6108dcd8 100644
--- a/src/web/management/commands/compilemessages.py
+++ b/src/web/management/commands/compilemessages.py
@@ -1,6 +1,6 @@
from django.core.management.commands import compilemessages
-from .makemessages import Command as MakeMessagesCommand
+from web.management.commands.makemessages import Command as MakeMessagesCommand
class Command(compilemessages.Command):
diff --git a/src/web/multilingual/admin.py b/src/web/multilingual/admin.py
index 6025b1dc8..699e95bfd 100644
--- a/src/web/multilingual/admin.py
+++ b/src/web/multilingual/admin.py
@@ -3,8 +3,8 @@
import ckeditor.widgets
from django.conf import settings
-from .modelfields import MultiLingualTextField
-from .widgets import MultiLingualTextEdit
+from web.multilingual.modelfields import MultiLingualTextField
+from web.multilingual.widgets import MultiLingualTextEdit
def create_multi_lingual_admin_formfield(
diff --git a/src/web/multilingual/formfields.py b/src/web/multilingual/formfields.py
index c25d0af34..ee8b6826d 100644
--- a/src/web/multilingual/formfields.py
+++ b/src/web/multilingual/formfields.py
@@ -7,8 +7,8 @@
from django.utils.translation import gettext_lazy as _
from util.logging_utils import get_request_logger
-from .data_structures import MultiLingualTextStructure
-from ..widgets import CKEditorWidget
+from web.multilingual.data_structures import MultiLingualTextStructure
+from web.widgets import CKEditorWidget
class MultiLingualFormField(forms.MultiValueField):
diff --git a/src/web/multilingual/modelfields.py b/src/web/multilingual/modelfields.py
index 206d21ee3..09c08c5b1 100644
--- a/src/web/multilingual/modelfields.py
+++ b/src/web/multilingual/modelfields.py
@@ -2,13 +2,13 @@
from django.db import models
-from .data_structures import MultiLingualTextStructure
-from .formfields import (
+from web.multilingual.data_structures import MultiLingualTextStructure
+from web.multilingual.formfields import (
MultiLingualFormField,
MultiLingualRichTextFormField,
MultiLingualRichTextUploadingFormField,
)
-from .widgets import (
+from web.multilingual.widgets import (
MultiLingualRichText,
MultiLingualRichTextUploading,
MultiLingualTextEdit,
diff --git a/src/web/multilingual/widgets.py b/src/web/multilingual/widgets.py
index e50f04571..161eb275d 100644
--- a/src/web/multilingual/widgets.py
+++ b/src/web/multilingual/widgets.py
@@ -3,8 +3,8 @@
from django import forms
from js_asset import JS
-from .data_structures import MultiLingualTextStructure
-from ..widgets import CKEditorUploadingWidget, CKEditorWidget
+from web.multilingual.data_structures import MultiLingualTextStructure
+from web.widgets import CKEditorUploadingWidget, CKEditorWidget
class MultiLingualTextEdit(forms.MultiWidget):
diff --git a/src/web/settings.py b/src/web/settings.py
index 4e86364e6..243a15e58 100644
--- a/src/web/settings.py
+++ b/src/web/settings.py
@@ -12,8 +12,7 @@
import env
from env import DatabaseSystem
-from .static import serve_interpolated
-
+from web.static import serve_interpolated
is_testing = "test" in sys.argv
# Disable logging when testing
diff --git a/src/web/static.py b/src/web/static.py
index 4ff34dc86..d2095d0f3 100644
--- a/src/web/static.py
+++ b/src/web/static.py
@@ -11,7 +11,6 @@
from django.http import FileResponse
from django.views.static import serve
-
# The glob pattern for the files that should have their contents interpolated (as in
# https://en.wikipedia.org/wiki/String_interpolation)
INTERPOLATION_GLOB_PATTERN = "*.interpolated.*"
diff --git a/src/web/tests/test_multilingual.py b/src/web/tests/test_multilingual.py
index a56039691..3d0ec42c9 100644
--- a/src/web/tests/test_multilingual.py
+++ b/src/web/tests/test_multilingual.py
@@ -4,9 +4,9 @@
from django.test import TestCase, override_settings
from django.utils import translation
-from ..multilingual.data_structures import MultiLingualTextStructure
-from ..multilingual.formfields import MultiLingualFormField
-from ..multilingual.modelfields import MultiLingualTextField
+from web.multilingual.data_structures import MultiLingualTextStructure
+from web.multilingual.formfields import MultiLingualFormField
+from web.multilingual.modelfields import MultiLingualTextField
# Ensure the settings are as expected by the tests below
diff --git a/src/web/tests/test_static.py b/src/web/tests/test_static.py
index 8b4e923ec..bfb82034a 100644
--- a/src/web/tests/test_static.py
+++ b/src/web/tests/test_static.py
@@ -5,7 +5,6 @@
from django.templatetags.static import static
from django.test import LiveServerTestCase, override_settings
-
MANIFEST_HEX_SUFFIX_REGEX = r"\.[0-9a-f]{12}"
diff --git a/src/web/tests/test_urls.py b/src/web/tests/test_urls.py
index 5fcc494d4..d112103ad 100644
--- a/src/web/tests/test_urls.py
+++ b/src/web/tests/test_urls.py
@@ -13,7 +13,6 @@
from util.test_utils import Get, assert_requesting_paths_succeeds
from util.url_utils import reverse_admin
-
# Makes sure that the subdomain of all requests is `admin`
ADMIN_CLIENT_DEFAULTS = {"SERVER_NAME": f"admin.{settings.PARENT_HOST}"}
diff --git a/src/web/tests/test_views.py b/src/web/tests/test_views.py
index 3b611cff6..9845229a9 100644
--- a/src/web/tests/test_views.py
+++ b/src/web/tests/test_views.py
@@ -8,8 +8,8 @@
from news.models import Event, TimePlace
from users.models import User
from util.test_utils import (
- CleanUpTempFilesTestMixin,
MOCK_JPG_FILE,
+ CleanUpTempFilesTestMixin,
assertRedirectsWithPathPrefix,
)
from web.views import IndexPageView
diff --git a/src/web/urls.py b/src/web/urls.py
index 71e5e491f..3cefca456 100644
--- a/src/web/urls.py
+++ b/src/web/urls.py
@@ -28,8 +28,7 @@
permission_required_else_denied,
)
from util.view_utils import RedirectViewWithStaticQuery
-from . import views
-
+from web import views
extra = "/" if getattr(settings, setting_name("TRAILING_SLASH"), True) else ""
diff --git a/src/web/wsgi.py b/src/web/wsgi.py
index b7cefa891..f58492948 100644
--- a/src/web/wsgi.py
+++ b/src/web/wsgi.py
@@ -2,7 +2,6 @@
from django.core.wsgi import get_wsgi_application
-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings")
application = get_wsgi_application()