From 076f6ed71f6e468f579e56d5d8dfdd8ce68bbeee Mon Sep 17 00:00:00 2001 From: chris48s Date: Mon, 13 Oct 2025 13:48:42 +0100 Subject: [PATCH 1/4] upgrade django-formtools --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8e96ef809..8793b793b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ dependencies = [ "django-cors-headers==4.7.0", "django-extensions==3.2.3", "django-filter==24.3", - "django-formtools==2.3", + "django-formtools==2.5.1", "django-localflavor==4.0", "django-middleware-global-request==0.3.5", "django-model-utils==5.0.0", diff --git a/uv.lock b/uv.lock index 7339aea51..c295509be 100644 --- a/uv.lock +++ b/uv.lock @@ -452,14 +452,14 @@ wheels = [ [[package]] name = "django-formtools" -version = "2.3" +version = "2.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/b0/41ca0a8b7f2ce073f4cfca6adcc7b502a4a894fad9b80505b2ad13dc7aac/django-formtools-2.3.tar.gz", hash = "sha256:9663b6eca64777b68d6d4142efad8597fe9a685924673b25aa8a1dcff4db00c3", size = 83706, upload-time = "2021-04-19T03:58:47.452Z" } +sdist = { url = "https://files.pythonhosted.org/packages/73/f8/bb9b228fc33230186f3612a6fc96274a81bab3509817498f2632d7aa6367/django-formtools-2.5.1.tar.gz", hash = "sha256:47cb34552c6efca088863d693284d04fc36eaaf350eb21e1a1d935e0df523c93", size = 88637, upload-time = "2023-12-19T10:30:59.78Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/dd/0bce8b9cc6dfa80a4c510e625f54be4348e799d9c594f98c1cd83e63cd2a/django_formtools-2.3-py3-none-any.whl", hash = "sha256:4699937e19ee041d803943714fe0c1c7ad4cab802600eb64bbf4cdd0a1bfe7d9", size = 148867, upload-time = "2021-04-19T03:58:32.131Z" }, + { url = "https://files.pythonhosted.org/packages/12/63/91a107e3aaaf3987bad036494dfd8cc2675f4a66d22e65ffd6711f84ba70/django_formtools-2.5.1-py3-none-any.whl", hash = "sha256:bce9b64eda52cc1eef6961cc649cf75aacd1a707c2fff08d6c3efcbc8e7e761a", size = 170651, upload-time = "2023-12-19T10:30:02.816Z" }, ] [[package]] @@ -667,7 +667,7 @@ requires-dist = [ { name = "django-cors-headers", specifier = "==4.7.0" }, { name = "django-extensions", specifier = "==3.2.3" }, { name = "django-filter", specifier = "==24.3" }, - { name = "django-formtools", specifier = "==2.3" }, + { name = "django-formtools", specifier = "==2.5.1" }, { name = "django-localflavor", specifier = "==4.0" }, { name = "django-middleware-global-request", specifier = "==0.3.5" }, { name = "django-model-utils", specifier = "==5.0.0" }, From 169852b9dce963abf76da51fa1b2a52169b0dd20 Mon Sep 17 00:00:00 2001 From: chris48s Date: Mon, 13 Oct 2025 13:52:16 +0100 Subject: [PATCH 2/4] update wizard code for new formtools version --- .../apps/elections/views/id_creator.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/every_election/apps/elections/views/id_creator.py b/every_election/apps/elections/views/id_creator.py index 08f0da6cb..c94c0925e 100644 --- a/every_election/apps/elections/views/id_creator.py +++ b/every_election/apps/elections/views/id_creator.py @@ -4,7 +4,6 @@ from django import forms from django.db import transaction from django.http import HttpResponseRedirect -from django.utils.functional import cached_property from election_snooper.helpers import post_to_slack from election_snooper.models import SnoopedElection from elections.baker import send_event @@ -125,7 +124,7 @@ class IDCreatorWizard(NamedUrlSessionWizardView): def get_template_names(self): return [TEMPLATES[self.steps.current]] - @cached_property + @property def get_election_type(self): if self.get_cleaned_data_for_step("election_type"): return self.get_cleaned_data_for_step("election_type").get( @@ -133,26 +132,30 @@ def get_election_type(self): ) return None - @cached_property + @property def get_election_subtypes(self): + if not self.condition_dict["election_subtype"](self): + return None if self.get_cleaned_data_for_step("election_subtype"): return self.get_cleaned_data_for_step("election_subtype").get( "election_subtype" ) return None - @cached_property + @property def get_organisations(self): - if self.get_cleaned_data_for_step("election_organisation"): - return self.get_cleaned_data_for_step("election_organisation").get( - "election_organisation" - ) if "election_organisation" in self.storage.extra_data: return Organisation.objects.filter( electedrole__election_type__election_type__in=self.storage.extra_data[ "election_organisation" ] ) + if not self.condition_dict["election_organisation"](self): + return None + if self.get_cleaned_data_for_step("election_organisation"): + return self.get_cleaned_data_for_step("election_organisation").get( + "election_organisation" + ) return None def get_election_date(self): From 432fffe886eb7a532a26272e661bceb94739cebc Mon Sep 17 00:00:00 2001 From: chris48s Date: Wed, 15 Oct 2025 14:49:46 +0100 Subject: [PATCH 3/4] improve performance --- .../apps/elections/views/id_creator.py | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/every_election/apps/elections/views/id_creator.py b/every_election/apps/elections/views/id_creator.py index c94c0925e..90de9f447 100644 --- a/every_election/apps/elections/views/id_creator.py +++ b/every_election/apps/elections/views/id_creator.py @@ -121,26 +121,39 @@ def should_show_by_elections_source(wizard): class IDCreatorWizard(NamedUrlSessionWizardView): + def __init__(self, *args, **kwargs): + self.cache = {} + return super().__init__(*args, **kwargs) + def get_template_names(self): return [TEMPLATES[self.steps.current]] @property def get_election_type(self): - if self.get_cleaned_data_for_step("election_type"): - return self.get_cleaned_data_for_step("election_type").get( - "election_type" - ) - return None + if "election_type" in self.cache: + return self.cache["election_type"] + + cleaned_data = self.get_cleaned_data_for_step("election_type") + if cleaned_data: + self.cache["election_type"] = cleaned_data.get("election_type") + + return self.cache.get("election_type") @property def get_election_subtypes(self): + if "election_subtypes" in self.cache: + return self.cache["election_subtypes"] + if not self.condition_dict["election_subtype"](self): return None - if self.get_cleaned_data_for_step("election_subtype"): - return self.get_cleaned_data_for_step("election_subtype").get( + + cleaned_data = self.get_cleaned_data_for_step("election_subtype") + if cleaned_data: + self.cache["election_subtypes"] = cleaned_data.get( "election_subtype" ) - return None + + return self.cache.get("election_subtypes") @property def get_organisations(self): @@ -150,13 +163,20 @@ def get_organisations(self): "election_organisation" ] ) + if not self.condition_dict["election_organisation"](self): return None - if self.get_cleaned_data_for_step("election_organisation"): - return self.get_cleaned_data_for_step("election_organisation").get( + + if "organisations" in self.cache: + return self.cache["organisations"] + + cleaned_data = self.get_cleaned_data_for_step("election_organisation") + if cleaned_data: + self.cache["organisations"] = cleaned_data.get( "election_organisation" ) - return None + + return self.cache.get("organisations") def get_election_date(self): election_date = self.get_cleaned_data_for_step("date") or {} From 9270a32b4cc49c5a7205c1b1826c93f650c4336b Mon Sep 17 00:00:00 2001 From: chris48s Date: Wed, 15 Oct 2025 14:52:32 +0100 Subject: [PATCH 4/4] TEMP REVERT deploy to dev --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3b723cc99..ad0f74a70 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -252,14 +252,14 @@ workflows: requires: - "CDK Synth" context: [deployment-development-ee, slack-secrets] - filters: { branches: { only: [ development ] } } + filters: { branches: { only: [ development, "form-tools20251015" ] } } dc-environment: development - code_deploy: name: "Development: AWS CodeDeploy" requires: - "Development: CDK Deploy" context: [deployment-development-ee, slack-secrets] - filters: { branches: { only: [ development ] } } + filters: { branches: { only: [ development, "form-tools20251015" ] } } dc-environment: development - cdk_deploy: name: "Staging: CDK Deploy"