From 547e457f3e539fef02909e6a974cf18b0e057cbf Mon Sep 17 00:00:00 2001 From: Anders <6058745+ddabble@users.noreply.github.com> Date: Wed, 11 Feb 2026 08:54:22 +0100 Subject: [PATCH 1/2] Added the I Ruff rule --- CONTRIBUTING.md | 11 ----------- pyproject.toml | 3 +++ src/announcements/admin.py | 1 + src/announcements/forms.py | 1 + src/announcements/migrations/0001_initial.py | 2 ++ .../migrations/0002_help_text_and_naming.py | 1 + .../migrations/0003_use_timezone_aware_default.py | 2 +- ..._remove_announcement_fields_max_length_and_null.py | 1 + src/announcements/tests/test_urls.py | 1 + src/announcements/urls.py | 1 - src/announcements/views.py | 1 + src/card/utils.py | 1 + src/card/validators.py | 1 - src/checkin/admin.py | 1 + src/checkin/api/views.py | 1 + src/checkin/migrations/0001_initial.py | 2 +- .../0009_alter_verbose_names_and_related_names.py | 2 +- ...ofile_and_skill_and_suggestskill_image_filename.py | 6 ++++-- .../migrations/0012_profile_user_non_nullable.py | 2 +- src/checkin/tests/test_urls.py | 1 + src/checkin/urls.py | 1 - src/checkin/views.py | 3 ++- src/contentbox/admin.py | 1 + src/contentbox/forms.py | 1 + src/contentbox/migrations/0005_auto_20181209_1836.py | 2 ++ .../migrations/0008_contentbox_last_modified.py | 1 + .../migrations/0011_historicalcontentbox.py | 5 +++-- .../0012_rename_title_contentbox_url_name.py | 3 ++- src/contentbox/migrations/0013_contentbox_title.py | 1 + ...5_historicalcontentbox_extra_change_permissions.py | 2 +- src/contentbox/tests/test_urls.py | 1 + src/contentbox/tests/test_views.py | 5 +++-- src/contentbox/tests/urls/hosts.py | 2 +- src/contentbox/tests/urls/urls_internal.py | 2 +- src/contentbox/tests/urls/urls_main.py | 2 +- src/contentbox/views.py | 1 + src/dataporten/ldap_utils.py | 1 - src/dataporten/tests/test_views.py | 1 + src/dataporten/views.py | 1 + src/docs/admin.py | 1 - src/docs/forms.py | 1 + src/docs/migrations/0001_initial.py | 2 +- src/docs/migrations/0003_user_association.py | 2 +- src/docs/migrations/0004_page_current_content.py | 2 +- ...page_current_content_onetoone_and_related_names.py | 2 +- src/docs/models.py | 2 +- src/docs/tests/test_urls.py | 2 +- src/docs/urls.py | 2 +- src/docs/validators.py | 1 - src/docs/views.py | 3 ++- src/faq/admin.py | 1 + src/faq/forms.py | 1 + src/faq/migrations/0001_initial.py | 1 + src/faq/migrations/0003_question_last_modified.py | 1 + src/faq/migrations/0004_historicalquestion.py | 5 +++-- .../migrations/0006_historicalquestion_categories.py | 2 +- src/faq/urls.py | 1 - src/faq/views.py | 1 + src/groups/admin.py | 1 + src/groups/forms.py | 1 + src/groups/migrations/0001_initial.py | 2 +- src/groups/migrations/0002_committee.py | 2 +- src/groups/migrations/0003_auto_20180925_2204.py | 2 +- .../migrations/0007_add_related_and_verbose_names.py | 2 +- ...08_committee_and_inheritancegroup_last_modified.py | 1 + src/groups/migrations/0009_historicalcommittee.py | 4 ++-- .../migrations/0010_alter_committee_image_filename.py | 6 ++++-- .../migrations/0011_historicalinheritancegroup.py | 4 ++-- ...0013_historicalinheritancegroup_own_permissions.py | 2 +- src/groups/tests/test_admin.py | 1 + src/groups/tests/test_models.py | 1 + src/groups/tests/test_urls.py | 3 ++- src/groups/urls.py | 1 - src/groups/views.py | 1 + src/internal/admin.py | 1 + src/internal/forms.py | 1 + src/internal/migrations/0001_initial.py | 3 ++- .../migrations/0002_verbose_names_and_allow_blank.py | 3 ++- .../0003_member_property_to_system_access.py | 2 +- .../migrations/0004_member_phone_number_field.py | 2 +- src/internal/migrations/0006_secret.py | 1 + .../0007_remove_member_fields_max_length_and_null.py | 3 ++- src/internal/migrations/0010_add_related_names.py | 2 +- .../0012_member_and_systemaccess_last_modified.py | 1 + ...r_and_github_and_discord_and_minecraft_username.py | 1 + src/internal/migrations/0017_historicalsecret.py | 5 +++-- src/internal/migrations/0018_quote.py | 2 +- src/internal/migrations/0019_quote_date.py | 1 + .../0021_alter_historicalsecret_content_and_more.py | 1 + .../migrations/0022_member_user_set_null_on_delete.py | 2 +- ...istoricalmember_and_historicalmember_committees.py | 10 ++++++---- ...ons_and_historicalsecret_extra_view_permissions.py | 2 +- src/internal/models.py | 1 + src/internal/signals.py | 1 + src/internal/templatetags/member.py | 1 + src/internal/tests/test_urls.py | 4 ++-- src/internal/tests/test_views.py | 3 ++- src/internal/urls.py | 2 +- src/internal/views.py | 1 + src/make_queue/admin.py | 3 ++- src/make_queue/api/views.py | 3 ++- src/make_queue/forms/course.py | 1 + src/make_queue/forms/machine.py | 1 + src/make_queue/forms/quota.py | 1 + src/make_queue/forms/reservation.py | 1 + src/make_queue/forms/reservation_rule.py | 1 + src/make_queue/migrations/0001_initial.py | 2 +- src/make_queue/migrations/0007_auto_20180914_1306.py | 2 +- src/make_queue/migrations/0008_auto_20181103_1524.py | 3 ++- .../0010_unique_username_in_course_registration.py | 1 + .../0012_usage_rules_multilingual_content_field.py | 2 ++ .../migrations/0013_course_card_number_field.py | 3 ++- src/make_queue/migrations/0015_machinetype.py | 2 +- src/make_queue/migrations/0016_auto_20201103_1431.py | 3 ++- .../0017_remove_fields_max_length_and_add_blank.py | 5 +++-- src/make_queue/migrations/0019_add_related_names.py | 2 +- ..._printer3dcourse_user_onetoone_and_related_name.py | 2 +- src/make_queue/migrations/0023_machine_stream_name.py | 3 ++- ...inter3dcourse_and_reservationrule_last_modified.py | 1 + ...025_reservationrule_start_days_multiselectfield.py | 2 +- .../migrations/0026_historicalmachineusagerule.py | 5 +++-- .../migrations/0030_machine_info_message.py | 3 ++- src/make_queue/migrations/0033_historicalmachine.py | 8 +++++--- .../0034_alter_reservationrule_start_days.py | 3 ++- ...ion_printer3dcourse_course_permissions_and_more.py | 3 ++- src/make_queue/models/course.py | 5 +++-- src/make_queue/models/machine.py | 3 ++- src/make_queue/models/reservation.py | 4 ++-- src/make_queue/templatetags/reservation_extra.py | 1 + src/make_queue/tests/forms/test_course_forms.py | 1 + src/make_queue/tests/forms/test_machine_forms.py | 1 + src/make_queue/tests/forms/test_reservation_forms.py | 1 + src/make_queue/tests/models/test_course.py | 1 + src/make_queue/tests/models/test_machines.py | 1 + src/make_queue/tests/models/test_reservation.py | 2 +- src/make_queue/tests/models/test_reservation_rule.py | 1 - .../tests/templatetags/test_reservation_extra.py | 1 + src/make_queue/tests/test_urls.py | 4 ++-- .../tests/views/test_api_reservation_views.py | 2 +- src/make_queue/tests/views/test_machine_views.py | 1 + src/make_queue/tests/views/test_quota_views.py | 1 + src/make_queue/tests/views/test_reservation_views.py | 3 ++- src/make_queue/urls.py | 1 - src/make_queue/views/course.py | 1 + src/make_queue/views/machine.py | 1 + src/make_queue/views/quota.py | 1 + src/make_queue/views/reservation.py | 3 ++- src/make_queue/views/reservation_rule.py | 1 + src/makerspace/admin.py | 1 + src/makerspace/forms.py | 1 + src/makerspace/migrations/0001_initial.py | 1 + .../0004_remove_equipment_title_max_length.py | 1 + .../migrations/0006_equipment_last_modified.py | 1 + src/makerspace/migrations/0007_historicalequipment.py | 5 +++-- .../migrations/0008_alter_equipment_image_filename.py | 6 ++++-- src/makerspace/tests/test_urls.py | 3 ++- src/makerspace/urls.py | 2 +- src/makerspace/views.py | 1 + src/news/admin.py | 1 + src/news/api/views.py | 1 + src/news/forms.py | 1 + src/news/migrations/0001_initial.py | 5 +++-- src/news/migrations/0007_auto_20180412_1740.py | 3 ++- src/news/migrations/0009_auto_20180503_0141.py | 1 + src/news/migrations/0011_auto_20181209_1836.py | 1 + src/news/migrations/0012_auto_20190127_1249.py | 5 +++-- src/news/migrations/0013_remove_hoopla.py | 1 + src/news/migrations/0015_clickbait_required.py | 1 + .../0017_use_datetime_instead_of_date_and_time.py | 2 +- src/news/migrations/0018_remove_fields_max_length.py | 1 + src/news/migrations/0019_add_related_names.py | 2 +- src/news/migrations/0022_abstract_newsbase.py | 3 ++- ...3_article_and_event_and_timeplace_last_modified.py | 1 + .../0024_article_and_event_image_description.py | 1 + .../0025_historicalevent_historicalarticle.py | 5 +++-- .../0026_alter_article_and_event_image_filename.py | 6 ++++-- .../0027_remove_eventticket__email_and__name.py | 2 +- .../migrations/0028_add_eventticket_constraints.py | 1 + ...ntticket_creation_date_and_active_last_modified.py | 3 ++- src/news/models.py | 2 +- src/news/templatetags/event_tags.py | 1 + src/news/tests/forms/test_time_place_form.py | 3 ++- src/news/tests/models/test_models.py | 1 + src/news/tests/test_urls.py | 2 +- src/news/tests/views/test_article_views.py | 3 ++- src/news/tests/views/test_event_ticket_views.py | 3 ++- src/news/tests/views/test_event_time_place_views.py | 3 ++- src/news/urls.py | 1 - src/news/views/article.py | 1 + src/news/views/event.py | 3 ++- src/users/admin.py | 1 + src/users/migrations/0001_initial.py | 2 +- src/users/migrations/0003_user_card_number.py | 3 ++- src/users/tests/test_models.py | 1 + src/users/tests/test_urls.py | 1 + src/users/urls.py | 1 - src/util/admin_utils.py | 2 +- src/util/formfields.py | 2 +- src/util/locale_utils.py | 1 - src/util/test_utils.py | 2 +- src/util/tests/test_locale_utils.py | 1 + src/util/tests/test_permission_tags.py | 1 + src/util/tests/test_test_utils.py | 3 ++- src/util/validators.py | 1 - src/web/admin_urls.py | 1 - src/web/asgi.py | 1 - src/web/hosts.py | 1 - src/web/multilingual/formfields.py | 3 ++- src/web/multilingual/widgets.py | 2 +- src/web/settings.py | 2 +- src/web/static.py | 1 - src/web/tests/test_static.py | 1 - src/web/tests/test_urls.py | 1 - src/web/tests/test_views.py | 2 +- src/web/urls.py | 2 +- src/web/wsgi.py | 1 - 216 files changed, 279 insertions(+), 161 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 609df45a0..4b87c7e6b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -160,17 +160,6 @@ For example:
`_("{chant} Batman!").format(chant="NaN" * 15)` (where `gettext #### 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`). diff --git a/pyproject.toml b/pyproject.toml index 0230c5614..03e72c0de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,11 +70,14 @@ format.docstring-code-format = true lint.select = [ "E", # flake8/pycodestyle (Error) "F", # flake8/Pyflakes + "I", # isort ] # Disable line length check in migrations lint.per-file-ignores."**/migrations/**" = [ "E501" ] +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..b084707c0 100644 --- a/src/announcements/admin.py +++ b/src/announcements/admin.py @@ -7,6 +7,7 @@ list_filter_factory, search_escaped_and_unescaped, ) + from .models import Announcement diff --git a/src/announcements/forms.py b/src/announcements/forms.py index 013fb90bd..c760ded0a 100644 --- a/src/announcements/forms.py +++ b/src/announcements/forms.py @@ -1,6 +1,7 @@ from django.forms import ModelForm from web.widgets import SemanticChoiceInput, SemanticDateTimeInput + from .models import Announcement 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/tests/test_urls.py b/src/announcements/tests/test_urls.py index 881a7e6f2..3cb50b3cc 100644 --- a/src/announcements/tests/test_urls.py +++ b/src/announcements/tests/test_urls.py @@ -7,6 +7,7 @@ assert_requesting_paths_succeeds, generate_all_admin_urls_for_model_and_objs, ) + from ..models import Announcement diff --git a/src/announcements/urls.py b/src/announcements/urls.py index 05c4c6222..ffbe29cc6 100644 --- a/src/announcements/urls.py +++ b/src/announcements/urls.py @@ -2,7 +2,6 @@ from . import views - urlpatterns = [] # --- Admin URL patterns (imported in `web/urls.py`) --- diff --git a/src/announcements/views.py b/src/announcements/views.py index e870928fd..1a27b796d 100644 --- a/src/announcements/views.py +++ b/src/announcements/views.py @@ -6,6 +6,7 @@ from django.views.generic import CreateView, DeleteView, ListView, UpdateView from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin + from .forms import AnnouncementForm from .models import Announcement diff --git a/src/card/utils.py b/src/card/utils.py index e119e484d..1e84fc6ba 100644 --- a/src/card/utils.py +++ b/src/card/utils.py @@ -2,6 +2,7 @@ from make_queue.models.course import Printer3DCourse from users.models import User + from .formfields import CardNumberField 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/checkin/admin.py b/src/checkin/admin.py index 1af281c3f..cef8f1b44 100644 --- a/src/checkin/admin.py +++ b/src/checkin/admin.py @@ -1,6 +1,7 @@ from django.contrib import admin from util.admin_utils import DefaultAdminWidgetsMixin + from .models import Profile, Skill, SuggestSkill, UserSkill diff --git a/src/checkin/api/views.py b/src/checkin/api/views.py index e60683e30..2a307ac75 100644 --- a/src/checkin/api/views.py +++ b/src/checkin/api/views.py @@ -8,6 +8,7 @@ from card import utils as card_utils from util.view_utils import PreventGetRequestsMixin, UTF8JsonResponse + from ..models import RegisterProfile, Skill, SuggestSkill 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..281eb394d 100644 --- a/src/checkin/tests/test_urls.py +++ b/src/checkin/tests/test_urls.py @@ -7,6 +7,7 @@ assert_requesting_paths_succeeds, generate_all_admin_urls_for_model_and_objs, ) + from ..models import Profile, Skill, SuggestSkill, UserSkill diff --git a/src/checkin/urls.py b/src/checkin/urls.py index b850efc20..e5f7680d0 100644 --- a/src/checkin/urls.py +++ b/src/checkin/urls.py @@ -3,7 +3,6 @@ from . import views - urlpatterns = [ # This path is currently not in use # path("", views.UserSkillListView.as_view(), name='user_skill_list'), diff --git a/src/checkin/views.py b/src/checkin/views.py index fb8f2e930..374f23d13 100644 --- a/src/checkin/views.py +++ b/src/checkin/views.py @@ -13,9 +13,10 @@ from django.views.generic import TemplateView from card.views import RFIDView +from make_queue.models.course import CoursePermission from util.view_utils import PreventGetRequestsMixin + from .models import Profile, RegisterProfile, Skill, SuggestSkill, UserSkill -from make_queue.models.course import CoursePermission class AdminCheckInView(RFIDView): diff --git a/src/contentbox/admin.py b/src/contentbox/admin.py index b9513f56d..2725ec585 100644 --- a/src/contentbox/admin.py +++ b/src/contentbox/admin.py @@ -4,6 +4,7 @@ from util import html_utils from util.admin_utils import DefaultAdminWidgetsMixin, search_escaped_and_unescaped + from .models import ContentBox diff --git a/src/contentbox/forms.py b/src/contentbox/forms.py index 330927962..8b9997f10 100644 --- a/src/contentbox/forms.py +++ b/src/contentbox/forms.py @@ -5,6 +5,7 @@ MultiLingualRichTextUploading, MultiLingualTextInput, ) + from .models import ContentBox 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..b3972a6ec 100644 --- a/src/contentbox/tests/test_urls.py +++ b/src/contentbox/tests/test_urls.py @@ -25,6 +25,7 @@ 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 diff --git a/src/contentbox/tests/test_views.py b/src/contentbox/tests/test_views.py index 06aba30e8..3e751afbb 100644 --- a/src/contentbox/tests/test_views.py +++ b/src/contentbox/tests/test_views.py @@ -14,12 +14,13 @@ from util.url_utils import reverse_admin from web.multilingual.widgets import MultiLingualTextEdit from web.tests.test_urls import ADMIN_CLIENT_DEFAULTS + +from ..forms import ContentBoxForm, EditSourceContentBoxForm +from ..models import ContentBox 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..50a904e04 100644 --- a/src/contentbox/tests/urls/hosts.py +++ b/src/contentbox/tests/urls/hosts.py @@ -15,8 +15,8 @@ settings.ALLOWED_REDIRECT_HOSTS = generate_all_hosts(settings.ALL_SUBDOMAINS) from web.hosts import host_patterns as base_host_patterns # noqa: E402 -from . import urls_internal, urls_main # 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..27e40bc57 100644 --- a/src/contentbox/tests/urls/urls_internal.py +++ b/src/contentbox/tests/urls/urls_internal.py @@ -2,8 +2,8 @@ from django.urls import path from internal.urls import urlpatterns as internal_urlpatterns -from ...views import ContentBoxDetailView, ContentBoxUpdateView +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..a72b3eb0a 100644 --- a/src/contentbox/tests/urls/urls_main.py +++ b/src/contentbox/tests/urls/urls_main.py @@ -1,8 +1,8 @@ from django.conf.urls.i18n import i18n_patterns from web.urls import urlpatterns as base_urlpatterns -from ...views import ContentBoxDetailView +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..5fbb282f2 100644 --- a/src/contentbox/views.py +++ b/src/contentbox/views.py @@ -12,6 +12,7 @@ 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 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..2054fb825 100644 --- a/src/dataporten/tests/test_views.py +++ b/src/dataporten/tests/test_views.py @@ -8,6 +8,7 @@ from users.models import User from util.test_utils import mock_module_attrs + from .. import views from ..social import DataportenOAuth2 diff --git a/src/dataporten/views.py b/src/dataporten/views.py index b8a9d756c..e44d03a32 100644 --- a/src/dataporten/views.py +++ b/src/dataporten/views.py @@ -8,6 +8,7 @@ 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 diff --git a/src/docs/admin.py b/src/docs/admin.py index b6aff55ee..3c44bd0b3 100644 --- a/src/docs/admin.py +++ b/src/docs/admin.py @@ -2,6 +2,5 @@ from .models import Content, Page - admin.site.register(Page) admin.site.register(Content) diff --git a/src/docs/forms.py b/src/docs/forms.py index d7c89667e..b41104e28 100644 --- a/src/docs/forms.py +++ b/src/docs/forms.py @@ -2,6 +2,7 @@ from django.utils.translation import gettext_lazy as _ from web.widgets import CKEditorUploadingWidget + from .models import Content, Page 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..52d6c96e0 100644 --- a/src/docs/models.py +++ b/src/docs/models.py @@ -4,8 +4,8 @@ from django_hosts import reverse from users.models import User -from .validators import page_title_validator +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..819d22f3f 100644 --- a/src/docs/tests/test_urls.py +++ b/src/docs/tests/test_urls.py @@ -11,8 +11,8 @@ generate_all_admin_urls_for_model_and_objs, ) from util.url_utils import reverse_docs -from ..models import Content, Page +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..019480b47 100644 --- a/src/docs/urls.py +++ b/src/docs/urls.py @@ -11,8 +11,8 @@ logout_urls, permission_required_else_denied, ) -from . import converters, views +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..e1eb8ff88 100644 --- a/src/docs/views.py +++ b/src/docs/views.py @@ -22,13 +22,14 @@ QueryParameterFormMixin, insert_form_field_values, ) + from .forms import ( AddPageForm, ChangePageVersionForm, DocumentationPageSearchQueryForm, PageContentForm, ) -from .models import Content, MAIN_PAGE_TITLE, Page +from .models import MAIN_PAGE_TITLE, Content, Page class DocumentationPageRelatedViewMixin: diff --git a/src/faq/admin.py b/src/faq/admin.py index 6b1093fc5..f10b6446e 100644 --- a/src/faq/admin.py +++ b/src/faq/admin.py @@ -8,6 +8,7 @@ link_to_admin_change_form, search_escaped_and_unescaped, ) + from .models import Category, Question diff --git a/src/faq/forms.py b/src/faq/forms.py index 5f753ac4e..f6f0346f7 100644 --- a/src/faq/forms.py +++ b/src/faq/forms.py @@ -2,6 +2,7 @@ from django.utils.translation import gettext_lazy as _ from web.widgets import SemanticMultipleSelectInput + from .models import Category, Question 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..56a40eb3f 100644 --- a/src/faq/urls.py +++ b/src/faq/urls.py @@ -2,7 +2,6 @@ from . 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..eff8fd5c4 100644 --- a/src/faq/views.py +++ b/src/faq/views.py @@ -13,6 +13,7 @@ from users.models import User from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin + from .forms import CategoryForm, QuestionForm from .models import Category, Question diff --git a/src/groups/admin.py b/src/groups/admin.py index d5508c6e7..1f6ce15e1 100644 --- a/src/groups/admin.py +++ b/src/groups/admin.py @@ -2,6 +2,7 @@ from simple_history.admin import SimpleHistoryAdmin from util.admin_utils import DefaultAdminWidgetsMixin + from .models import Committee, InheritanceGroup diff --git a/src/groups/forms.py b/src/groups/forms.py index 2a16bb329..03f79a34e 100644 --- a/src/groups/forms.py +++ b/src/groups/forms.py @@ -1,6 +1,7 @@ from django import forms from web.widgets import SemanticFileInput + from .models import Committee 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/tests/test_admin.py b/src/groups/tests/test_admin.py index e9325c4ba..fb4373ad2 100644 --- a/src/groups/tests/test_admin.py +++ b/src/groups/tests/test_admin.py @@ -8,6 +8,7 @@ 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 diff --git a/src/groups/tests/test_models.py b/src/groups/tests/test_models.py index 680a3f572..d5ef9bbe0 100644 --- a/src/groups/tests/test_models.py +++ b/src/groups/tests/test_models.py @@ -5,6 +5,7 @@ from news.models import Article from users.models import User from util.auth_utils import perm_to_str + from ..models import Committee, InheritanceGroup diff --git a/src/groups/tests/test_urls.py b/src/groups/tests/test_urls.py index d0279dc79..a21d37bad 100644 --- a/src/groups/tests/test_urls.py +++ b/src/groups/tests/test_urls.py @@ -3,12 +3,13 @@ from django_hosts import reverse 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 diff --git a/src/groups/urls.py b/src/groups/urls.py index 6c9b5b167..fa87f316f 100644 --- a/src/groups/urls.py +++ b/src/groups/urls.py @@ -2,7 +2,6 @@ from . import views - urlpatterns = [ path("", views.CommitteeListView.as_view(), name="committee_list"), path("/", views.CommitteeDetailView.as_view(), name="committee_detail"), diff --git a/src/groups/views.py b/src/groups/views.py index fb6d5812a..bc047d886 100644 --- a/src/groups/views.py +++ b/src/groups/views.py @@ -4,6 +4,7 @@ from django.views.generic import DetailView, ListView, UpdateView from util.view_utils import CustomFieldsetFormMixin + from .forms import CommitteeForm from .models import Committee diff --git a/src/internal/admin.py b/src/internal/admin.py index 9e24d39b6..43dcd7402 100644 --- a/src/internal/admin.py +++ b/src/internal/admin.py @@ -9,6 +9,7 @@ UserSearchFieldsMixin, search_escaped_and_unescaped, ) + from .models import Member, Quote, Secret, SystemAccess diff --git a/src/internal/forms.py b/src/internal/forms.py index b959d2295..39335897a 100644 --- a/src/internal/forms.py +++ b/src/internal/forms.py @@ -10,6 +10,7 @@ SemanticMultipleSelectInput, SemanticSearchableChoiceInput, ) + from .models import Member, Quote, Secret, SystemAccess 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/models.py b/src/internal/models.py index bfcb202b0..48a81a224 100644 --- a/src/internal/models.py +++ b/src/internal/models.py @@ -17,6 +17,7 @@ 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 diff --git a/src/internal/signals.py b/src/internal/signals.py index 05f4cc96e..6f6ab4b38 100644 --- a/src/internal/signals.py +++ b/src/internal/signals.py @@ -1,6 +1,7 @@ from django.db.models.signals import m2m_changed from groups.models import Committee + from .models import Member diff --git a/src/internal/templatetags/member.py b/src/internal/templatetags/member.py index 588649810..af1bf86a7 100644 --- a/src/internal/templatetags/member.py +++ b/src/internal/templatetags/member.py @@ -3,6 +3,7 @@ from django.utils.translation import gettext_lazy as _ 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..7f6425652 100644 --- a/src/internal/tests/test_urls.py +++ b/src/internal/tests/test_urls.py @@ -7,15 +7,15 @@ 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_views.py b/src/internal/tests/test_views.py index 128b3870c..d555677c2 100644 --- a/src/internal/tests/test_views.py +++ b/src/internal/tests/test_views.py @@ -15,8 +15,9 @@ 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 +from .test_urls import INTERNAL_CLIENT_DEFAULTS class InternalContentBoxTests(TestCase): diff --git a/src/internal/urls.py b/src/internal/urls.py index 299791622..e0f9de40b 100644 --- a/src/internal/urls.py +++ b/src/internal/urls.py @@ -11,8 +11,8 @@ logout_urls, permission_required_else_denied, ) -from . import views +from . import views urlpatterns = [ path( diff --git a/src/internal/views.py b/src/internal/views.py index df5b29c49..2607c844c 100644 --- a/src/internal/views.py +++ b/src/internal/views.py @@ -14,6 +14,7 @@ from contentbox.views import ContentBoxDetailView, ContentBoxUpdateView from make_queue.models.course import Printer3DCourse from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin + from .forms import ( AddMemberForm, ChangeMemberForm, diff --git a/src/make_queue/admin.py b/src/make_queue/admin.py index a3a9a9c1c..8e9d4138a 100644 --- a/src/make_queue/admin.py +++ b/src/make_queue/admin.py @@ -8,10 +8,11 @@ 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 diff --git a/src/make_queue/api/views.py b/src/make_queue/api/views.py index 2694bd123..0722a81f8 100644 --- a/src/make_queue/api/views.py +++ b/src/make_queue/api/views.py @@ -12,13 +12,14 @@ 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 +from .forms import APIMachineDataQueryForm, APIReservationListQueryForm class APIMachineDataView( diff --git a/src/make_queue/forms/course.py b/src/make_queue/forms/course.py index e51185955..3e79be374 100644 --- a/src/make_queue/forms/course.py +++ b/src/make_queue/forms/course.py @@ -10,6 +10,7 @@ SemanticDateInput, SemanticSearchableChoiceInput, ) + from ..models.course import CoursePermission, Printer3DCourse diff --git a/src/make_queue/forms/machine.py b/src/make_queue/forms/machine.py index cef1b24c0..b74e779b1 100644 --- a/src/make_queue/forms/machine.py +++ b/src/make_queue/forms/machine.py @@ -10,6 +10,7 @@ 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 diff --git a/src/make_queue/forms/quota.py b/src/make_queue/forms/quota.py index eea3f8341..1f4beee83 100644 --- a/src/make_queue/forms/quota.py +++ b/src/make_queue/forms/quota.py @@ -6,6 +6,7 @@ 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 diff --git a/src/make_queue/forms/reservation.py b/src/make_queue/forms/reservation.py index d04fcc282..be8d75c04 100644 --- a/src/make_queue/forms/reservation.py +++ b/src/make_queue/forms/reservation.py @@ -5,6 +5,7 @@ from news.models import TimePlace from web.widgets import SemanticChoiceInput + from ..models.machine import Machine, MachineType diff --git a/src/make_queue/forms/reservation_rule.py b/src/make_queue/forms/reservation_rule.py index f419e813d..0cf224ea5 100644 --- a/src/make_queue/forms/reservation_rule.py +++ b/src/make_queue/forms/reservation_rule.py @@ -2,6 +2,7 @@ from django.utils.translation import gettext_lazy as _ from web.widgets import Direction, DirectionalCheckboxSelectMultiple, SemanticTimeInput + from ..models.machine import MachineType from ..models.reservation import ReservationRule 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..086ad9f4c 100644 --- a/src/make_queue/models/course.py +++ b/src/make_queue/models/course.py @@ -1,12 +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 users.models import User + from .fields import UsernameField diff --git a/src/make_queue/models/machine.py b/src/make_queue/models/machine.py index cdef4003d..cd9b906de 100644 --- a/src/make_queue/models/machine.py +++ b/src/make_queue/models/machine.py @@ -12,11 +12,12 @@ 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 diff --git a/src/make_queue/models/reservation.py b/src/make_queue/models/reservation.py index a3bf0feca..d70f01fbd 100644 --- a/src/make_queue/models/reservation.py +++ b/src/make_queue/models/reservation.py @@ -11,7 +11,6 @@ from django.utils.text import capfirst from django.utils.translation import gettext_lazy as _ - from news.models import TimePlace from users.models import User from util.locale_utils import ( @@ -20,7 +19,8 @@ timedelta_to_hours, ) from util.model_utils import ComparisonType, comparison_boilerplate -from web.modelfields import UnlimitedCharField, MultiSelectField +from web.modelfields import MultiSelectField, UnlimitedCharField + from .machine import Machine, MachineType diff --git a/src/make_queue/templatetags/reservation_extra.py b/src/make_queue/templatetags/reservation_extra.py index 216c3f9c3..c822fc018 100644 --- a/src/make_queue/templatetags/reservation_extra.py +++ b/src/make_queue/templatetags/reservation_extra.py @@ -10,6 +10,7 @@ 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 diff --git a/src/make_queue/tests/forms/test_course_forms.py b/src/make_queue/tests/forms/test_course_forms.py index 96d7081cf..b95b8a3fb 100644 --- a/src/make_queue/tests/forms/test_course_forms.py +++ b/src/make_queue/tests/forms/test_course_forms.py @@ -1,6 +1,7 @@ from django.test import Client, TestCase from users.models import User + from ...forms.course import Printer3DCourseForm from ...models.course import Printer3DCourse diff --git a/src/make_queue/tests/forms/test_machine_forms.py b/src/make_queue/tests/forms/test_machine_forms.py index 4f86ac344..1198429ee 100644 --- a/src/make_queue/tests/forms/test_machine_forms.py +++ b/src/make_queue/tests/forms/test_machine_forms.py @@ -5,6 +5,7 @@ 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 diff --git a/src/make_queue/tests/forms/test_reservation_forms.py b/src/make_queue/tests/forms/test_reservation_forms.py index 6c74ab6c9..a93e93be1 100644 --- a/src/make_queue/tests/forms/test_reservation_forms.py +++ b/src/make_queue/tests/forms/test_reservation_forms.py @@ -4,6 +4,7 @@ from django.utils import timezone from news.models import Event, TimePlace + from ...forms.reservation import ReservationForm from ...models.machine import Machine, MachineType diff --git a/src/make_queue/tests/models/test_course.py b/src/make_queue/tests/models/test_course.py index c6f4fa051..7fe45bed3 100644 --- a/src/make_queue/tests/models/test_course.py +++ b/src/make_queue/tests/models/test_course.py @@ -2,6 +2,7 @@ from django.utils import timezone from users.models import User + from ...models.course import Printer3DCourse diff --git a/src/make_queue/tests/models/test_machines.py b/src/make_queue/tests/models/test_machines.py index 3ab812526..73cff4281 100644 --- a/src/make_queue/tests/models/test_machines.py +++ b/src/make_queue/tests/models/test_machines.py @@ -5,6 +5,7 @@ from django.utils import timezone from users.models import User + from ...models.course import CoursePermission, Printer3DCourse from ...models.machine import Machine, MachineType from ...models.reservation import Quota, Reservation diff --git a/src/make_queue/tests/models/test_reservation.py b/src/make_queue/tests/models/test_reservation.py index caac0eb08..76988c39f 100644 --- a/src/make_queue/tests/models/test_reservation.py +++ b/src/make_queue/tests/models/test_reservation.py @@ -11,12 +11,12 @@ 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..f7dd0b986 100644 --- a/src/make_queue/tests/models/test_reservation_rule.py +++ b/src/make_queue/tests/models/test_reservation_rule.py @@ -7,7 +7,6 @@ from ...models.machine import MachineType from ...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..8818d9630 100644 --- a/src/make_queue/tests/templatetags/test_reservation_extra.py +++ b/src/make_queue/tests/templatetags/test_reservation_extra.py @@ -8,6 +8,7 @@ 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 diff --git a/src/make_queue/tests/test_urls.py b/src/make_queue/tests/test_urls.py index 91eccd491..acd9341a6 100644 --- a/src/make_queue/tests/test_urls.py +++ b/src/make_queue/tests/test_urls.py @@ -10,18 +10,18 @@ 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..d0361ab73 100644 --- a/src/make_queue/tests/views/test_api_reservation_views.py +++ b/src/make_queue/tests/views/test_api_reservation_views.py @@ -12,13 +12,13 @@ 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..a022d30c5 100644 --- a/src/make_queue/tests/views/test_machine_views.py +++ b/src/make_queue/tests/views/test_machine_views.py @@ -8,6 +8,7 @@ from django_hosts import reverse from users.models import User + from ...forms.machine import AddMachineForm, ChangeMachineForm from ...models.course import CoursePermission, Printer3DCourse from ...models.machine import Machine, MachineType diff --git a/src/make_queue/tests/views/test_quota_views.py b/src/make_queue/tests/views/test_quota_views.py index 27777e2e0..d721aa65f 100644 --- a/src/make_queue/tests/views/test_quota_views.py +++ b/src/make_queue/tests/views/test_quota_views.py @@ -4,6 +4,7 @@ from django_hosts import reverse from users.models import User + from ...models.machine import MachineType from ...models.reservation import Quota from ...views.quota import AdminQuotaPanelView diff --git a/src/make_queue/tests/views/test_reservation_views.py b/src/make_queue/tests/views/test_reservation_views.py index 50a387e50..cf9393011 100644 --- a/src/make_queue/tests/views/test_reservation_views.py +++ b/src/make_queue/tests/views/test_reservation_views.py @@ -14,12 +14,13 @@ 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 +from ..utility import post_request_with_user, request_with_user class ReservationCreateOrUpdateViewTestBase(TestCase, ABC): diff --git a/src/make_queue/urls.py b/src/make_queue/urls.py index ce2674077..a94c9dcda 100644 --- a/src/make_queue/urls.py +++ b/src/make_queue/urls.py @@ -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..206c51f1c 100644 --- a/src/make_queue/views/course.py +++ b/src/make_queue/views/course.py @@ -12,6 +12,7 @@ from django.views.generic import CreateView, DeleteView, ListView, UpdateView, View from util.view_utils import PreventGetRequestsMixin + from ..forms.course import Printer3DCourseForm from ..models.course import Printer3DCourse diff --git a/src/make_queue/views/machine.py b/src/make_queue/views/machine.py index 3365ff2b2..ebd157820 100644 --- a/src/make_queue/views/machine.py +++ b/src/make_queue/views/machine.py @@ -18,6 +18,7 @@ PreventGetRequestsMixin, QueryParameterFormMixin, ) + from ..forms.machine import AddMachineForm, ChangeMachineForm, MachineDetailQueryForm from ..forms.reservation import ReservationListQueryForm from ..models.machine import Machine, MachineType, MachineUsageRule diff --git a/src/make_queue/views/quota.py b/src/make_queue/views/quota.py index 18af4ebad..d155b2669 100644 --- a/src/make_queue/views/quota.py +++ b/src/make_queue/views/quota.py @@ -21,6 +21,7 @@ PreventGetRequestsMixin, QueryParameterFormMixin, ) + from ..forms.quota import AdminQuotaPanelQueryForm, QuotaForm from ..models.reservation import Quota diff --git a/src/make_queue/views/reservation.py b/src/make_queue/views/reservation.py index 6e5c1fd7c..d1d428681 100644 --- a/src/make_queue/views/reservation.py +++ b/src/make_queue/views/reservation.py @@ -15,7 +15,7 @@ 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 ( ReservationFindFreeSlotsForm, ReservationForm, @@ -27,6 +27,7 @@ calendar_url_reservation, can_change_reservation, ) +from .machine import MachineRelatedViewMixin # 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..c41012987 100644 --- a/src/make_queue/views/reservation_rule.py +++ b/src/make_queue/views/reservation_rule.py @@ -12,6 +12,7 @@ PreventGetRequestsMixin, insert_form_field_values, ) + from ..forms.reservation_rule import ReservationRuleForm from ..models.reservation import Quota, ReservationRule from ..views.machine import MachineTypeRelatedViewMixin diff --git a/src/makerspace/admin.py b/src/makerspace/admin.py index d2037f323..e186be24f 100644 --- a/src/makerspace/admin.py +++ b/src/makerspace/admin.py @@ -4,6 +4,7 @@ from util import html_utils from util.admin_utils import DefaultAdminWidgetsMixin, search_escaped_and_unescaped + from .models import Equipment diff --git a/src/makerspace/forms.py b/src/makerspace/forms.py index f8d1d3aaa..15a4cfe3e 100644 --- a/src/makerspace/forms.py +++ b/src/makerspace/forms.py @@ -1,6 +1,7 @@ from django import forms from web.widgets import SemanticFileInput + from .models import Equipment 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..c0e4b665a 100644 --- a/src/makerspace/tests/test_urls.py +++ b/src/makerspace/tests/test_urls.py @@ -2,12 +2,13 @@ from django_hosts import reverse 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 diff --git a/src/makerspace/urls.py b/src/makerspace/urls.py index 6d519c270..366d193e5 100644 --- a/src/makerspace/urls.py +++ b/src/makerspace/urls.py @@ -1,8 +1,8 @@ from django.urls import include, path from contentbox.views import ContentBoxDetailView -from . import views +from . 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..e93ddbcd0 100644 --- a/src/makerspace/views.py +++ b/src/makerspace/views.py @@ -14,6 +14,7 @@ from contentbox.views import ContentBoxDetailView from util.templatetags.string_tags import title_en from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin + from .forms import EquipmentForm from .models import Equipment diff --git a/src/news/admin.py b/src/news/admin.py index fe3d4d469..382e7998b 100644 --- a/src/news/admin.py +++ b/src/news/admin.py @@ -18,6 +18,7 @@ ) 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 diff --git a/src/news/api/views.py b/src/news/api/views.py index f3aed3872..695979e33 100644 --- a/src/news/api/views.py +++ b/src/news/api/views.py @@ -5,6 +5,7 @@ from django.views.generic.detail import SingleObjectMixin from util.view_utils import PreventGetRequestsMixin, UTF8JsonResponse + from ..forms import ToggleForm from ..models import Article, Event, TimePlace from ..views.event import TimePlaceRelatedViewMixin diff --git a/src/news/forms.py b/src/news/forms.py index fd063279f..cad4e858a 100644 --- a/src/news/forms.py +++ b/src/news/forms.py @@ -11,6 +11,7 @@ SemanticDateTimeInput, SemanticFileInput, ) + from .models import Article, Event, EventTicket, NewsBase, TimePlace 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..f6bf44de5 100644 --- a/src/news/templatetags/event_tags.py +++ b/src/news/templatetags/event_tags.py @@ -1,6 +1,7 @@ from django import template 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..456abceb9 100644 --- a/src/news/tests/forms/test_time_place_form.py +++ b/src/news/tests/forms/test_time_place_form.py @@ -3,7 +3,8 @@ from django.test import TestCase from django.utils import timezone -from util.test_utils import CleanUpTempFilesTestMixin, MOCK_JPG_FILE +from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin + from ...forms import TimePlaceForm from ...models import Event diff --git a/src/news/tests/models/test_models.py b/src/news/tests/models/test_models.py index 592508864..30a4f7131 100644 --- a/src/news/tests/models/test_models.py +++ b/src/news/tests/models/test_models.py @@ -11,6 +11,7 @@ assertRaisesIntegrityError_withRollback, set_without_duplicates, ) + from ...models import Article, Event, EventTicket, TimePlace 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..0009bb1de 100644 --- a/src/news/tests/views/test_article_views.py +++ b/src/news/tests/views/test_article_views.py @@ -7,7 +7,8 @@ from django_hosts import reverse from users.models import User -from util.test_utils import CleanUpTempFilesTestMixin, MOCK_JPG_FILE +from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin + from ...models import Article diff --git a/src/news/tests/views/test_event_ticket_views.py b/src/news/tests/views/test_event_ticket_views.py index 6eebeba4c..385ee5b62 100644 --- a/src/news/tests/views/test_event_ticket_views.py +++ b/src/news/tests/views/test_event_ticket_views.py @@ -12,8 +12,9 @@ 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 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..3c842ee81 100644 --- a/src/news/tests/views/test_event_time_place_views.py +++ b/src/news/tests/views/test_event_time_place_views.py @@ -7,7 +7,8 @@ from django_hosts import reverse from users.models import User -from util.test_utils import CleanUpTempFilesTestMixin, MOCK_JPG_FILE +from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin + from ...models import Event, EventTicket, TimePlace diff --git a/src/news/urls.py b/src/news/urls.py index 01f71693a..7fcada92a 100644 --- a/src/news/urls.py +++ b/src/news/urls.py @@ -5,7 +5,6 @@ from .ical import SingleTimePlaceFeed from .views import article as article_views, event as event_views - article_urlpatterns = [ path("", article_views.ArticleListView.as_view(), name="article_list"), path("/", article_views.ArticleDetailView.as_view(), name="article_detail"), diff --git a/src/news/views/article.py b/src/news/views/article.py index 270bac1c2..f9592ab8f 100644 --- a/src/news/views/article.py +++ b/src/news/views/article.py @@ -12,6 +12,7 @@ ) from util.view_utils import CustomFieldsetFormMixin, PreventGetRequestsMixin + from ..forms import ArticleForm, NewsBaseForm from ..models import Article, NewsBase diff --git a/src/news/views/event.py b/src/news/views/event.py index 037140ae3..c0a52fc42 100644 --- a/src/news/views/event.py +++ b/src/news/views/event.py @@ -37,7 +37,7 @@ QueryParameterFormMixin, insert_form_field_values, ) -from .article import NewsBaseFormMixin + from ..forms import ( EventForm, EventParticipantsSearchQueryForm, @@ -45,6 +45,7 @@ TimePlaceForm, ) from ..models import Event, EventQuerySet, EventTicket, TimePlace, User +from .article import NewsBaseFormMixin class EventListView(ListView): diff --git a/src/users/admin.py b/src/users/admin.py index 47f04a2cc..6ced17d5a 100644 --- a/src/users/admin.py +++ b/src/users/admin.py @@ -5,6 +5,7 @@ from django.utils.translation import gettext_lazy as _ from util.admin_utils import DefaultAdminWidgetsMixin, UserSearchFieldsMixin + from .models import User 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..e82cc6772 100644 --- a/src/users/tests/test_models.py +++ b/src/users/tests/test_models.py @@ -1,6 +1,7 @@ from django.test import TestCase from card.modelfields import CardNumber + from ..models import User diff --git a/src/users/tests/test_urls.py b/src/users/tests/test_urls.py index 33e59cbf3..1b36332cf 100644 --- a/src/users/tests/test_urls.py +++ b/src/users/tests/test_urls.py @@ -6,6 +6,7 @@ assert_requesting_paths_succeeds, generate_all_admin_urls_for_model_and_objs, ) + from ..models import User diff --git a/src/users/urls.py b/src/users/urls.py index 6657083e2..04d814136 100644 --- a/src/users/urls.py +++ b/src/users/urls.py @@ -2,7 +2,6 @@ from .api import views as api_views - # --- Admin API URL patterns (imported in `web/urls.py`) --- adminapipatterns = [ 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/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/test_utils.py b/src/util/test_utils.py index b5b92bfc7..a7a9f370c 100644 --- a/src/util/test_utils.py +++ b/src/util/test_utils.py @@ -18,8 +18,8 @@ from django.utils.dateparse import parse_time from users.models import User -from .url_utils import reverse_admin +from .url_utils import reverse_admin T = TypeVar("T") ModelT = TypeVar("ModelT", bound=models.Model) diff --git a/src/util/tests/test_locale_utils.py b/src/util/tests/test_locale_utils.py index 48c593a43..b57274cd5 100644 --- a/src/util/tests/test_locale_utils.py +++ b/src/util/tests/test_locale_utils.py @@ -5,6 +5,7 @@ from django.utils.dateparse import parse_datetime from make_queue.models.reservation import ReservationRule + from ..locale_utils import ( exact_weekday_to_day_name, timedelta_to_hours, diff --git a/src/util/tests/test_permission_tags.py b/src/util/tests/test_permission_tags.py index 038af3fd2..5316ef08c 100644 --- a/src/util/tests/test_permission_tags.py +++ b/src/util/tests/test_permission_tags.py @@ -2,6 +2,7 @@ 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 diff --git a/src/util/tests/test_test_utils.py b/src/util/tests/test_test_utils.py index 9b4831af4..a9c3d79f3 100644 --- a/src/util/tests/test_test_utils.py +++ b/src/util/tests/test_test_utils.py @@ -4,12 +4,13 @@ from django.test import TestCase from users.models import User -from . import test_test_utils_helper_funcs + from ..test_utils import ( generate_all_admin_urls_for_model_and_objs, mock_module_attrs, set_without_duplicates, ) +from . import test_test_utils_helper_funcs def original_func_monkey_patched(arg): 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/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/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/multilingual/formfields.py b/src/web/multilingual/formfields.py index c25d0af34..bc23ce3d9 100644 --- a/src/web/multilingual/formfields.py +++ b/src/web/multilingual/formfields.py @@ -7,8 +7,9 @@ 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 .data_structures import MultiLingualTextStructure class MultiLingualFormField(forms.MultiValueField): diff --git a/src/web/multilingual/widgets.py b/src/web/multilingual/widgets.py index e50f04571..4f480519a 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 .data_structures import MultiLingualTextStructure class MultiLingualTextEdit(forms.MultiWidget): diff --git a/src/web/settings.py b/src/web/settings.py index 4e86364e6..f890e1d39 100644 --- a/src/web/settings.py +++ b/src/web/settings.py @@ -12,8 +12,8 @@ import env from env import DatabaseSystem -from .static import serve_interpolated +from .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_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..a9028c147 100644 --- a/src/web/urls.py +++ b/src/web/urls.py @@ -28,8 +28,8 @@ permission_required_else_denied, ) from util.view_utils import RedirectViewWithStaticQuery -from . import views +from . 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() From bca0932232903e7ec6dd73171c13046700e190b5 Mon Sep 17 00:00:00 2001 From: Anders <6058745+ddabble@users.noreply.github.com> Date: Wed, 11 Feb 2026 09:03:56 +0100 Subject: [PATCH 2/2] Added the TID252 Ruff rule Makes it less of a hassle to remember when to do relative and when to do absolute imports, and makes it somewhat easier to read the code through e.g. GitHub. --- CONTRIBUTING.md | 6 ------ pyproject.toml | 9 ++++++--- src/announcements/admin.py | 3 +-- src/announcements/forms.py | 3 +-- .../templatetags/announcement_tags.py | 2 +- src/announcements/tests/test_urls.py | 3 +-- src/announcements/urls.py | 2 +- src/announcements/views.py | 5 ++--- src/card/formfields.py | 4 ++-- src/card/modelfields.py | 4 ++-- src/card/tests/test_modelfields.py | 2 +- src/card/utils.py | 3 +-- src/card/views.py | 2 +- src/card/widgets.py | 2 +- src/checkin/admin.py | 3 +-- src/checkin/api/views.py | 3 +-- src/checkin/tests/test_urls.py | 3 +-- src/checkin/urls.py | 2 +- src/checkin/views.py | 3 +-- src/contentbox/admin.py | 3 +-- src/contentbox/forms.py | 3 +-- src/contentbox/tests/test_urls.py | 5 ++--- src/contentbox/tests/test_views.py | 16 +++++++++------- src/contentbox/tests/urls/hosts.py | 3 +-- src/contentbox/tests/urls/urls_internal.py | 3 +-- src/contentbox/tests/urls/urls_main.py | 3 +-- src/contentbox/views.py | 5 ++--- src/dataporten/tests/test_views.py | 5 ++--- src/dataporten/views.py | 3 +-- src/docs/admin.py | 2 +- src/docs/converters.py | 4 ++-- src/docs/forms.py | 3 +-- src/docs/models.py | 3 +-- src/docs/tests/test_urls.py | 3 +-- src/docs/urls.py | 3 +-- src/docs/views.py | 15 +++++++-------- src/faq/admin.py | 3 +-- src/faq/forms.py | 3 +-- src/faq/urls.py | 2 +- src/faq/views.py | 5 ++--- src/groups/admin.py | 3 +-- src/groups/apps.py | 2 +- src/groups/forms.py | 3 +-- src/groups/signals.py | 2 +- src/groups/tests/test_admin.py | 5 ++--- src/groups/tests/test_models.py | 3 +-- src/groups/tests/test_urls.py | 3 +-- src/groups/urls.py | 2 +- src/groups/views.py | 5 ++--- src/internal/admin.py | 3 +-- src/internal/apps.py | 2 +- src/internal/formfields.py | 4 ++-- src/internal/forms.py | 3 +-- src/internal/modelfields.py | 6 +++--- src/internal/models.py | 7 +++---- src/internal/signals.py | 3 +-- src/internal/templatetags/member.py | 3 +-- src/internal/tests/test_urls.py | 5 ++--- src/internal/tests/test_util.py | 2 +- src/internal/tests/test_views.py | 5 ++--- src/internal/urls.py | 3 +-- src/internal/util.py | 2 +- src/internal/views.py | 9 ++++----- src/make_queue/admin.py | 7 +++---- src/make_queue/api/forms.py | 2 +- src/make_queue/api/views.py | 18 ++++++++++-------- src/make_queue/forms/course.py | 3 +-- src/make_queue/forms/machine.py | 3 +-- src/make_queue/forms/quota.py | 7 +++---- src/make_queue/forms/reservation.py | 3 +-- src/make_queue/forms/reservation_rule.py | 5 ++--- src/make_queue/models/course.py | 3 +-- src/make_queue/models/machine.py | 3 +-- src/make_queue/models/reservation.py | 3 +-- .../templatetags/reservation_extra.py | 5 ++--- .../tests/forms/test_course_forms.py | 5 ++--- .../tests/forms/test_machine_forms.py | 5 ++--- .../tests/forms/test_reservation_forms.py | 5 ++--- src/make_queue/tests/models/test_course.py | 3 +-- src/make_queue/tests/models/test_machines.py | 7 +++---- .../tests/models/test_reservation.py | 9 ++++----- .../tests/models/test_reservation_rule.py | 6 +++--- .../templatetags/test_reservation_extra.py | 13 ++++++------- src/make_queue/tests/test_urls.py | 9 ++++----- .../tests/views/test_api_reservation_views.py | 11 +++++------ .../tests/views/test_machine_views.py | 7 +++---- .../tests/views/test_quota_views.py | 7 +++---- .../tests/views/test_reservation_views.py | 13 ++++++------- src/make_queue/urls.py | 4 ++-- src/make_queue/views/course.py | 5 ++--- src/make_queue/views/machine.py | 15 +++++++++------ src/make_queue/views/quota.py | 5 ++--- src/make_queue/views/reservation.py | 19 +++++++++---------- src/make_queue/views/reservation_rule.py | 7 +++---- src/makerspace/admin.py | 3 +-- src/makerspace/forms.py | 3 +-- src/makerspace/tests/test_urls.py | 3 +-- src/makerspace/urls.py | 3 +-- src/makerspace/views.py | 5 ++--- src/news/admin.py | 5 ++--- src/news/api/views.py | 7 +++---- src/news/forms.py | 3 +-- src/news/ical.py | 2 +- src/news/templatetags/event_tags.py | 3 +-- src/news/tests/forms/test_time_place_form.py | 5 ++--- src/news/tests/models/test_models.py | 3 +-- src/news/tests/views/test_article_views.py | 3 +-- .../tests/views/test_event_ticket_views.py | 3 +-- .../views/test_event_time_place_views.py | 3 +-- src/news/urls.py | 6 +++--- src/news/views/article.py | 5 ++--- src/news/views/event.py | 17 ++++++++--------- src/users/admin.py | 3 +-- src/users/tests/test_models.py | 3 +-- src/users/tests/test_urls.py | 3 +-- src/users/urls.py | 2 +- src/util/apps.py | 2 +- src/util/modelfields.py | 2 +- src/util/signals.py | 2 +- src/util/test_utils.py | 3 +-- src/util/tests/test_html_tags.py | 2 +- src/util/tests/test_html_utils.py | 2 +- src/util/tests/test_locale_utils.py | 3 +-- src/util/tests/test_permission_tags.py | 8 +++++--- .../tests/test_semantic_ui_calendar_extra.py | 4 ++-- src/util/tests/test_test_utils.py | 5 ++--- src/util/tests/test_url_utils.py | 2 +- src/util/view_utils.py | 2 +- src/web/apps.py | 2 +- .../management/commands/compilemessages.py | 2 +- src/web/multilingual/admin.py | 4 ++-- src/web/multilingual/formfields.py | 5 ++--- src/web/multilingual/modelfields.py | 6 +++--- src/web/multilingual/widgets.py | 4 ++-- src/web/settings.py | 3 +-- src/web/tests/test_multilingual.py | 6 +++--- src/web/urls.py | 3 +-- 137 files changed, 270 insertions(+), 356 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4b87c7e6b..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,11 +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 - -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 03e72c0de..b50d6c73e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,14 +68,17 @@ show-fixes = true format.docstring-code-format = true lint.select = [ - "E", # flake8/pycodestyle (Error) - "F", # flake8/Pyflakes - "I", # isort + "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. diff --git a/src/announcements/admin.py b/src/announcements/admin.py index b084707c0..257d49fa3 100644 --- a/src/announcements/admin.py +++ b/src/announcements/admin.py @@ -2,14 +2,13 @@ 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): list_display = ( diff --git a/src/announcements/forms.py b/src/announcements/forms.py index c760ded0a..e415c6ab3 100644 --- a/src/announcements/forms.py +++ b/src/announcements/forms.py @@ -1,9 +1,8 @@ from django.forms import ModelForm +from announcements.models import Announcement from web.widgets import SemanticChoiceInput, SemanticDateTimeInput -from .models import Announcement - class AnnouncementForm(ModelForm): class Meta: 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 3cb50b3cc..c607cf91a 100644 --- a/src/announcements/tests/test_urls.py +++ b/src/announcements/tests/test_urls.py @@ -2,14 +2,13 @@ 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): def setUp(self): diff --git a/src/announcements/urls.py b/src/announcements/urls.py index ffbe29cc6..b49a07a58 100644 --- a/src/announcements/urls.py +++ b/src/announcements/urls.py @@ -1,6 +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 1a27b796d..e9635c85a 100644 --- a/src/announcements/views.py +++ b/src/announcements/views.py @@ -5,11 +5,10 @@ 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): permission_required = ("announcements.change_announcement",) 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 1e84fc6ba..c45306c35 100644 --- a/src/card/utils.py +++ b/src/card/utils.py @@ -1,10 +1,9 @@ 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/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 cef8f1b44..0373a1563 100644 --- a/src/checkin/admin.py +++ b/src/checkin/admin.py @@ -1,9 +1,8 @@ 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): list_display = ("__str__",) diff --git a/src/checkin/api/views.py b/src/checkin/api/views.py index 2a307ac75..54513fe12 100644 --- a/src/checkin/api/views.py +++ b/src/checkin/api/views.py @@ -7,10 +7,9 @@ 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( PermissionRequiredMixin, PreventGetRequestsMixin, TemplateView diff --git a/src/checkin/tests/test_urls.py b/src/checkin/tests/test_urls.py index 281eb394d..74512c7b4 100644 --- a/src/checkin/tests/test_urls.py +++ b/src/checkin/tests/test_urls.py @@ -1,6 +1,7 @@ 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, @@ -8,8 +9,6 @@ generate_all_admin_urls_for_model_and_objs, ) -from ..models import Profile, Skill, SuggestSkill, UserSkill - class UrlTests(TestCase): def setUp(self): diff --git a/src/checkin/urls.py b/src/checkin/urls.py index e5f7680d0..a5b020463 100644 --- a/src/checkin/urls.py +++ b/src/checkin/urls.py @@ -1,7 +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 374f23d13..e8c7abff3 100644 --- a/src/checkin/views.py +++ b/src/checkin/views.py @@ -13,11 +13,10 @@ from django.views.generic import TemplateView from card.views import RFIDView +from checkin.models import Profile, RegisterProfile, Skill, SuggestSkill, UserSkill from make_queue.models.course import CoursePermission from util.view_utils import PreventGetRequestsMixin -from .models import Profile, RegisterProfile, Skill, SuggestSkill, UserSkill - class AdminCheckInView(RFIDView): def card_number_valid(self, card_number): diff --git a/src/contentbox/admin.py b/src/contentbox/admin.py index 2725ec585..6334322fc 100644 --- a/src/contentbox/admin.py +++ b/src/contentbox/admin.py @@ -2,11 +2,10 @@ 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): list_display = ( diff --git a/src/contentbox/forms.py b/src/contentbox/forms.py index 8b9997f10..d6c3ba66d 100644 --- a/src/contentbox/forms.py +++ b/src/contentbox/forms.py @@ -1,13 +1,12 @@ 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): class Meta: diff --git a/src/contentbox/tests/test_urls.py b/src/contentbox/tests/test_urls.py index b3972a6ec..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 @@ -26,9 +28,6 @@ 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): def __call__(self, viewname: str, *args) -> str: ... diff --git a/src/contentbox/tests/test_views.py b/src/contentbox/tests/test_views.py index 3e751afbb..e90b4b944 100644 --- a/src/contentbox/tests/test_views.py +++ b/src/contentbox/tests/test_views.py @@ -8,6 +8,15 @@ 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 @@ -15,13 +24,6 @@ from web.multilingual.widgets import MultiLingualTextEdit from web.tests.test_urls import ADMIN_CLIENT_DEFAULTS -from ..forms import ContentBoxForm, EditSourceContentBoxForm -from ..models import ContentBox -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 - @override_settings( ROOT_HOSTCONF=hosts.__name__, diff --git a/src/contentbox/tests/urls/hosts.py b/src/contentbox/tests/urls/hosts.py index 50a904e04..fbb5d2e6c 100644 --- a/src/contentbox/tests/urls/hosts.py +++ b/src/contentbox/tests/urls/hosts.py @@ -14,10 +14,9 @@ ) 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"), host(r"test-main", urls_main.__name__, name="test_main"), diff --git a/src/contentbox/tests/urls/urls_internal.py b/src/contentbox/tests/urls/urls_internal.py index 27e40bc57..11282749f 100644 --- a/src/contentbox/tests/urls/urls_internal.py +++ b/src/contentbox/tests/urls/urls_internal.py @@ -1,10 +1,9 @@ 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 a72b3eb0a..6fcaeda4e 100644 --- a/src/contentbox/tests/urls/urls_main.py +++ b/src/contentbox/tests/urls/urls_main.py @@ -1,9 +1,8 @@ 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 5fbb282f2..7c8b1c39d 100644 --- a/src/contentbox/views.py +++ b/src/contentbox/views.py @@ -10,12 +10,11 @@ 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): model = ContentBox diff --git a/src/dataporten/tests/test_views.py b/src/dataporten/tests/test_views.py index 2054fb825..097d8d7af 100644 --- a/src/dataporten/tests/test_views.py +++ b/src/dataporten/tests/test_views.py @@ -6,12 +6,11 @@ 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): return "mock response" diff --git a/src/dataporten/views.py b/src/dataporten/views.py index e44d03a32..d6f25f005 100644 --- a/src/dataporten/views.py +++ b/src/dataporten/views.py @@ -6,11 +6,10 @@ 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) complete = social_views.complete diff --git a/src/docs/admin.py b/src/docs/admin.py index 3c44bd0b3..34702c56a 100644 --- a/src/docs/admin.py +++ b/src/docs/admin.py @@ -1,6 +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 b41104e28..57f9c87e5 100644 --- a/src/docs/forms.py +++ b/src/docs/forms.py @@ -1,10 +1,9 @@ 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): class Meta: diff --git a/src/docs/models.py b/src/docs/models.py index 52d6c96e0..1c3c98781 100644 --- a/src/docs/models.py +++ b/src/docs/models.py @@ -3,10 +3,9 @@ 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 819d22f3f..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, @@ -12,8 +13,6 @@ ) 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 019480b47..ec9a28af1 100644 --- a/src/docs/urls.py +++ b/src/docs/urls.py @@ -5,6 +5,7 @@ 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, @@ -12,8 +13,6 @@ permission_required_else_denied, ) -from . import converters, views - register_converter(converters.SpecificPageByTitle, "PageTitle") urlpatterns = [ diff --git a/src/docs/views.py b/src/docs/views.py index e1eb8ff88..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, @@ -23,14 +30,6 @@ insert_form_field_values, ) -from .forms import ( - AddPageForm, - ChangePageVersionForm, - DocumentationPageSearchQueryForm, - PageContentForm, -) -from .models import MAIN_PAGE_TITLE, Content, Page - class DocumentationPageRelatedViewMixin: """ diff --git a/src/faq/admin.py b/src/faq/admin.py index f10b6446e..f8dd70a46 100644 --- a/src/faq/admin.py +++ b/src/faq/admin.py @@ -2,6 +2,7 @@ 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, @@ -9,8 +10,6 @@ search_escaped_and_unescaped, ) -from .models import Category, Question - class QuestionAdmin(DefaultAdminWidgetsMixin, SimpleHistoryAdmin): list_display = ("title", "get_categories", "last_modified") diff --git a/src/faq/forms.py b/src/faq/forms.py index f6f0346f7..d09b35c5a 100644 --- a/src/faq/forms.py +++ b/src/faq/forms.py @@ -1,10 +1,9 @@ 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): class Meta: diff --git a/src/faq/urls.py b/src/faq/urls.py index 56a40eb3f..081eb9009 100644 --- a/src/faq/urls.py +++ b/src/faq/urls.py @@ -1,6 +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 eff8fd5c4..67507b059 100644 --- a/src/faq/views.py +++ b/src/faq/views.py @@ -11,12 +11,11 @@ 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): queryset = ( diff --git a/src/groups/admin.py b/src/groups/admin.py index 1f6ce15e1..8956099b3 100644 --- a/src/groups/admin.py +++ b/src/groups/admin.py @@ -1,10 +1,9 @@ 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): list_display = ("name", "last_modified") 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 03f79a34e..d74f56c53 100644 --- a/src/groups/forms.py +++ b/src/groups/forms.py @@ -1,9 +1,8 @@ from django import forms +from groups.models import Committee from web.widgets import SemanticFileInput -from .models import Committee - class CommitteeForm(forms.ModelForm): class Meta: 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 fb4373ad2..9cb762b3b 100644 --- a/src/groups/tests/test_admin.py +++ b/src/groups/tests/test_admin.py @@ -4,14 +4,13 @@ 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): def setUp(self): diff --git a/src/groups/tests/test_models.py b/src/groups/tests/test_models.py index d5ef9bbe0..c922798fd 100644 --- a/src/groups/tests/test_models.py +++ b/src/groups/tests/test_models.py @@ -2,12 +2,11 @@ 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): def setUp(self): diff --git a/src/groups/tests/test_urls.py b/src/groups/tests/test_urls.py index a21d37bad..d1a7b43af 100644 --- a/src/groups/tests/test_urls.py +++ b/src/groups/tests/test_urls.py @@ -2,6 +2,7 @@ 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, @@ -10,8 +11,6 @@ generate_all_admin_urls_for_model_and_objs, ) -from ..models import Committee, InheritanceGroup - class UrlTests(CleanUpTempFilesTestMixin, TestCase): def setUp(self): diff --git a/src/groups/urls.py b/src/groups/urls.py index fa87f316f..f2571ecde 100644 --- a/src/groups/urls.py +++ b/src/groups/urls.py @@ -1,6 +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 bc047d886..5e3e6f094 100644 --- a/src/groups/views.py +++ b/src/groups/views.py @@ -3,11 +3,10 @@ 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): model = Committee diff --git a/src/internal/admin.py b/src/internal/admin.py index 43dcd7402..7a6a3ead5 100644 --- a/src/internal/admin.py +++ b/src/internal/admin.py @@ -3,6 +3,7 @@ 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, @@ -10,8 +11,6 @@ search_escaped_and_unescaped, ) -from .models import Member, Quote, Secret, SystemAccess - class MemberAdmin(DefaultAdminWidgetsMixin, SimpleHistoryAdmin): list_display = ("get_name", "last_modified") 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 39335897a..8fc92c35d 100644 --- a/src/internal/forms.py +++ b/src/internal/forms.py @@ -4,6 +4,7 @@ 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, @@ -11,8 +12,6 @@ SemanticSearchableChoiceInput, ) -from .models import Member, Quote, Secret, SystemAccess - class AddMemberForm(forms.ModelForm): class Meta: 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 48a81a224..777dcf82a 100644 --- a/src/internal/models.py +++ b/src/internal/models.py @@ -13,15 +13,14 @@ 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): user = models.OneToOneField( diff --git a/src/internal/signals.py b/src/internal/signals.py index 6f6ab4b38..75a8d4d72 100644 --- a/src/internal/signals.py +++ b/src/internal/signals.py @@ -1,8 +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 af1bf86a7..1e83a2a0e 100644 --- a/src/internal/templatetags/member.py +++ b/src/internal/templatetags/member.py @@ -2,10 +2,9 @@ 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 7f6425652..26664e34b 100644 --- a/src/internal/tests/test_urls.py +++ b/src/internal/tests/test_urls.py @@ -4,6 +4,8 @@ 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, @@ -13,9 +15,6 @@ ) 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 d555677c2..67b78ce72 100644 --- a/src/internal/tests/test_views.py +++ b/src/internal/tests/test_views.py @@ -10,15 +10,14 @@ 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 ..models import Secret -from .test_urls import INTERNAL_CLIENT_DEFAULTS - class InternalContentBoxTests(TestCase): def setUp(self): diff --git a/src/internal/urls.py b/src/internal/urls.py index e0f9de40b..0843ff7a2 100644 --- a/src/internal/urls.py +++ b/src/internal/urls.py @@ -5,6 +5,7 @@ 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, @@ -12,8 +13,6 @@ permission_required_else_denied, ) -from . import views - urlpatterns = [ path( "robots.txt", 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 2607c844c..688f619f4 100644 --- a/src/internal/views.py +++ b/src/internal/views.py @@ -12,10 +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, @@ -26,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 8e9d4138a..7c65d2029 100644 --- a/src/make_queue/admin.py +++ b/src/make_queue/admin.py @@ -4,6 +4,9 @@ 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, @@ -13,10 +16,6 @@ ) 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): list_display = ( 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 0722a81f8..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 ( @@ -13,14 +23,6 @@ UTF8JsonResponse, ) -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 -from .forms import APIMachineDataQueryForm, APIReservationListQueryForm - class APIMachineDataView( LoginRequiredMixin, MachineRelatedViewMixin, QueryParameterFormMixin, TemplateView diff --git a/src/make_queue/forms/course.py b/src/make_queue/forms/course.py index 3e79be374..be01f56c5 100644 --- a/src/make_queue/forms/course.py +++ b/src/make_queue/forms/course.py @@ -4,6 +4,7 @@ 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, @@ -11,8 +12,6 @@ SemanticSearchableChoiceInput, ) -from ..models.course import CoursePermission, Printer3DCourse - class Printer3DCourseForm(forms.ModelForm): card_number = CardNumberField(required=False) diff --git a/src/make_queue/forms/machine.py b/src/make_queue/forms/machine.py index b74e779b1..45d768c67 100644 --- a/src/make_queue/forms/machine.py +++ b/src/make_queue/forms/machine.py @@ -7,12 +7,11 @@ 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): machine_type = forms.ModelChoiceField( diff --git a/src/make_queue/forms/quota.py b/src/make_queue/forms/quota.py index 1f4beee83..3a35bbf89 100644 --- a/src/make_queue/forms/quota.py +++ b/src/make_queue/forms/quota.py @@ -4,13 +4,12 @@ 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): user = UserModelChoiceField( diff --git a/src/make_queue/forms/reservation.py b/src/make_queue/forms/reservation.py index be8d75c04..66713a2ce 100644 --- a/src/make_queue/forms/reservation.py +++ b/src/make_queue/forms/reservation.py @@ -3,11 +3,10 @@ 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): """Form for creating or changing a reservation.""" diff --git a/src/make_queue/forms/reservation_rule.py b/src/make_queue/forms/reservation_rule.py index 0cf224ea5..0fb68a2a5 100644 --- a/src/make_queue/forms/reservation_rule.py +++ b/src/make_queue/forms/reservation_rule.py @@ -1,11 +1,10 @@ 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): class Meta: diff --git a/src/make_queue/models/course.py b/src/make_queue/models/course.py index 086ad9f4c..4354dd6e5 100644 --- a/src/make_queue/models/course.py +++ b/src/make_queue/models/course.py @@ -6,10 +6,9 @@ from django.utils.translation import gettext_lazy as _ 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): class DefaultPerms(models.TextChoices): diff --git a/src/make_queue/models/machine.py b/src/make_queue/models/machine.py index cd9b906de..0c81f6f3e 100644 --- a/src/make_queue/models/machine.py +++ b/src/make_queue/models/machine.py @@ -10,6 +10,7 @@ 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 UnlimitedCharField, URLTextField @@ -18,8 +19,6 @@ MultiLingualTextField, ) -from .course import CoursePermission, Printer3DCourse - class MachineTypeQuerySet(models.QuerySet): def default_order_by(self) -> "MachineTypeQuerySet[MachineType]": diff --git a/src/make_queue/models/reservation.py b/src/make_queue/models/reservation.py index d70f01fbd..234e87040 100644 --- a/src/make_queue/models/reservation.py +++ b/src/make_queue/models/reservation.py @@ -11,6 +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 ( @@ -21,8 +22,6 @@ from util.model_utils import ComparisonType, comparison_boilerplate from web.modelfields import MultiSelectField, UnlimitedCharField -from .machine import Machine, MachineType - class Quota(models.Model): all = models.BooleanField(default=False, verbose_name=_("all users")) diff --git a/src/make_queue/templatetags/reservation_extra.py b/src/make_queue/templatetags/reservation_extra.py index c822fc018..b43189d28 100644 --- a/src/make_queue/templatetags/reservation_extra.py +++ b/src/make_queue/templatetags/reservation_extra.py @@ -8,12 +8,11 @@ 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 b95b8a3fb..1d5caf6e5 100644 --- a/src/make_queue/tests/forms/test_course_forms.py +++ b/src/make_queue/tests/forms/test_course_forms.py @@ -1,10 +1,9 @@ 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): def setUp(self): diff --git a/src/make_queue/tests/forms/test_machine_forms.py b/src/make_queue/tests/forms/test_machine_forms.py index 1198429ee..4cb689b49 100644 --- a/src/make_queue/tests/forms/test_machine_forms.py +++ b/src/make_queue/tests/forms/test_machine_forms.py @@ -3,12 +3,11 @@ 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): def setUp(self): diff --git a/src/make_queue/tests/forms/test_reservation_forms.py b/src/make_queue/tests/forms/test_reservation_forms.py index a93e93be1..3b2eddfef 100644 --- a/src/make_queue/tests/forms/test_reservation_forms.py +++ b/src/make_queue/tests/forms/test_reservation_forms.py @@ -3,11 +3,10 @@ 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): def setUp(self): diff --git a/src/make_queue/tests/models/test_course.py b/src/make_queue/tests/models/test_course.py index 7fe45bed3..ec8a7fcb9 100644 --- a/src/make_queue/tests/models/test_course.py +++ b/src/make_queue/tests/models/test_course.py @@ -1,10 +1,9 @@ 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): def setUp(self): diff --git a/src/make_queue/tests/models/test_machines.py b/src/make_queue/tests/models/test_machines.py index 73cff4281..8984d9d3b 100644 --- a/src/make_queue/tests/models/test_machines.py +++ b/src/make_queue/tests/models/test_machines.py @@ -4,12 +4,11 @@ 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): def test_status(self): diff --git a/src/make_queue/tests/models/test_reservation.py b/src/make_queue/tests/models/test_reservation.py index 76988c39f..fa3f4f17c 100644 --- a/src/make_queue/tests/models/test_reservation.py +++ b/src/make_queue/tests/models/test_reservation.py @@ -8,15 +8,14 @@ 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 f7dd0b986..6820ddcb9 100644 --- a/src/make_queue/tests/models/test_reservation_rule.py +++ b/src/make_queue/tests/models/test_reservation_rule.py @@ -3,9 +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 8818d9630..b41a1c3c7 100644 --- a/src/make_queue/tests/templatetags/test_reservation_extra.py +++ b/src/make_queue/tests/templatetags/test_reservation_extra.py @@ -6,17 +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 acd9341a6..b7a4b21d6 100644 --- a/src/make_queue/tests/test_urls.py +++ b/src/make_queue/tests/test_urls.py @@ -7,6 +7,10 @@ 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 ( @@ -17,11 +21,6 @@ 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 d0361ab73..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,16 +9,15 @@ 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 a022d30c5..6094a0a09 100644 --- a/src/make_queue/tests/views/test_machine_views.py +++ b/src/make_queue/tests/views/test_machine_views.py @@ -7,12 +7,11 @@ 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): def setUp(self): diff --git a/src/make_queue/tests/views/test_quota_views.py b/src/make_queue/tests/views/test_quota_views.py index d721aa65f..7b05198aa 100644 --- a/src/make_queue/tests/views/test_quota_views.py +++ b/src/make_queue/tests/views/test_quota_views.py @@ -3,12 +3,11 @@ 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): def test_get_user_quota(self): diff --git a/src/make_queue/tests/views/test_reservation_views.py b/src/make_queue/tests/views/test_reservation_views.py index cf9393011..2a6e10d38 100644 --- a/src/make_queue/tests/views/test_reservation_views.py +++ b/src/make_queue/tests/views/test_reservation_views.py @@ -10,18 +10,17 @@ 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 ...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 -from ..utility import post_request_with_user, request_with_user - class ReservationCreateOrUpdateViewTestBase(TestCase, ABC): def setUp(self): diff --git a/src/make_queue/urls.py b/src/make_queue/urls.py index a94c9dcda..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, diff --git a/src/make_queue/views/course.py b/src/make_queue/views/course.py index 206c51f1c..04b2fe42a 100644 --- a/src/make_queue/views/course.py +++ b/src/make_queue/views/course.py @@ -11,11 +11,10 @@ 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): permission_required = ( diff --git a/src/make_queue/views/machine.py b/src/make_queue/views/machine.py index ebd157820..2a4fd4929 100644 --- a/src/make_queue/views/machine.py +++ b/src/make_queue/views/machine.py @@ -12,6 +12,15 @@ 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, @@ -19,12 +28,6 @@ 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 class MachineTypeRelatedViewMixin: diff --git a/src/make_queue/views/quota.py b/src/make_queue/views/quota.py index d155b2669..e9dc798fc 100644 --- a/src/make_queue/views/quota.py +++ b/src/make_queue/views/quota.py @@ -15,6 +15,8 @@ ) 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, @@ -22,9 +24,6 @@ QueryParameterFormMixin, ) -from ..forms.quota import AdminQuotaPanelQueryForm, QuotaForm -from ..models.reservation import Quota - class AdminQuotaPanelView( PermissionRequiredMixin, QueryParameterFormMixin, TemplateView diff --git a/src/make_queue/views/reservation.py b/src/make_queue/views/reservation.py index d1d428681..b05cba4d1 100644 --- a/src/make_queue/views/reservation.py +++ b/src/make_queue/views/reservation.py @@ -11,23 +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 ..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 .machine import MachineRelatedViewMixin +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 c41012987..5491bb21d 100644 --- a/src/make_queue/views/reservation_rule.py +++ b/src/make_queue/views/reservation_rule.py @@ -6,6 +6,9 @@ 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, @@ -13,10 +16,6 @@ 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): model = ReservationRule diff --git a/src/makerspace/admin.py b/src/makerspace/admin.py index e186be24f..7046e3be0 100644 --- a/src/makerspace/admin.py +++ b/src/makerspace/admin.py @@ -2,11 +2,10 @@ 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): list_display = ("title", "get_image", "priority", "last_modified") diff --git a/src/makerspace/forms.py b/src/makerspace/forms.py index 15a4cfe3e..2fd112c15 100644 --- a/src/makerspace/forms.py +++ b/src/makerspace/forms.py @@ -1,9 +1,8 @@ from django import forms +from makerspace.models import Equipment from web.widgets import SemanticFileInput -from .models import Equipment - class EquipmentForm(forms.ModelForm): class Meta: diff --git a/src/makerspace/tests/test_urls.py b/src/makerspace/tests/test_urls.py index c0e4b665a..d433a8683 100644 --- a/src/makerspace/tests/test_urls.py +++ b/src/makerspace/tests/test_urls.py @@ -1,6 +1,7 @@ from django.test import TestCase from django_hosts import reverse +from makerspace.models import Equipment from util.test_utils import ( MOCK_JPG_FILE, CleanUpTempFilesTestMixin, @@ -9,8 +10,6 @@ generate_all_admin_urls_for_model_and_objs, ) -from ..models import Equipment - class UrlTests(CleanUpTempFilesTestMixin, TestCase): def setUp(self): diff --git a/src/makerspace/urls.py b/src/makerspace/urls.py index 366d193e5..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 e93ddbcd0..27288da7e 100644 --- a/src/makerspace/views.py +++ b/src/makerspace/views.py @@ -12,12 +12,11 @@ ) 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): template_name = "makerspace/makerspace.html" diff --git a/src/news/admin.py b/src/news/admin.py index 382e7998b..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, @@ -19,9 +21,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): form_base: NewsBaseForm diff --git a/src/news/api/views.py b/src/news/api/views.py index 695979e33..84aa77b6a 100644 --- a/src/news/api/views.py +++ b/src/news/api/views.py @@ -4,12 +4,11 @@ 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( PreventGetRequestsMixin, SingleObjectMixin, FormView, ABC diff --git a/src/news/forms.py b/src/news/forms.py index cad4e858a..c20e7e1ad 100644 --- a/src/news/forms.py +++ b/src/news/forms.py @@ -5,6 +5,7 @@ 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, @@ -12,8 +13,6 @@ SemanticFileInput, ) -from .models import Article, Event, EventTicket, NewsBase, TimePlace - class TimePlaceForm(forms.ModelForm): class Meta: 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/templatetags/event_tags.py b/src/news/templatetags/event_tags.py index f6bf44de5..efdc027bd 100644 --- a/src/news/templatetags/event_tags.py +++ b/src/news/templatetags/event_tags.py @@ -1,9 +1,8 @@ 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 456abceb9..d69d63a34 100644 --- a/src/news/tests/forms/test_time_place_form.py +++ b/src/news/tests/forms/test_time_place_form.py @@ -3,11 +3,10 @@ from django.test import TestCase from django.utils import timezone +from news.forms import TimePlaceForm +from news.models import Event from util.test_utils import MOCK_JPG_FILE, CleanUpTempFilesTestMixin -from ...forms import TimePlaceForm -from ...models import Event - class FormTestCase(CleanUpTempFilesTestMixin, TestCase): def setUp(self): diff --git a/src/news/tests/models/test_models.py b/src/news/tests/models/test_models.py index 30a4f7131..77571bc53 100644 --- a/src/news/tests/models/test_models.py +++ b/src/news/tests/models/test_models.py @@ -5,6 +5,7 @@ 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 ( @@ -12,8 +13,6 @@ set_without_duplicates, ) -from ...models import Article, Event, EventTicket, TimePlace - class ArticleEventAndTimePlaceTests(TestCase): @staticmethod diff --git a/src/news/tests/views/test_article_views.py b/src/news/tests/views/test_article_views.py index 0009bb1de..c3f8cd397 100644 --- a/src/news/tests/views/test_article_views.py +++ b/src/news/tests/views/test_article_views.py @@ -6,11 +6,10 @@ 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 MOCK_JPG_FILE, CleanUpTempFilesTestMixin -from ...models import Article - class ArticleViewTests(CleanUpTempFilesTestMixin, TestCase): def setUp(self): diff --git a/src/news/tests/views/test_event_ticket_views.py b/src/news/tests/views/test_event_ticket_views.py index 385ee5b62..3e5f3c0cc 100644 --- a/src/news/tests/views/test_event_ticket_views.py +++ b/src/news/tests/views/test_event_ticket_views.py @@ -10,13 +10,12 @@ 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 MOCK_JPG_FILE, CleanUpTempFilesTestMixin from web.multilingual.data_structures import MultiLingualTextStructure -from ...models import Event, EventTicket, TimePlace - class TestEventTicketViews(CleanUpTempFilesTestMixin, TestCase): def setUp(self): 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 3c842ee81..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,11 +6,10 @@ 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 MOCK_JPG_FILE, CleanUpTempFilesTestMixin -from ...models import Event, EventTicket, TimePlace - class ViewTestCase(CleanUpTempFilesTestMixin, TestCase): def setUp(self): diff --git a/src/news/urls.py b/src/news/urls.py index 7fcada92a..cedae07d3 100644 --- a/src/news/urls.py +++ b/src/news/urls.py @@ -1,9 +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 f9592ab8f..f8f2f4802 100644 --- a/src/news/views/article.py +++ b/src/news/views/article.py @@ -11,11 +11,10 @@ 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): template_name = "news/article/article_list.html" diff --git a/src/news/views/event.py b/src/news/views/event.py index c0a52fc42..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 ( @@ -38,15 +46,6 @@ insert_form_field_values, ) -from ..forms import ( - EventForm, - EventParticipantsSearchQueryForm, - EventTicketForm, - TimePlaceForm, -) -from ..models import Event, EventQuerySet, EventTicket, TimePlace, User -from .article import NewsBaseFormMixin - class EventListView(ListView): template_name = "news/event/event_list.html" diff --git a/src/users/admin.py b/src/users/admin.py index 6ced17d5a..df47ab31a 100644 --- a/src/users/admin.py +++ b/src/users/admin.py @@ -4,10 +4,9 @@ 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): list_display = ( diff --git a/src/users/tests/test_models.py b/src/users/tests/test_models.py index e82cc6772..7f8f2a76c 100644 --- a/src/users/tests/test_models.py +++ b/src/users/tests/test_models.py @@ -1,8 +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 1b36332cf..71f866966 100644 --- a/src/users/tests/test_urls.py +++ b/src/users/tests/test_urls.py @@ -1,14 +1,13 @@ 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): def setUp(self): diff --git a/src/users/urls.py b/src/users/urls.py index 04d814136..1483c887c 100644 --- a/src/users/urls.py +++ b/src/users/urls.py @@ -1,6 +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/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/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 a7a9f370c..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 b57274cd5..c1310c050 100644 --- a/src/util/tests/test_locale_utils.py +++ b/src/util/tests/test_locale_utils.py @@ -5,8 +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 5316ef08c..12d6b49e5 100644 --- a/src/util/tests/test_permission_tags.py +++ b/src/util/tests/test_permission_tags.py @@ -2,9 +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 a9c3d79f3..971156c50 100644 --- a/src/util/tests/test_test_utils.py +++ b/src/util/tests/test_test_utils.py @@ -4,13 +4,12 @@ from django.test import TestCase from users.models import User - -from ..test_utils import ( +from util.test_utils import ( generate_all_admin_urls_for_model_and_objs, mock_module_attrs, set_without_duplicates, ) -from . import test_test_utils_helper_funcs +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/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/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/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 bc23ce3d9..ee8b6826d 100644 --- a/src/web/multilingual/formfields.py +++ b/src/web/multilingual/formfields.py @@ -7,9 +7,8 @@ from django.utils.translation import gettext_lazy as _ from util.logging_utils import get_request_logger - -from ..widgets import CKEditorWidget -from .data_structures import MultiLingualTextStructure +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 4f480519a..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 ..widgets import CKEditorUploadingWidget, CKEditorWidget -from .data_structures import MultiLingualTextStructure +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 f890e1d39..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/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/urls.py b/src/web/urls.py index a9028c147..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 ""