From 4b856bc7668b6454218eb1202db26e64bc68d559 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 09:24:50 +0100 Subject: [PATCH 01/13] =?UTF-8?q?=F0=9F=94=A7=20Update=20isort=20config,?= =?UTF-8?q?=20remove=20unused=20pep8=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pep8 | 4 ---- setup.cfg | 9 ++++----- 2 files changed, 4 insertions(+), 9 deletions(-) delete mode 100644 .pep8 diff --git a/.pep8 b/.pep8 deleted file mode 100644 index 9333f775..00000000 --- a/.pep8 +++ /dev/null @@ -1,4 +0,0 @@ -[pep8] -ignore=W293,W291,E501,E261 -max-line-length=120 -exclude=migrations,static,media diff --git a/setup.cfg b/setup.cfg index d0acba93..ac600248 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,10 +1,9 @@ [isort] +profile = black combine_as_imports = true -default_section = THIRDPARTY -include_trailing_comma = true -line_length = 88 -multi_line_output = 3 -skip = env,node_modules +skip = + env + node_modules skip_glob = **/migrations/** known_django=django known_first_party=nrc From 2318a1caad4f8c92161a6ce982c61e9673df46b5 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 09:37:12 +0100 Subject: [PATCH 02/13] =?UTF-8?q?=F0=9F=97=91=EF=B8=8F=20Run=20`django-upg?= =?UTF-8?q?rade`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/nrc/api/urls.py | 4 ++-- src/nrc/datamodel/admin.py | 28 +++++++++++----------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/nrc/api/urls.py b/src/nrc/api/urls.py index ccd9f0c2..33fc80eb 100644 --- a/src/nrc/api/urls.py +++ b/src/nrc/api/urls.py @@ -12,8 +12,8 @@ urlpatterns = [ - re_path( - r"^v(?P\d+)/", + path( + "v/", include( [ # API documentation diff --git a/src/nrc/datamodel/admin.py b/src/nrc/datamodel/admin.py index 7d3bcee0..2cdb7d6f 100644 --- a/src/nrc/datamodel/admin.py +++ b/src/nrc/datamodel/admin.py @@ -31,11 +31,11 @@ class FilterGroupInline(admin.TabularInline): readonly_fields = ("get_filters_display", "get_object_actions") extra = 0 + @admin.display(description=_("filters")) def get_filters_display(self, obj): return ", ".join([f"{f.key}={f.value}" for f in obj.filters.all()]) - get_filters_display.short_description = _("filters") - + @admin.display(description=_("acties")) def get_object_actions(self, obj): return mark_safe( '{}'.format( @@ -44,8 +44,6 @@ def get_object_actions(self, obj): ) ) - get_object_actions.short_description = _("acties") - @admin.register(Abonnement) class AbonnementAdmin(admin.ModelAdmin): @@ -53,11 +51,10 @@ class AbonnementAdmin(admin.ModelAdmin): readonly_fields = ("uuid",) inlines = (FilterGroupInline,) + @admin.display(description=_("kanalen")) def get_kanalen_display(self, obj): return ", ".join([k.naam for k in obj.kanalen]) - get_kanalen_display.short_description = _("kanalen") - class FilterInline(admin.TabularInline): model = Filter @@ -77,11 +74,10 @@ class NotificatieResponseAdmin(admin.ModelAdmin): list_filter = ("abonnement", "response_status") search_fields = ("abonnement",) + @admin.display(description=_("result")) def get_result_display(self, obj): return obj.response_status or obj.exception - get_result_display.short_description = _("result") - class NotificatieResponseInline(admin.TabularInline): model = NotificatieResponse @@ -146,22 +142,22 @@ def get_queryset(self, request): ) return qs + @admin.display( + description=_("Result"), + boolean=True, + ) def result(self, obj): return obj.failed_responses_count == 0 - result.short_description = _("Result") - result.boolean = True - + @admin.display(description=_("Action")) def action(self, obj): return obj.forwarded_msg.get("actie") - action.short_description = _("Action") - + @admin.display(description=_("Resource")) def resource(self, obj): return obj.forwarded_msg.get("resource") - resource.short_description = _("Resource") - + @admin.display(description=_("Created date")) def created_date(self, obj): aanmaakdatum = obj.forwarded_msg.get("aanmaakdatum") if not aanmaakdatum: @@ -169,8 +165,6 @@ def created_date(self, obj): return DateTimeField().to_internal_value(aanmaakdatum) - created_date.short_description = _("Created date") - def get_inline_instances(self, request, obj=None): # Hide the NotificatieResponseInline when creating a Notification if obj is None: From e486e6658e6fb9644ff74d18521ffad993853e61 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 09:57:52 +0100 Subject: [PATCH 03/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20django-redi?= =?UTF-8?q?s=20to=205.4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/base.txt | 2 +- requirements/ci.txt | 2 +- requirements/dev.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index c64e5446..2300f511 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -115,7 +115,7 @@ django-ordered-model==3.5 # via django-admin-index django-privates==1.3.0 # via zgw-consumers -django-redis==5.2.0 +django-redis==5.4.0 # via -r requirements/base.in django-relativedelta==1.1.2 # via zgw-consumers diff --git a/requirements/ci.txt b/requirements/ci.txt index 8ad02f44..3ccf573a 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -160,7 +160,7 @@ django-privates==1.3.0 # via # -r requirements/base.txt # zgw-consumers -django-redis==5.2.0 +django-redis==5.4.0 # via -r requirements/base.txt django-relativedelta==1.1.2 # via diff --git a/requirements/dev.txt b/requirements/dev.txt index 0df07471..1930f005 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -179,7 +179,7 @@ django-privates==1.3.0 # via # -r requirements/ci.txt # zgw-consumers -django-redis==5.2.0 +django-redis==5.4.0 # via -r requirements/ci.txt django-relativedelta==1.1.2 # via From 82e9180651f86c22edeb66d2554d58622877a2c4 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 10:01:26 +0100 Subject: [PATCH 04/13] =?UTF-8?q?=F0=9F=97=91=EF=B8=8F=20Run=20`pyupgrade`?= =?UTF-8?q?,=20revert=20url=20change?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/nrc/accounts/migrations/0001_initial.py | 2 -- src/nrc/accounts/models.py | 2 +- src/nrc/api/serializers.py | 3 +-- src/nrc/api/urls.py | 5 +++-- src/nrc/datamodel/models.py | 12 +++++------- src/nrc/utils/context_processors.py | 6 +----- 6 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/nrc/accounts/migrations/0001_initial.py b/src/nrc/accounts/migrations/0001_initial.py index 6c02249f..8989b1eb 100644 --- a/src/nrc/accounts/migrations/0001_initial.py +++ b/src/nrc/accounts/migrations/0001_initial.py @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.4 on 2017-01-16 14:49 -from __future__ import unicode_literals from django.db import migrations, models import django.utils.timezone diff --git a/src/nrc/accounts/models.py b/src/nrc/accounts/models.py index 4a8df752..354c7e34 100644 --- a/src/nrc/accounts/models.py +++ b/src/nrc/accounts/models.py @@ -49,7 +49,7 @@ def get_full_name(self): """ Returns the first_name plus the last_name, with a space in between. """ - full_name = "%s %s" % (self.first_name, self.last_name) + full_name = "{} {}".format(self.first_name, self.last_name) return full_name.strip() def get_short_name(self): diff --git a/src/nrc/api/serializers.py b/src/nrc/api/serializers.py index 41ca14bd..dd742f6e 100644 --- a/src/nrc/api/serializers.py +++ b/src/nrc/api/serializers.py @@ -1,5 +1,4 @@ import logging -from typing import Optional from django.conf import settings from django.core.exceptions import ObjectDoesNotExist @@ -175,7 +174,7 @@ def validate(self, attrs): # ensure we're still camelCasing return camelize(validated_attrs) - def _send_to_subs(self, msg: dict, notificatie: Optional[Notificatie] = None): + def _send_to_subs(self, msg: dict, notificatie: Notificatie | None = None): # define subs msg_filters = msg["kenmerken"] subs = set() diff --git a/src/nrc/api/urls.py b/src/nrc/api/urls.py index 33fc80eb..73863c6a 100644 --- a/src/nrc/api/urls.py +++ b/src/nrc/api/urls.py @@ -12,8 +12,9 @@ urlpatterns = [ - path( - "v/", + re_path( + # Keep this as a regex path + r"^v(?P\d+)/", include( [ # API documentation diff --git a/src/nrc/datamodel/models.py b/src/nrc/datamodel/models.py index 3b6da0ad..40552887 100644 --- a/src/nrc/datamodel/models.py +++ b/src/nrc/datamodel/models.py @@ -46,12 +46,10 @@ def __str__(self) -> str: def match_filter_names(self, obj_filters: list) -> bool: set_kanaal_filters = set(self.filters) set_obj_filters = set(obj_filters) - if ( + return ( set_kanaal_filters <= set_obj_filters or set_kanaal_filters >= set_obj_filters - ): - return True - return False + ) class Abonnement(models.Model): @@ -91,7 +89,7 @@ def __str__(self) -> str: @property def kanalen(self): - return set([f.kanaal for f in self.filter_groups.all()]) + return {f.kanaal for f in self.filter_groups.all()} class FilterGroup(models.Model): @@ -148,7 +146,7 @@ def last_attempt(self): ) def __str__(self) -> str: - return "Notificatie ({})".format(self.kanaal) + return f"Notificatie ({self.kanaal})" class NotificatieResponse(models.Model): @@ -163,4 +161,4 @@ class NotificatieResponse(models.Model): response_status = models.IntegerField(null=True) def __str__(self) -> str: - return "{} {}".format(self.abonnement, self.response_status or self.exception) + return f"{self.abonnement} {self.response_status or self.exception}" diff --git a/src/nrc/utils/context_processors.py b/src/nrc/utils/context_processors.py index 84e1f004..34f41e87 100644 --- a/src/nrc/utils/context_processors.py +++ b/src/nrc/utils/context_processors.py @@ -13,8 +13,4 @@ def settings(request): "RELEASE", ) - return { - "settings": dict( - [(k, getattr(django_settings, k, None)) for k in public_settings] - ) - } + return {"settings": {k: getattr(django_settings, k, None) for k in public_settings}} From 671178cc510cab35ee5cf4441c116c1fffe01370 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 10:29:34 +0100 Subject: [PATCH 05/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20django-cors?= =?UTF-8?q?-headers=20to=204.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/base.txt | 2 +- requirements/ci.txt | 2 +- requirements/dev.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 2300f511..0ad88732 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -99,7 +99,7 @@ django-choices==1.7.2 # via # -r requirements/base.in # zgw-consumers -django-cors-headers==3.11.0 +django-cors-headers==4.3.0 # via -r requirements/base.in django-filter==21.1 # via commonground-api-common diff --git a/requirements/ci.txt b/requirements/ci.txt index 3ccf573a..0195c49c 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -134,7 +134,7 @@ django-choices==1.7.2 # via # -r requirements/base.txt # zgw-consumers -django-cors-headers==3.11.0 +django-cors-headers==4.3.0 # via -r requirements/base.txt django-filter==21.1 # via diff --git a/requirements/dev.txt b/requirements/dev.txt index 1930f005..9a2cada0 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -149,7 +149,7 @@ django-choices==1.7.2 # via # -r requirements/ci.txt # zgw-consumers -django-cors-headers==3.11.0 +django-cors-headers==4.3.0 # via -r requirements/ci.txt django-debug-toolbar==3.2.4 # via -r requirements/dev.in From 0399e7d0c0d8b5a3b61a383a2beeccdf452a3df6 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:16:51 +0100 Subject: [PATCH 06/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20lint=20and?= =?UTF-8?q?=20dev=20dependencies,=20reformat=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/base.txt | 4 +-- requirements/ci.txt | 23 +++++++---------- requirements/dev.txt | 25 +++++++------------ src/nrc/accounts/migrations/0001_initial.py | 1 - .../migrations/0002_initial_admin_index.py | 1 - .../migrations/0003_add_adfs_admin_index.py | 1 - .../0004_migrate_from_auth_adfs_db.py | 1 - src/nrc/api/tests/test_abonnement.py | 1 - src/nrc/api/tests/test_kanaal.py | 1 - src/nrc/api/tests/test_notificatie.py | 1 - src/nrc/api/tests/test_validation.py | 3 --- src/nrc/datamodel/migrations/0001_initial.py | 1 - .../migrations/0002_auto_20190318_1844.py | 1 - .../migrations/0003_auto_20190319_1151.py | 1 - .../0004_notificatie_notificatieresponse.py | 1 - .../migrations/0005_kanaal_filters.py | 1 - .../migrations/0006_auto_20190327_1101.py | 1 - .../migrations/0007_auto_20190327_1126.py | 1 - .../migrations/0008_auto_20190409_1422.py | 1 - ...notificatieresponse_response_status_int.py | 1 - .../0010_copy_data_to_response_status_int.py | 1 - ...ove_notificatieresponse_response_status.py | 1 - .../migrations/0012_auto_20190605_1523.py | 1 - .../migrations/0013_auto_20200207_1344.py | 1 - .../0014_alter_notificatie_forwarded_msg.py | 1 - .../0015_notificatieresponse_attempt.py | 1 - .../0016_alter_abonnement_callback_url.py | 1 - .../tests/test_self_signed_certificates.py | 1 - 28 files changed, 19 insertions(+), 60 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 0ad88732..42f7b226 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -199,7 +199,7 @@ orderedmultidict==1.0.1 # via furl oyaml==1.0 # via commonground-api-common -packaging==21.3 +packaging==23.2 # via drf-yasg prometheus-client==0.11.0 # via flower @@ -217,8 +217,6 @@ pyopenssl==23.3.0 # via # josepy # zgw-consumers -pyparsing==2.4.1.1 - # via packaging python-dateutil==2.8.2 # via # django-relativedelta diff --git a/requirements/ci.txt b/requirements/ci.txt index 0195c49c..28c69db0 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -26,7 +26,7 @@ billiard==3.6.4.0 # via # -r requirements/base.txt # celery -black==21.9b0 +black==23.12.1 # via -r requirements/test-tools.in bleach==5.0.1 # via -r requirements/base.txt @@ -223,11 +223,11 @@ faker==13.15.1 # -r requirements/base.txt # factory-boy # zgw-consumers -flake8==3.8.4 +flake8==7.0.0 # via -r requirements/test-tools.in flower==2.0.1 # via -r requirements/base.txt -freezegun==1.2.1 +freezegun==1.4.0 # via -r requirements/test-tools.in furl==2.1.3 # via -r requirements/base.txt @@ -261,7 +261,7 @@ isodate==0.6.1 # via # -r requirements/base.txt # commonground-api-common -isort==5.9.3 +isort==5.13.2 # via -r requirements/test-tools.in itypes==1.2.0 # via @@ -285,7 +285,7 @@ markupsafe==2.1.1 # via # -r requirements/base.txt # jinja2 -mccabe==0.6.1 +mccabe==0.7.0 # via flake8 mozilla-django-oidc==4.0.0 # via @@ -307,9 +307,10 @@ oyaml==1.0 # via # -r requirements/base.txt # commonground-api-common -packaging==21.3 +packaging==23.2 # via # -r requirements/base.txt + # black # drf-yasg pathspec==0.9.0 # via black @@ -325,13 +326,13 @@ prompt-toolkit==3.0.20 # click-repl psycopg2==2.9.3 # via -r requirements/base.txt -pycodestyle==2.6.0 +pycodestyle==2.11.1 # via flake8 pycparser==2.21 # via # -r requirements/base.txt # cffi -pyflakes==2.2.0 +pyflakes==3.2.0 # via flake8 pyjwt==2.4.0 # via @@ -343,10 +344,6 @@ pyopenssl==23.3.0 # -r requirements/base.txt # josepy # zgw-consumers -pyparsing==2.4.1.1 - # via - # -r requirements/base.txt - # packaging python-dateutil==2.8.2 # via # -r requirements/base.txt @@ -372,8 +369,6 @@ redis==5.0.1 # via # -r requirements/base.txt # django-redis -regex==2020.10.28 - # via black requests==2.31.0 # via # -r requirements/base.txt diff --git a/requirements/dev.txt b/requirements/dev.txt index 9a2cada0..73c8bb87 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -32,7 +32,7 @@ billiard==3.6.4.0 # via # -r requirements/ci.txt # celery -black==21.9b0 +black==23.12.1 # via -r requirements/ci.txt bleach==5.0.1 # via -r requirements/ci.txt @@ -248,11 +248,11 @@ faker==13.15.1 # -r requirements/ci.txt # factory-boy # zgw-consumers -flake8==3.8.4 +flake8==7.0.0 # via -r requirements/ci.txt flower==2.0.1 # via -r requirements/ci.txt -freezegun==1.2.1 +freezegun==1.4.0 # via -r requirements/ci.txt furl==2.1.3 # via -r requirements/ci.txt @@ -292,7 +292,7 @@ isodate==0.6.1 # via # -r requirements/ci.txt # commonground-api-common -isort==5.9.3 +isort==5.13.2 # via -r requirements/ci.txt itypes==1.2.0 # via @@ -317,7 +317,7 @@ markupsafe==2.1.1 # via # -r requirements/ci.txt # jinja2 -mccabe==0.6.1 +mccabe==0.7.0 # via # -r requirements/ci.txt # flake8 @@ -343,9 +343,10 @@ oyaml==1.0 # via # -r requirements/ci.txt # commonground-api-common -packaging==21.3 +packaging==23.2 # via # -r requirements/ci.txt + # black # build # drf-yasg # sphinx @@ -369,7 +370,7 @@ prompt-toolkit==3.0.20 # click-repl psycopg2==2.9.3 # via -r requirements/ci.txt -pycodestyle==2.6.0 +pycodestyle==2.11.1 # via # -r requirements/ci.txt # flake8 @@ -377,7 +378,7 @@ pycparser==2.21 # via # -r requirements/ci.txt # cffi -pyflakes==2.2.0 +pyflakes==3.2.0 # via # -r requirements/ci.txt # flake8 @@ -395,10 +396,6 @@ pyopenssl==23.3.0 # -r requirements/ci.txt # josepy # zgw-consumers -pyparsing==2.4.1.1 - # via - # -r requirements/ci.txt - # packaging pyproject-hooks==1.0.0 # via build python-dateutil==2.8.2 @@ -428,10 +425,6 @@ redis==5.0.1 # via # -r requirements/ci.txt # django-redis -regex==2020.10.28 - # via - # -r requirements/ci.txt - # black requests==2.31.0 # via # -r requirements/ci.txt diff --git a/src/nrc/accounts/migrations/0001_initial.py b/src/nrc/accounts/migrations/0001_initial.py index 8989b1eb..fc5c8974 100644 --- a/src/nrc/accounts/migrations/0001_initial.py +++ b/src/nrc/accounts/migrations/0001_initial.py @@ -6,7 +6,6 @@ class Migration(migrations.Migration): - initial = True dependencies = [("auth", "0008_alter_user_username_max_length")] diff --git a/src/nrc/accounts/migrations/0002_initial_admin_index.py b/src/nrc/accounts/migrations/0002_initial_admin_index.py index 09b47eed..cc0d9005 100644 --- a/src/nrc/accounts/migrations/0002_initial_admin_index.py +++ b/src/nrc/accounts/migrations/0002_initial_admin_index.py @@ -2,7 +2,6 @@ class Migration(migrations.Migration): - dependencies = [ ("accounts", "0001_initial"), ("admin_index", "0002_auto_20170802_1754"), diff --git a/src/nrc/accounts/migrations/0003_add_adfs_admin_index.py b/src/nrc/accounts/migrations/0003_add_adfs_admin_index.py index 78d11209..b163aa2b 100644 --- a/src/nrc/accounts/migrations/0003_add_adfs_admin_index.py +++ b/src/nrc/accounts/migrations/0003_add_adfs_admin_index.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("accounts", "0002_initial_admin_index"), ] diff --git a/src/nrc/accounts/migrations/0004_migrate_from_auth_adfs_db.py b/src/nrc/accounts/migrations/0004_migrate_from_auth_adfs_db.py index f1558496..70d322f0 100644 --- a/src/nrc/accounts/migrations/0004_migrate_from_auth_adfs_db.py +++ b/src/nrc/accounts/migrations/0004_migrate_from_auth_adfs_db.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - # migration is made no-op in the 1.6.x release series - on 1.4.x this copied # over the configuration from auth_adfs to mozilla_oidc. # This migration is kept for historical reasons to not mess with the migration diff --git a/src/nrc/api/tests/test_abonnement.py b/src/nrc/api/tests/test_abonnement.py index a657b89d..a9fc2e51 100644 --- a/src/nrc/api/tests/test_abonnement.py +++ b/src/nrc/api/tests/test_abonnement.py @@ -14,7 +14,6 @@ ZDS_CLIENT_CLASS="vng_api_common.mocks.MockClient", ) class AbonnementenTests(JWTAuthMixin, APITestCase): - heeft_alle_autorisaties = True def setUp(self): diff --git a/src/nrc/api/tests/test_kanaal.py b/src/nrc/api/tests/test_kanaal.py index 63a65788..e1612447 100644 --- a/src/nrc/api/tests/test_kanaal.py +++ b/src/nrc/api/tests/test_kanaal.py @@ -13,7 +13,6 @@ ZDS_CLIENT_CLASS="vng_api_common.mocks.MockClient", ) class KanalenTests(JWTAuthMixin, APITestCase): - heeft_alle_autorisaties = True def test_kanaal_create(self): diff --git a/src/nrc/api/tests/test_notificatie.py b/src/nrc/api/tests/test_notificatie.py index 393963f5..804122a7 100644 --- a/src/nrc/api/tests/test_notificatie.py +++ b/src/nrc/api/tests/test_notificatie.py @@ -25,7 +25,6 @@ LOG_NOTIFICATIONS_IN_DB=True, ) class NotificatieTests(JWTAuthMixin, APITestCase): - heeft_alle_autorisaties = True def test_notificatie_send_success(self, mock_task): diff --git a/src/nrc/api/tests/test_validation.py b/src/nrc/api/tests/test_validation.py index 9d4eed8a..ca8ebfeb 100644 --- a/src/nrc/api/tests/test_validation.py +++ b/src/nrc/api/tests/test_validation.py @@ -11,7 +11,6 @@ class AbonnementenValidationTests(JWTAuthMixin, APITestCase): - heeft_alle_autorisaties = True @override_settings( @@ -186,7 +185,6 @@ def test_webhooksite_whitelisted(self): class KanalenValidationTests(JWTAuthMixin, APITestCase): - heeft_alle_autorisaties = True @override_settings( @@ -209,7 +207,6 @@ def test_kanalen_invalid_documentatie_link_url(self): class NotificatiesValidationTests(JWTAuthMixin, APITestCase): - heeft_alle_autorisaties = True @freeze_time("2019-01-01T12:00:00Z") diff --git a/src/nrc/datamodel/migrations/0001_initial.py b/src/nrc/datamodel/migrations/0001_initial.py index 26e9c490..4325867b 100644 --- a/src/nrc/datamodel/migrations/0001_initial.py +++ b/src/nrc/datamodel/migrations/0001_initial.py @@ -6,7 +6,6 @@ class Migration(migrations.Migration): - initial = True dependencies = [] diff --git a/src/nrc/datamodel/migrations/0002_auto_20190318_1844.py b/src/nrc/datamodel/migrations/0002_auto_20190318_1844.py index 181cc385..9c44d64b 100644 --- a/src/nrc/datamodel/migrations/0002_auto_20190318_1844.py +++ b/src/nrc/datamodel/migrations/0002_auto_20190318_1844.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0001_initial")] operations = [ diff --git a/src/nrc/datamodel/migrations/0003_auto_20190319_1151.py b/src/nrc/datamodel/migrations/0003_auto_20190319_1151.py index 82932e68..abddf13f 100644 --- a/src/nrc/datamodel/migrations/0003_auto_20190319_1151.py +++ b/src/nrc/datamodel/migrations/0003_auto_20190319_1151.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0002_auto_20190318_1844")] operations = [ diff --git a/src/nrc/datamodel/migrations/0004_notificatie_notificatieresponse.py b/src/nrc/datamodel/migrations/0004_notificatie_notificatieresponse.py index b83176b2..ae644bc1 100644 --- a/src/nrc/datamodel/migrations/0004_notificatie_notificatieresponse.py +++ b/src/nrc/datamodel/migrations/0004_notificatie_notificatieresponse.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0003_auto_20190319_1151")] operations = [ diff --git a/src/nrc/datamodel/migrations/0005_kanaal_filters.py b/src/nrc/datamodel/migrations/0005_kanaal_filters.py index b0378af5..313533f1 100644 --- a/src/nrc/datamodel/migrations/0005_kanaal_filters.py +++ b/src/nrc/datamodel/migrations/0005_kanaal_filters.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0004_notificatie_notificatieresponse")] operations = [ diff --git a/src/nrc/datamodel/migrations/0006_auto_20190327_1101.py b/src/nrc/datamodel/migrations/0006_auto_20190327_1101.py index e52aef39..a5def84d 100644 --- a/src/nrc/datamodel/migrations/0006_auto_20190327_1101.py +++ b/src/nrc/datamodel/migrations/0006_auto_20190327_1101.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0005_kanaal_filters")] operations = [ diff --git a/src/nrc/datamodel/migrations/0007_auto_20190327_1126.py b/src/nrc/datamodel/migrations/0007_auto_20190327_1126.py index e599b80a..8825c824 100644 --- a/src/nrc/datamodel/migrations/0007_auto_20190327_1126.py +++ b/src/nrc/datamodel/migrations/0007_auto_20190327_1126.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0006_auto_20190327_1101")] operations = [ diff --git a/src/nrc/datamodel/migrations/0008_auto_20190409_1422.py b/src/nrc/datamodel/migrations/0008_auto_20190409_1422.py index 7b7c8a28..785e8e40 100644 --- a/src/nrc/datamodel/migrations/0008_auto_20190409_1422.py +++ b/src/nrc/datamodel/migrations/0008_auto_20190409_1422.py @@ -6,7 +6,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0007_auto_20190327_1126")] operations = [ diff --git a/src/nrc/datamodel/migrations/0009_notificatieresponse_response_status_int.py b/src/nrc/datamodel/migrations/0009_notificatieresponse_response_status_int.py index d819a7ba..2557e040 100644 --- a/src/nrc/datamodel/migrations/0009_notificatieresponse_response_status_int.py +++ b/src/nrc/datamodel/migrations/0009_notificatieresponse_response_status_int.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0008_auto_20190409_1422")] operations = [ diff --git a/src/nrc/datamodel/migrations/0010_copy_data_to_response_status_int.py b/src/nrc/datamodel/migrations/0010_copy_data_to_response_status_int.py index 5127f9c9..df7a5643 100644 --- a/src/nrc/datamodel/migrations/0010_copy_data_to_response_status_int.py +++ b/src/nrc/datamodel/migrations/0010_copy_data_to_response_status_int.py @@ -14,7 +14,6 @@ def convert_to_response_status_int(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [("datamodel", "0009_notificatieresponse_response_status_int")] operations = [migrations.RunPython(convert_to_response_status_int)] diff --git a/src/nrc/datamodel/migrations/0011_remove_notificatieresponse_response_status.py b/src/nrc/datamodel/migrations/0011_remove_notificatieresponse_response_status.py index 72575faf..32f13c87 100644 --- a/src/nrc/datamodel/migrations/0011_remove_notificatieresponse_response_status.py +++ b/src/nrc/datamodel/migrations/0011_remove_notificatieresponse_response_status.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0010_copy_data_to_response_status_int")] operations = [ diff --git a/src/nrc/datamodel/migrations/0012_auto_20190605_1523.py b/src/nrc/datamodel/migrations/0012_auto_20190605_1523.py index bb9b7665..dc745ef9 100644 --- a/src/nrc/datamodel/migrations/0012_auto_20190605_1523.py +++ b/src/nrc/datamodel/migrations/0012_auto_20190605_1523.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("datamodel", "0011_remove_notificatieresponse_response_status")] operations = [ diff --git a/src/nrc/datamodel/migrations/0013_auto_20200207_1344.py b/src/nrc/datamodel/migrations/0013_auto_20200207_1344.py index 6b5d2bb9..43bf9b28 100644 --- a/src/nrc/datamodel/migrations/0013_auto_20200207_1344.py +++ b/src/nrc/datamodel/migrations/0013_auto_20200207_1344.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("datamodel", "0012_auto_20190605_1523"), ] diff --git a/src/nrc/datamodel/migrations/0014_alter_notificatie_forwarded_msg.py b/src/nrc/datamodel/migrations/0014_alter_notificatie_forwarded_msg.py index 03d28960..086edeb9 100644 --- a/src/nrc/datamodel/migrations/0014_alter_notificatie_forwarded_msg.py +++ b/src/nrc/datamodel/migrations/0014_alter_notificatie_forwarded_msg.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("datamodel", "0013_auto_20200207_1344"), ] diff --git a/src/nrc/datamodel/migrations/0015_notificatieresponse_attempt.py b/src/nrc/datamodel/migrations/0015_notificatieresponse_attempt.py index f6ca7120..7e94cadb 100644 --- a/src/nrc/datamodel/migrations/0015_notificatieresponse_attempt.py +++ b/src/nrc/datamodel/migrations/0015_notificatieresponse_attempt.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("datamodel", "0014_alter_notificatie_forwarded_msg"), ] diff --git a/src/nrc/datamodel/migrations/0016_alter_abonnement_callback_url.py b/src/nrc/datamodel/migrations/0016_alter_abonnement_callback_url.py index cf2bdfa6..b2613c58 100644 --- a/src/nrc/datamodel/migrations/0016_alter_abonnement_callback_url.py +++ b/src/nrc/datamodel/migrations/0016_alter_abonnement_callback_url.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("datamodel", "0015_notificatieresponse_attempt"), ] diff --git a/src/nrc/tests/test_self_signed_certificates.py b/src/nrc/tests/test_self_signed_certificates.py index 564321d8..17d31fc8 100644 --- a/src/nrc/tests/test_self_signed_certificates.py +++ b/src/nrc/tests/test_self_signed_certificates.py @@ -42,7 +42,6 @@ def can_connect(hostname: str): class SelfSignedCertificateTests(TestCase): - root_cert = os.path.join(CERTS_DIR, "openzaak.crt") @classmethod From 3e8397d9f0e981c924d666d75a76fe57249284c5 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:38:27 +0100 Subject: [PATCH 07/13] =?UTF-8?q?=F0=9F=8E=A8=20Switch=20to=20`pathlib.Pat?= =?UTF-8?q?h`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/base.in | 2 +- src/nrc/conf/includes/base.py | 35 +++++++++---------- src/nrc/conf/local_example.py | 11 ++---- src/nrc/setup.py | 3 +- .../tests/test_self_signed_certificates.py | 6 ++-- src/nrc/wsgi.py | 3 +- 6 files changed, 27 insertions(+), 33 deletions(-) diff --git a/requirements/base.in b/requirements/base.in index 2b88eb6e..f0c6cb85 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -32,4 +32,4 @@ django-log-outgoing-requests # WSGI servers & monitoring - production oriented uwsgi sentry-sdk -elastic-apm \ No newline at end of file +elastic-apm diff --git a/src/nrc/conf/includes/base.py b/src/nrc/conf/includes/base.py index 131bf4b8..f40e4428 100644 --- a/src/nrc/conf/includes/base.py +++ b/src/nrc/conf/includes/base.py @@ -1,5 +1,6 @@ import datetime import os +from pathlib import Path from django.urls import reverse_lazy @@ -13,12 +14,8 @@ # Build paths inside the project, so further paths can be defined relative to # the code root. -DJANGO_PROJECT_DIR = os.path.abspath( - os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir) -) -BASE_DIR = os.path.abspath( - os.path.join(DJANGO_PROJECT_DIR, os.path.pardir, os.path.pardir) -) +DJANGO_PROJECT_DIR = Path(__file__).resolve(strict=True).parents[2] +BASE_DIR = DJANGO_PROJECT_DIR.parents[1] # # Core Django settings @@ -165,7 +162,7 @@ TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [os.path.join(DJANGO_PROJECT_DIR, "templates")], + "DIRS": [DJANGO_PROJECT_DIR / "templates"], "APP_DIRS": False, # conflicts with explicity specifying the loaders "OPTIONS": { "context_processors": [ @@ -183,7 +180,7 @@ WSGI_APPLICATION = "nrc.wsgi.application" # Translations -LOCALE_PATHS = (os.path.join(DJANGO_PROJECT_DIR, "conf", "locale"),) +LOCALE_PATHS = (DJANGO_PROJECT_DIR / "conf" / "locale",) # # SERVING of static and media files @@ -191,10 +188,10 @@ STATIC_URL = "/static/" -STATIC_ROOT = os.path.join(BASE_DIR, "static") +STATIC_ROOT = BASE_DIR / "static" # Additional locations of static files -STATICFILES_DIRS = [os.path.join(DJANGO_PROJECT_DIR, "static")] +STATICFILES_DIRS = [DJANGO_PROJECT_DIR / "static"] # List of finder classes that know how to find static files in # various locations. @@ -203,11 +200,11 @@ "django.contrib.staticfiles.finders.AppDirectoriesFinder", ] -MEDIA_ROOT = os.path.join(BASE_DIR, "media") +MEDIA_ROOT = BASE_DIR / "media" MEDIA_URL = "/media/" -FIXTURE_DIRS = [os.path.join(DJANGO_PROJECT_DIR, "fixtures")] +FIXTURE_DIRS = [DJANGO_PROJECT_DIR / "fixtures"] # # Sending EMAIL @@ -226,7 +223,7 @@ # # LOGGING # -LOGGING_DIR = os.path.join(BASE_DIR, "log") +LOGGING_DIR = BASE_DIR / "log" LOG_REQUESTS = config("LOG_REQUESTS", default=False) LOGGING = { @@ -257,7 +254,7 @@ "django": { "level": "DEBUG", "class": "logging.handlers.RotatingFileHandler", - "filename": os.path.join(LOGGING_DIR, "django.log"), + "filename": LOGGING_DIR / "django.log", "formatter": "verbose", "maxBytes": 1024 * 1024 * 10, # 10 MB "backupCount": 10, @@ -265,7 +262,7 @@ "project": { "level": "DEBUG", "class": "logging.handlers.RotatingFileHandler", - "filename": os.path.join(LOGGING_DIR, "nrc.log"), + "filename": LOGGING_DIR / "nrc.log", "formatter": "verbose", "maxBytes": 1024 * 1024 * 10, # 10 MB "backupCount": 10, @@ -273,7 +270,7 @@ "performance": { "level": "INFO", "class": "logging.handlers.RotatingFileHandler", - "filename": os.path.join(LOGGING_DIR, "performance.log"), + "filename": LOGGING_DIR / "performance.log", "formatter": "performance", "maxBytes": 1024 * 1024 * 10, # 10 MB "backupCount": 10, @@ -281,7 +278,7 @@ "notifications": { "level": "INFO", "class": "logging.handlers.RotatingFileHandler", - "filename": os.path.join(LOGGING_DIR, "notifications.log"), + "filename": LOGGING_DIR / "notifications.log", "formatter": "performance", "maxBytes": 1024 * 1024 * 10, # 10 MB "backupCount": 10, @@ -401,7 +398,7 @@ if "GIT_SHA" in os.environ: GIT_SHA = config("GIT_SHA", "") # in docker (build) context, there is no .git directory -elif os.path.exists(os.path.join(BASE_DIR, ".git")): +elif BASE_DIR.joinpath(".git").exists(): try: import git except ImportError: @@ -566,7 +563,7 @@ # ZGW-CONSUMERS # ZGW_CONSUMERS_TEST_SCHEMA_DIRS = [ - os.path.join(DJANGO_PROJECT_DIR, "tests", "schemas"), + DJANGO_PROJECT_DIR / "tests" / "schemas", ] # diff --git a/src/nrc/conf/local_example.py b/src/nrc/conf/local_example.py index acc0e0e4..e5d0e593 100644 --- a/src/nrc/conf/local_example.py +++ b/src/nrc/conf/local_example.py @@ -1,17 +1,12 @@ -import os +from pathlib import Path # # Any machine specific settings when using development settings. # # Automatically figure out the ROOT_DIR and PROJECT_DIR. -DJANGO_PROJECT_DIR = os.path.abspath( - os.path.join(os.path.dirname(__file__), os.path.pardir) -) -ROOT_DIR = os.path.abspath( - os.path.join(DJANGO_PROJECT_DIR, os.path.pardir, os.path.pardir) -) - +DJANGO_PROJECT_DIR = Path(__file__).resolve(strict=True).parents[1] +ROOT_DIR = DJANGO_PROJECT_DIR.parents[1] DATABASES = { "default": { diff --git a/src/nrc/setup.py b/src/nrc/setup.py index e6c6b3ef..84778a4f 100644 --- a/src/nrc/setup.py +++ b/src/nrc/setup.py @@ -11,6 +11,7 @@ """ import os import tempfile +from pathlib import Path from dotenv import load_dotenv from self_certifi import load_self_signed_certs as _load_self_signed_certs @@ -20,7 +21,7 @@ def setup_env(): # load the environment variables containing the secrets/config - dotenv_path = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, ".env") + dotenv_path = Path(__file__).parents[2] / ".env" load_dotenv(dotenv_path) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nrc.conf.dev") diff --git a/src/nrc/tests/test_self_signed_certificates.py b/src/nrc/tests/test_self_signed_certificates.py index 17d31fc8..7cae78e9 100644 --- a/src/nrc/tests/test_self_signed_certificates.py +++ b/src/nrc/tests/test_self_signed_certificates.py @@ -21,7 +21,7 @@ from nrc import setup from nrc.setup import load_self_signed_certs -CERTS_DIR = os.path.join(settings.BASE_DIR, "certs") +CERTS_DIR = settings.BASE_DIR / "certs" EXTRA_CERTS_ENVVAR = "EXTRA_VERIFY_CERTS" @@ -42,7 +42,7 @@ def can_connect(hostname: str): class SelfSignedCertificateTests(TestCase): - root_cert = os.path.join(CERTS_DIR, "openzaak.crt") + root_cert = CERTS_DIR / "openzaak.crt" @classmethod def setUpClass(cls): @@ -50,7 +50,7 @@ def setUpClass(cls): setup._certs_initialized = False cls._original_certs = os.environ.get(EXTRA_CERTS_ENVVAR) - os.environ[EXTRA_CERTS_ENVVAR] = cls.root_cert + os.environ[EXTRA_CERTS_ENVVAR] = str(cls.root_cert) load_self_signed_certs() @classmethod diff --git a/src/nrc/wsgi.py b/src/nrc/wsgi.py index df7c2406..31fffcd4 100644 --- a/src/nrc/wsgi.py +++ b/src/nrc/wsgi.py @@ -7,6 +7,7 @@ https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ """ import os +from pathlib import Path from django.core.wsgi import get_wsgi_application @@ -19,7 +20,7 @@ def init_newrelic(): import newrelic.agent newrelic.agent.initialize( - os.path.join(os.environ.get("PROJECT_ROOT"), "newrelic.ini"), + str(Path(os.environ.get("PROJECT_ROOT"), "newrelic.ini")), "production", ) except Exception as e: From 735682f816884304375b1bec9507115620bccce4 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:57:13 +0100 Subject: [PATCH 08/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20GHA=20versi?= =?UTF-8?q?ons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 20 ++++++++++---------- .github/workflows/code_quality.yml | 12 ++++++------ .github/workflows/codeql-analysis.yml | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa17283f..1556438b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,11 +37,11 @@ jobs: options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' - - uses: actions/setup-node@v2-beta + - uses: actions/setup-node@v4 with: node-version: '16' @@ -62,15 +62,15 @@ jobs: coverage run src/manage.py test src - name: Publish coverage report - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v3 docs: runs-on: ubuntu-latest name: Documentation build steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install dependencies @@ -83,7 +83,7 @@ jobs: name: Docker image build steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Determine tag/commit hash id: vars run: | @@ -121,7 +121,7 @@ jobs: steps: - name: Download built image - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-image - name: Scan image with Trivy @@ -146,9 +146,9 @@ jobs: if: github.event_name == 'push' # exclude PRs/forks steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Download built image - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: docker-image diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml index 506d7019..37dacf61 100644 --- a/.github/workflows/code_quality.yml +++ b/.github/workflows/code_quality.yml @@ -18,8 +18,8 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install dependencies @@ -32,8 +32,8 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install dependencies @@ -46,8 +46,8 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install dependencies diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c5ebcee1..4c90aa32 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL From ed991a3b7554a0269568043cfcdd4a02cb1efe6e Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Wed, 3 Apr 2024 11:03:30 +0200 Subject: [PATCH 09/13] Update to `django-axes==6.4.0` Update `asgiref` to avoid compat issue --- requirements/base.in | 2 +- requirements/base.txt | 6 ++++-- requirements/ci.txt | 11 +++++++---- requirements/dev.txt | 7 ++++--- src/nrc/conf/includes/base.py | 22 +++++++--------------- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/requirements/base.in b/requirements/base.in index f0c6cb85..d11b63e8 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -12,7 +12,7 @@ furl # Framework libraries Django ~= 3.2.0 -django-axes +django-axes[ipware] django-choices django-cors-headers django-markup diff --git a/requirements/base.txt b/requirements/base.txt index 42f7b226..03924477 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -6,7 +6,7 @@ # amqp==5.1.0 # via kombu -asgiref==3.5.0 +asgiref==3.8.1 # via django async-timeout==4.0.2 # via redis @@ -93,7 +93,7 @@ django-admin-index==2.0.0 # via -r requirements/base.in django-appconf==1.0.5 # via django-log-outgoing-requests -django-axes==5.31.0 +django-axes[ipware]==6.4.0 # via -r requirements/base.in django-choices==1.7.2 # via @@ -270,6 +270,8 @@ sqlparse==0.4.4 # via django tornado==6.3.3 # via flower +typing-extensions==4.10.0 + # via asgiref uritemplate==3.0.0 # via # coreapi diff --git a/requirements/ci.txt b/requirements/ci.txt index 28c69db0..fe9c6b73 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -8,7 +8,7 @@ amqp==5.1.0 # via # -r requirements/base.txt # kombu -asgiref==3.5.0 +asgiref==3.8.1 # via # -r requirements/base.txt # django @@ -128,7 +128,7 @@ django-appconf==1.0.5 # via # -r requirements/base.txt # django-log-outgoing-requests -django-axes==5.31.0 +django-axes[ipware]==6.4.0 # via -r requirements/base.txt django-choices==1.7.2 # via @@ -421,8 +421,11 @@ tornado==6.3.3 # via # -r requirements/base.txt # flower -typing-extensions==4.1.1 - # via black +typing-extensions==4.10.0 + # via + # -r requirements/base.txt + # asgiref + # black uritemplate==3.0.0 # via # -r requirements/base.txt diff --git a/requirements/dev.txt b/requirements/dev.txt index 73c8bb87..62340573 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -10,7 +10,7 @@ amqp==5.1.0 # via # -r requirements/ci.txt # kombu -asgiref==3.5.0 +asgiref==3.8.1 # via # -r requirements/ci.txt # django @@ -143,7 +143,7 @@ django-appconf==1.0.5 # via # -r requirements/ci.txt # django-log-outgoing-requests -django-axes==5.31.0 +django-axes[ipware]==6.4.0 # via -r requirements/ci.txt django-choices==1.7.2 # via @@ -511,9 +511,10 @@ tornado==6.3.3 # via # -r requirements/ci.txt # flower -typing-extensions==4.1.1 +typing-extensions==4.10.0 # via # -r requirements/ci.txt + # asgiref # black uritemplate==3.0.0 # via diff --git a/src/nrc/conf/includes/base.py b/src/nrc/conf/includes/base.py index f40e4428..564c7ec4 100644 --- a/src/nrc/conf/includes/base.py +++ b/src/nrc/conf/includes/base.py @@ -427,23 +427,15 @@ AXES_CACHE = "axes" # refers to CACHES setting AXES_FAILURE_LIMIT = 5 # Default: 3 AXES_LOCK_OUT_AT_FAILURE = True # Default: True -AXES_USE_USER_AGENT = False # Default: False AXES_COOLOFF_TIME = datetime.timedelta(minutes=5) -# after testing, the REMOTE_ADDR does not appear to be included with nginx (so single -# reverse proxy) and the ipware detection didn't properly work. On K8s you typically have -# ingress (load balancer) and then an additional nginx container for private file serving, -# bringing the total of reverse proxies to 2 - meaning HTTP_X_FORWARDED_FOR basically -# looks like ``$realIp,$ingressIp``. -> to get to $realIp, there is only 1 extra reverse -# proxy included. -AXES_PROXY_COUNT = NUM_PROXIES - 1 if NUM_PROXIES else None -AXES_ONLY_USER_FAILURES = ( - False # Default: False (you might want to block on username rather than IP) -) -AXES_LOCK_OUT_BY_COMBINATION_USER_AND_IP = ( - False # Default: False (you might want to block on username and IP) -) +AXES_LOCKOUT_PARAMETERS = [["ip_address", "user_agent", "username"]] +# By default, Axes obfuscates values for formfields named "password", but the admin +# interface login formfield name is "auth-password", so we obfuscate that as well +AXES_SENSITIVE_PARAMETERS = ["password", "auth-password"] # nosec + +AXES_IPWARE_PROXY_COUNT = NUM_PROXIES - 1 if NUM_PROXIES else None # The default meta precedence order -IPWARE_META_PRECEDENCE_ORDER = ( +AXES_IPWARE_META_PRECEDENCE_ORDER = ( "HTTP_X_FORWARDED_FOR", "X_FORWARDED_FOR", # , , "HTTP_CLIENT_IP", From 449b8f823083860e00acab01940f5302b599e2b3 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Wed, 3 Apr 2024 11:16:37 +0200 Subject: [PATCH 10/13] Remove unused dependencies --- requirements/base.in | 2 -- requirements/base.txt | 7 +------ requirements/ci.txt | 3 --- requirements/dev.txt | 3 --- src/nrc/conf/includes/base.py | 1 - 5 files changed, 1 insertion(+), 15 deletions(-) diff --git a/requirements/base.in b/requirements/base.in index d11b63e8..78234a12 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -13,9 +13,7 @@ furl # Framework libraries Django ~= 3.2.0 django-axes[ipware] -django-choices django-cors-headers -django-markup django-redis django-setup-configuration diff --git a/requirements/base.txt b/requirements/base.txt index 03924477..4b6dddc4 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -74,7 +74,6 @@ django==3.2.24 # django-filter # django-jsonform # django-log-outgoing-requests - # django-markup # django-privates # django-redis # django-relativedelta @@ -96,9 +95,7 @@ django-appconf==1.0.5 django-axes[ipware]==6.4.0 # via -r requirements/base.in django-choices==1.7.2 - # via - # -r requirements/base.in - # zgw-consumers + # via zgw-consumers django-cors-headers==4.3.0 # via -r requirements/base.in django-filter==21.1 @@ -109,8 +106,6 @@ django-jsonform==2.21.5 # via mozilla-django-oidc-db django-log-outgoing-requests==0.4.0 # via -r requirements/base.in -django-markup==1.5 - # via -r requirements/base.in django-ordered-model==3.5 # via django-admin-index django-privates==1.3.0 diff --git a/requirements/ci.txt b/requirements/ci.txt index fe9c6b73..a51d69c1 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -107,7 +107,6 @@ django==3.2.24 # django-filter # django-jsonform # django-log-outgoing-requests - # django-markup # django-privates # django-redis # django-relativedelta @@ -150,8 +149,6 @@ django-jsonform==2.21.5 # mozilla-django-oidc-db django-log-outgoing-requests==0.4.0 # via -r requirements/base.txt -django-markup==1.5 - # via -r requirements/base.txt django-ordered-model==3.5 # via # -r requirements/base.txt diff --git a/requirements/dev.txt b/requirements/dev.txt index 62340573..dc43b75e 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -122,7 +122,6 @@ django==3.2.24 # django-filter # django-jsonform # django-log-outgoing-requests - # django-markup # django-privates # django-redis # django-relativedelta @@ -169,8 +168,6 @@ django-jsonform==2.21.5 # mozilla-django-oidc-db django-log-outgoing-requests==0.4.0 # via -r requirements/ci.txt -django-markup==1.5 - # via -r requirements/ci.txt django-ordered-model==3.5 # via # -r requirements/ci.txt diff --git a/src/nrc/conf/includes/base.py b/src/nrc/conf/includes/base.py index 564c7ec4..b50f9e55 100644 --- a/src/nrc/conf/includes/base.py +++ b/src/nrc/conf/includes/base.py @@ -120,7 +120,6 @@ "notifications_api_common", "drf_yasg", "rest_framework", - "django_markup", "solo", "django_jsonform", "mozilla_django_oidc", From 39ccd2385062f37dba05a2293ae03adf9c221d15 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Wed, 3 Apr 2024 11:18:45 +0200 Subject: [PATCH 11/13] Update to black 24, format code accordingly --- requirements/ci.txt | 2 +- requirements/dev.txt | 2 +- src/nrc/api/tests/test_auth.py | 1 + src/nrc/conf/ci.py | 1 + src/nrc/conf/includes/base.py | 8 +++++--- src/nrc/conf/production.py | 1 + src/nrc/setup.py | 1 + src/nrc/wsgi.py | 1 + 8 files changed, 12 insertions(+), 5 deletions(-) diff --git a/requirements/ci.txt b/requirements/ci.txt index a51d69c1..189d6777 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -26,7 +26,7 @@ billiard==3.6.4.0 # via # -r requirements/base.txt # celery -black==23.12.1 +black==24.3.0 # via -r requirements/test-tools.in bleach==5.0.1 # via -r requirements/base.txt diff --git a/requirements/dev.txt b/requirements/dev.txt index dc43b75e..fd8c1d91 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -32,7 +32,7 @@ billiard==3.6.4.0 # via # -r requirements/ci.txt # celery -black==23.12.1 +black==24.3.0 # via -r requirements/ci.txt bleach==5.0.1 # via -r requirements/ci.txt diff --git a/src/nrc/api/tests/test_auth.py b/src/nrc/api/tests/test_auth.py index c75f7483..889da7b3 100644 --- a/src/nrc/api/tests/test_auth.py +++ b/src/nrc/api/tests/test_auth.py @@ -1,6 +1,7 @@ """ Guarantee that the proper authorization machinery is in place. """ + import requests_mock from rest_framework import status from rest_framework.test import APITestCase diff --git a/src/nrc/conf/ci.py b/src/nrc/conf/ci.py index 6657971f..e8e15dc5 100644 --- a/src/nrc/conf/ci.py +++ b/src/nrc/conf/ci.py @@ -1,6 +1,7 @@ """ Continuous integration settings module. """ + import os os.environ.setdefault("IS_HTTPS", "no") diff --git a/src/nrc/conf/includes/base.py b/src/nrc/conf/includes/base.py index b50f9e55..39b880fe 100644 --- a/src/nrc/conf/includes/base.py +++ b/src/nrc/conf/includes/base.py @@ -311,9 +311,11 @@ "level": "DEBUG", }, "log_outgoing_requests": { - "handlers": ["log_outgoing_requests", "save_outgoing_requests"] - if LOG_REQUESTS - else [], + "handlers": ( + ["log_outgoing_requests", "save_outgoing_requests"] + if LOG_REQUESTS + else [] + ), "level": "DEBUG", "propagate": True, }, diff --git a/src/nrc/conf/production.py b/src/nrc/conf/production.py index 91c1bf54..aff6ddaa 100644 --- a/src/nrc/conf/production.py +++ b/src/nrc/conf/production.py @@ -4,6 +4,7 @@ Tweaks the base settings so that caching mechanisms are used where possible, and HTTPS is leveraged where possible to further secure things. """ + from .includes.base import * # noqa # Caching sessions. diff --git a/src/nrc/setup.py b/src/nrc/setup.py index 84778a4f..1e45d7ab 100644 --- a/src/nrc/setup.py +++ b/src/nrc/setup.py @@ -9,6 +9,7 @@ do NOT import anything Django related here, as this file needs to be loaded before Django is initialized. """ + import os import tempfile from pathlib import Path diff --git a/src/nrc/wsgi.py b/src/nrc/wsgi.py index 31fffcd4..71478427 100644 --- a/src/nrc/wsgi.py +++ b/src/nrc/wsgi.py @@ -6,6 +6,7 @@ For more information on this file, see https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ """ + import os from pathlib import Path From 6bb4adcda04046846a785cafbe7c1fa31f9ba685 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Wed, 3 Apr 2024 11:25:09 +0200 Subject: [PATCH 12/13] Update some dependencies causing deprecation warnings --- requirements/base.txt | 4 ++-- requirements/ci.txt | 4 ++-- requirements/dev.txt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 4b6dddc4..e18420be 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -88,7 +88,7 @@ django==3.2.24 # mozilla-django-oidc-db # notifications-api-common # zgw-consumers -django-admin-index==2.0.0 +django-admin-index==3.1.1 # via -r requirements/base.in django-appconf==1.0.5 # via django-log-outgoing-requests @@ -112,7 +112,7 @@ django-privates==1.3.0 # via zgw-consumers django-redis==5.4.0 # via -r requirements/base.in -django-relativedelta==1.1.2 +django-relativedelta==2.0.0 # via zgw-consumers django-rest-framework-condition==0.1.1 # via commonground-api-common diff --git a/requirements/ci.txt b/requirements/ci.txt index 189d6777..d885313e 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -121,7 +121,7 @@ django==3.2.24 # mozilla-django-oidc-db # notifications-api-common # zgw-consumers -django-admin-index==2.0.0 +django-admin-index==3.1.1 # via -r requirements/base.txt django-appconf==1.0.5 # via @@ -159,7 +159,7 @@ django-privates==1.3.0 # zgw-consumers django-redis==5.4.0 # via -r requirements/base.txt -django-relativedelta==1.1.2 +django-relativedelta==2.0.0 # via # -r requirements/base.txt # zgw-consumers diff --git a/requirements/dev.txt b/requirements/dev.txt index fd8c1d91..86d90a05 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -136,7 +136,7 @@ django==3.2.24 # mozilla-django-oidc-db # notifications-api-common # zgw-consumers -django-admin-index==2.0.0 +django-admin-index==3.1.1 # via -r requirements/ci.txt django-appconf==1.0.5 # via @@ -178,7 +178,7 @@ django-privates==1.3.0 # zgw-consumers django-redis==5.4.0 # via -r requirements/ci.txt -django-relativedelta==1.1.2 +django-relativedelta==2.0.0 # via # -r requirements/ci.txt # zgw-consumers From ebd80f0498719cd54ae05d1bf5a1bb93d26ebf24 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Wed, 3 Apr 2024 11:27:56 +0200 Subject: [PATCH 13/13] Fix Artifact GHA --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1556438b..48c9ca81 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -107,7 +107,7 @@ jobs: . - run: docker image save -o image.tar $IMAGE_NAME:${{ steps.vars.outputs.tag }} - name: Store image artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: docker-image path: image.tar