From 254a39365e68fe879c850f1f888b2b702692cf52 Mon Sep 17 00:00:00 2001 From: Wes Appler Date: Tue, 7 Apr 2026 12:12:23 -0400 Subject: [PATCH 1/3] Add missing migration --- ..._change_partner_assigned_reviewers_role.py | 28 +++++++++++++++++++ .../migrations/0028_remove_partner_group.py | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py diff --git a/hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py b/hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py new file mode 100644 index 0000000000..8e8a9a988e --- /dev/null +++ b/hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py @@ -0,0 +1,28 @@ +# Generated by Django 5.2.12 on 2026-04-06 17:10 + +from django.db import migrations +from django.contrib.auth.models import Group + + +def assigned_review_migrate_from_partners(apps, schema_editor): + PARTNER_GROUP_NAME = "Partner" + REVIEWER_GROUP_NAME = "Reviewer" + + AssignedReviewers = apps.get_model("funds", "AssignedReviewers") + + reviewer_id = Group.objects.get(name=REVIEWER_GROUP_NAME).id + + if id_qs := Group.objects.filter(name=PARTNER_GROUP_NAME).values_list( + "id", flat=True + ): + AssignedReviewers.objects.filter(type_id=id_qs.first()).update( + type_id=reviewer_id + ) + + +class Migration(migrations.Migration): + dependencies = [ + ("funds", "0133_remove_applicationsubmission_partners"), + ] + + operations = [migrations.RunPython(assigned_review_migrate_from_partners)] diff --git a/hypha/apply/users/migrations/0028_remove_partner_group.py b/hypha/apply/users/migrations/0028_remove_partner_group.py index 866890b940..96a0831527 100644 --- a/hypha/apply/users/migrations/0028_remove_partner_group.py +++ b/hypha/apply/users/migrations/0028_remove_partner_group.py @@ -14,7 +14,7 @@ def migrate_partners_to_coapplicants(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ ("users", "0027_remove_drupal_id_field"), - ("funds", "0133_remove_applicationsubmission_partners"), + ("funds", "0134_change_partner_assigned_reviewers_role"), ] operations = [migrations.RunPython(migrate_partners_to_coapplicants)] From ef582f8d1564738aa0075029004561a3f506c587 Mon Sep 17 00:00:00 2001 From: Wes Appler Date: Thu, 9 Apr 2026 09:25:18 -0400 Subject: [PATCH 2/3] Combine assignedreviewer logic in 0028 migration --- ..._change_partner_assigned_reviewers_role.py | 28 ------------------- .../migrations/0028_remove_partner_group.py | 19 ++++++++++++- 2 files changed, 18 insertions(+), 29 deletions(-) delete mode 100644 hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py diff --git a/hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py b/hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py deleted file mode 100644 index 8e8a9a988e..0000000000 --- a/hypha/apply/funds/migrations/0134_change_partner_assigned_reviewers_role.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 5.2.12 on 2026-04-06 17:10 - -from django.db import migrations -from django.contrib.auth.models import Group - - -def assigned_review_migrate_from_partners(apps, schema_editor): - PARTNER_GROUP_NAME = "Partner" - REVIEWER_GROUP_NAME = "Reviewer" - - AssignedReviewers = apps.get_model("funds", "AssignedReviewers") - - reviewer_id = Group.objects.get(name=REVIEWER_GROUP_NAME).id - - if id_qs := Group.objects.filter(name=PARTNER_GROUP_NAME).values_list( - "id", flat=True - ): - AssignedReviewers.objects.filter(type_id=id_qs.first()).update( - type_id=reviewer_id - ) - - -class Migration(migrations.Migration): - dependencies = [ - ("funds", "0133_remove_applicationsubmission_partners"), - ] - - operations = [migrations.RunPython(assigned_review_migrate_from_partners)] diff --git a/hypha/apply/users/migrations/0028_remove_partner_group.py b/hypha/apply/users/migrations/0028_remove_partner_group.py index 96a0831527..c8868cda3f 100644 --- a/hypha/apply/users/migrations/0028_remove_partner_group.py +++ b/hypha/apply/users/migrations/0028_remove_partner_group.py @@ -4,6 +4,23 @@ from django.contrib.auth.models import Group +# An edge case that won't apply to most staystems +def assigned_review_migrate_from_partners(apps, schema_editor): + PARTNER_GROUP_NAME = "Partner" + REVIEWER_GROUP_NAME = "Reviewer" + + AssignedReviewers = apps.get_model("funds", "AssignedReviewers") + + reviewer_id = Group.objects.get(name=REVIEWER_GROUP_NAME).id + + if id_qs := Group.objects.filter(name=PARTNER_GROUP_NAME).values_list( + "id", flat=True + ): + AssignedReviewers.objects.filter(type_id=id_qs.first()).update( + type_id=reviewer_id + ) + + def migrate_partners_to_coapplicants(apps, schema_editor): PARTNER_GROUP_NAME = "Partner" @@ -14,7 +31,7 @@ def migrate_partners_to_coapplicants(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ ("users", "0027_remove_drupal_id_field"), - ("funds", "0134_change_partner_assigned_reviewers_role"), + ("funds", "0133_remove_applicationsubmission_partners"), ] operations = [migrations.RunPython(migrate_partners_to_coapplicants)] From a0d04d08049ac58c0e22cbd9a719e48b7fbd5712 Mon Sep 17 00:00:00 2001 From: Fredrik Jonsson Date: Sun, 12 Apr 2026 17:33:48 +0200 Subject: [PATCH 3/3] Make the 0028_remove_partner_group migration run both functions. --- .../migrations/0028_remove_partner_group.py | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/hypha/apply/users/migrations/0028_remove_partner_group.py b/hypha/apply/users/migrations/0028_remove_partner_group.py index c8868cda3f..5ff8b849eb 100644 --- a/hypha/apply/users/migrations/0028_remove_partner_group.py +++ b/hypha/apply/users/migrations/0028_remove_partner_group.py @@ -1,17 +1,20 @@ # Generated by Django 5.2.12 on 2026-03-26 19:48 from django.db import migrations -from django.contrib.auth.models import Group -# An edge case that won't apply to most staystems +# An edge case that won't apply to most systems def assigned_review_migrate_from_partners(apps, schema_editor): PARTNER_GROUP_NAME = "Partner" REVIEWER_GROUP_NAME = "Reviewer" + Group = apps.get_model("auth", "Group") AssignedReviewers = apps.get_model("funds", "AssignedReviewers") - reviewer_id = Group.objects.get(name=REVIEWER_GROUP_NAME).id + try: + reviewer_id = Group.objects.get(name=REVIEWER_GROUP_NAME).id + except Group.DoesNotExist: + return if id_qs := Group.objects.filter(name=PARTNER_GROUP_NAME).values_list( "id", flat=True @@ -21,11 +24,11 @@ def assigned_review_migrate_from_partners(apps, schema_editor): ) -def migrate_partners_to_coapplicants(apps, schema_editor): +def delete_partner_group(apps, schema_editor): PARTNER_GROUP_NAME = "Partner" - if Group.objects.filter(name=PARTNER_GROUP_NAME).exists(): - Group.objects.get(name=PARTNER_GROUP_NAME).delete() + Group = apps.get_model("auth", "Group") + Group.objects.filter(name=PARTNER_GROUP_NAME).delete() class Migration(migrations.Migration): @@ -34,4 +37,9 @@ class Migration(migrations.Migration): ("funds", "0133_remove_applicationsubmission_partners"), ] - operations = [migrations.RunPython(migrate_partners_to_coapplicants)] + operations = [ + migrations.RunPython( + assigned_review_migrate_from_partners, migrations.RunPython.noop + ), + migrations.RunPython(delete_partner_group, migrations.RunPython.noop), + ]