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()