From 992a2ec8e0667efd2e7a10f6bd8105f7beb4e3f8 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Tue, 26 Jul 2022 20:14:33 +0300 Subject: [PATCH 1/5] Add new BaseRole --- kaehmy/migrations/0008_baserole.py | 22 +++++++++++++++++++ kaehmy/models.py | 35 ++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 kaehmy/migrations/0008_baserole.py diff --git a/kaehmy/migrations/0008_baserole.py b/kaehmy/migrations/0008_baserole.py new file mode 100644 index 0000000..f8ee18a --- /dev/null +++ b/kaehmy/migrations/0008_baserole.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.14 on 2022-08-03 20:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('kaehmy', '0007_alter_commentparent_id'), + ] + + operations = [ + migrations.CreateModel( + name='BaseRole', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255, verbose_name='Name')), + ('is_board', models.BooleanField(verbose_name='Board member')), + ('category', models.CharField(choices=[('corporate', 'Corporate affairs'), ('freshman', 'Freshmen'), ('international', 'International'), ('external', 'External affairs'), ('media', 'Media'), ('tech', 'Technology'), ('wellbeing', 'Wellbeing'), ('elepaja', 'Elepaja'), ('ceremonies', 'Ceremonies'), ('studies', 'Studies'), ('sosso', 'Sössö magazine'), ('alumni', 'Alumni relations'), ('others', 'Others')], default='others', max_length=255, verbose_name='Category')), + ], + ), + ] diff --git a/kaehmy/models.py b/kaehmy/models.py index a3a033a..ba22f71 100644 --- a/kaehmy/models.py +++ b/kaehmy/models.py @@ -1,7 +1,7 @@ from django.db import models from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -from webapp.models import BaseRole +from webapp.models import BaseRole as OldBaseRole # TODO: Move BaseRole to Kaehmt App; will fuck up the DB since table is removed, if no data migration is done before-hand. @@ -13,7 +13,38 @@ from webapp.models import BaseRole VERBOSE_NAME = _("Kaehmy") -class KaehmyBaseRole(BaseRole): +class BaseRole(models.Model): + """Base model for occupations/roles.""" + + id = models.AutoField(primary_key=True) + name = models.CharField(_("Name"), max_length=255) + is_board = models.BooleanField(_("Board member")) + + CATEGORIES = ( + ("corporate", _("Corporate affairs")), + ("freshman", _("Freshmen")), + ("international", _("International")), + ("external", _("External affairs")), + ("media", _("Media")), + ("tech", _("Technology")), + ("wellbeing", _("Wellbeing")), + ("elepaja", _("Elepaja")), + ("ceremonies", _("Ceremonies")), + ("studies", _("Studies")), + ("sosso", _("Sössö magazine")), + ("alumni", _("Alumni relations")), + ("others", _("Others")), + ) + category = models.CharField( + _("Category"), choices=CATEGORIES, default="others", max_length=255 + ) + + def __str__(self): + n = self.name.capitalize() + return "{} ({})".format(n, _("board member")) if self.is_board else n + + +class KaehmyBaseRole(OldBaseRole): """ABC""" CATEGORIES = ( From 9678b663a0c970e0642e4e04ee552c38a302f785 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Tue, 26 Jul 2022 20:52:05 +0300 Subject: [PATCH 2/5] Update kaehmy BaseRole --- kaehmy/migrations/0009_auto_20220726_2015.py | 29 +++++++++++ kaehmy/migrations/0010_auto_20220726_2033.py | 51 ++++++++++++++++++++ kaehmy/models.py | 4 +- sikweb/custom_operations.py | 30 ++++++++++++ 4 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 kaehmy/migrations/0009_auto_20220726_2015.py create mode 100644 kaehmy/migrations/0010_auto_20220726_2033.py create mode 100644 sikweb/custom_operations.py diff --git a/kaehmy/migrations/0009_auto_20220726_2015.py b/kaehmy/migrations/0009_auto_20220726_2015.py new file mode 100644 index 0000000..d34942a --- /dev/null +++ b/kaehmy/migrations/0009_auto_20220726_2015.py @@ -0,0 +1,29 @@ +# Generated by Django 2.2.28 on 2022-07-26 17:15 + +from unicodedata import category +from django.db import migrations + + +def copyBaseRolesToNewTable(apps, schema_editor): + Old = apps.get_model("kaehmy", "KaehmyBaseRole") + New = apps.get_model("kaehmy", "BaseRole") + for bases in Old.objects.all(): + New.objects.create( + id=bases.id, + name=bases.name, + is_board=bases.is_board, + category=bases.category, + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("kaehmy", "0008_baserole"), + ] + + operations = [ + migrations.RunPython( + copyBaseRolesToNewTable, reverse_code=migrations.RunPython.noop + ), + ] diff --git a/kaehmy/migrations/0010_auto_20220726_2033.py b/kaehmy/migrations/0010_auto_20220726_2033.py new file mode 100644 index 0000000..f881a0e --- /dev/null +++ b/kaehmy/migrations/0010_auto_20220726_2033.py @@ -0,0 +1,51 @@ +# Generated by Django 2.2.28 on 2022-07-26 17:33 + +from django.db import migrations, models +import django.db.models.deletion +from sikweb.custom_operations import AlterModelBases + + +class Migration(migrations.Migration): + + dependencies = [ + ("kaehmy", "0009_auto_20220726_2015"), + ] + + operations = [ + AlterModelBases("customrole", (models.Model,)), + AlterModelBases("presetrole", (models.Model,)), + migrations.AlterField( + model_name="customrole", + name="kaehmybaserole_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="BaseRole", + ), + ), + migrations.AlterField( + model_name="presetrole", + name="kaehmybaserole_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="BaseRole", + ), + ), + migrations.RenameField( + model_name="customrole", + old_name="kaehmybaserole_ptr", + new_name="baserole_ptr", + ), + migrations.RenameField( + model_name="presetrole", + old_name="kaehmybaserole_ptr", + new_name="baserole_ptr", + ), + ] diff --git a/kaehmy/models.py b/kaehmy/models.py index ba22f71..c20a865 100644 --- a/kaehmy/models.py +++ b/kaehmy/models.py @@ -67,7 +67,7 @@ class KaehmyBaseRole(OldBaseRole): ) -class PresetRole(KaehmyBaseRole): +class PresetRole(BaseRole): """Model for kaehmy role.""" description = models.TextField(_("Description")) @@ -77,7 +77,7 @@ class PresetRole(KaehmyBaseRole): verbose_name_plural = _("Preset kaehmy roles") -class CustomRole(KaehmyBaseRole): +class CustomRole(BaseRole): """Model representing a user-specified custom occupation.""" class Meta: diff --git a/sikweb/custom_operations.py b/sikweb/custom_operations.py new file mode 100644 index 0000000..2a32ca5 --- /dev/null +++ b/sikweb/custom_operations.py @@ -0,0 +1,30 @@ +# contents of yourapp/migrations/custom_operations.py + +from django.db.migrations.operations.models import ModelOperation + + +class AlterModelBases(ModelOperation): + reduce_to_sql = False + reversible = True + + def __init__(self, name, bases): + self.bases = bases + super().__init__(name) + + def state_forwards(self, app_label, state): + """ + Overwrite a models base classes with a custom list of + bases instead, then force Django to reload the model + with this (probably completely) different class hierarchy. + """ + state.models[app_label, self.name_lower].bases = self.bases + state.reload_model(app_label, self.name_lower) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + pass + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + pass + + def describe(self): + return "Update %s bases to %s" % (self.name, self.bases) From 93e122b8a8b8cf17f0edeb6c685c54d94052b172 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Tue, 26 Jul 2022 20:53:25 +0300 Subject: [PATCH 3/5] Remove webapp BaseRole --- kaehmy/forms.py | 4 ++-- .../migrations/0011_delete_kaehmybaserole.py | 16 +++++++++++++ kaehmy/models.py | 24 ------------------- webapp/migrations/0082_delete_baserole.py | 17 +++++++++++++ webapp/models.py | 12 ---------- 5 files changed, 35 insertions(+), 38 deletions(-) create mode 100644 kaehmy/migrations/0011_delete_kaehmybaserole.py create mode 100644 webapp/migrations/0082_delete_baserole.py diff --git a/kaehmy/forms.py b/kaehmy/forms.py index c82b549..9784c12 100644 --- a/kaehmy/forms.py +++ b/kaehmy/forms.py @@ -2,7 +2,7 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ValidationError -from kaehmy.models import PresetRole, CustomRole, Application, Comment, KaehmyBaseRole +from kaehmy.models import PresetRole, CustomRole, Application, Comment, BaseRole class CheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple): @@ -57,7 +57,7 @@ class ApplicationForm(forms.ModelForm): self.fields["custom_roles"].label = _("Custom roles") self.fields["custom_roles"].queryset = CustomRole.objects.all() - for cat_id, category in KaehmyBaseRole.CATEGORIES: + for cat_id, category in BaseRole.CATEGORIES: key = "preset_roles_{}".format(cat_id) qset = PresetRole.objects.filter(category=cat_id).order_by( "category", "-is_board" diff --git a/kaehmy/migrations/0011_delete_kaehmybaserole.py b/kaehmy/migrations/0011_delete_kaehmybaserole.py new file mode 100644 index 0000000..df1ab74 --- /dev/null +++ b/kaehmy/migrations/0011_delete_kaehmybaserole.py @@ -0,0 +1,16 @@ +# Generated by Django 3.2.14 on 2022-08-03 20:19 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('kaehmy', '0010_auto_20220726_2033'), + ] + + operations = [ + migrations.DeleteModel( + name='KaehmyBaseRole', + ), + ] diff --git a/kaehmy/models.py b/kaehmy/models.py index c20a865..54e533b 100644 --- a/kaehmy/models.py +++ b/kaehmy/models.py @@ -1,7 +1,6 @@ from django.db import models from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -from webapp.models import BaseRole as OldBaseRole # TODO: Move BaseRole to Kaehmt App; will fuck up the DB since table is removed, if no data migration is done before-hand. @@ -44,29 +43,6 @@ class BaseRole(models.Model): return "{} ({})".format(n, _("board member")) if self.is_board else n -class KaehmyBaseRole(OldBaseRole): - """ABC""" - - CATEGORIES = ( - ("corporate", _("Corporate affairs")), - ("freshman", _("Freshmen")), - ("international", _("International")), - ("external", _("External affairs")), - ("media", _("Media")), - ("tech", _("Technology")), - ("wellbeing", _("Wellbeing")), - ("elepaja", _("Elepaja")), - ("ceremonies", _("Ceremonies")), - ("studies", _("Studies")), - ("sosso", _("Sössö magazine")), - ("alumni", _("Alumni relations")), - ("others", _("Others")), - ) - category = models.CharField( - _("Category"), choices=CATEGORIES, default="others", max_length=255 - ) - - class PresetRole(BaseRole): """Model for kaehmy role.""" diff --git a/webapp/migrations/0082_delete_baserole.py b/webapp/migrations/0082_delete_baserole.py new file mode 100644 index 0000000..794c137 --- /dev/null +++ b/webapp/migrations/0082_delete_baserole.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.14 on 2022-08-03 20:19 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('kaehmy', '0011_delete_kaehmybaserole'), + ('webapp', '0081_auto_20220801_2217'), + ] + + operations = [ + migrations.DeleteModel( + name='BaseRole', + ), + ] diff --git a/webapp/models.py b/webapp/models.py index 4a01b07..959171d 100644 --- a/webapp/models.py +++ b/webapp/models.py @@ -222,18 +222,6 @@ def email_on_signup(sender, instance, created, **kwargs): ) -class BaseRole(models.Model): - """Base model for occupations/roles.""" - - id = models.AutoField(primary_key=True) - name = models.CharField(_("Name"), max_length=255) - is_board = models.BooleanField(_("Board member")) - - def __str__(self): - n = self.name.capitalize() - return "{} ({})".format(n, _("board member")) if self.is_board else n - - class JobAd(models.Model): """Job advertisements shown on Corporate relations page""" From 07d0f2aa470c244835a7929f5851dd4721ef99f1 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Tue, 26 Jul 2022 20:55:34 +0300 Subject: [PATCH 4/5] Remove comment --- kaehmy/models.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/kaehmy/models.py b/kaehmy/models.py index 54e533b..eb605da 100644 --- a/kaehmy/models.py +++ b/kaehmy/models.py @@ -2,13 +2,6 @@ from django.db import models from django.utils import timezone from django.utils.translation import ugettext_lazy as _ - -# TODO: Move BaseRole to Kaehmt App; will fuck up the DB since table is removed, if no data migration is done before-hand. -# Either reconstruct all kaehmy roles from scratch then, or do these migrations: -# 1. Create table here -# 2. Data migrate from webapp BaseRole to new kaehmy BaseRole -# 3. Delete webapp BaseRole table - VERBOSE_NAME = _("Kaehmy") From 1ca6de309099c4e7602144b8886636a919cc85dc Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 3 Aug 2022 23:35:41 +0300 Subject: [PATCH 5/5] Fix lint --- kaehmy/migrations/0008_baserole.py | 34 +++++++++++++++---- .../migrations/0011_delete_kaehmybaserole.py | 4 +-- webapp/migrations/0082_delete_baserole.py | 6 ++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/kaehmy/migrations/0008_baserole.py b/kaehmy/migrations/0008_baserole.py index f8ee18a..13fd777 100644 --- a/kaehmy/migrations/0008_baserole.py +++ b/kaehmy/migrations/0008_baserole.py @@ -6,17 +6,39 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('kaehmy', '0007_alter_commentparent_id'), + ("kaehmy", "0007_alter_commentparent_id"), ] operations = [ migrations.CreateModel( - name='BaseRole', + name="BaseRole", fields=[ - ('id', models.AutoField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=255, verbose_name='Name')), - ('is_board', models.BooleanField(verbose_name='Board member')), - ('category', models.CharField(choices=[('corporate', 'Corporate affairs'), ('freshman', 'Freshmen'), ('international', 'International'), ('external', 'External affairs'), ('media', 'Media'), ('tech', 'Technology'), ('wellbeing', 'Wellbeing'), ('elepaja', 'Elepaja'), ('ceremonies', 'Ceremonies'), ('studies', 'Studies'), ('sosso', 'Sössö magazine'), ('alumni', 'Alumni relations'), ('others', 'Others')], default='others', max_length=255, verbose_name='Category')), + ("id", models.AutoField(primary_key=True, serialize=False)), + ("name", models.CharField(max_length=255, verbose_name="Name")), + ("is_board", models.BooleanField(verbose_name="Board member")), + ( + "category", + models.CharField( + choices=[ + ("corporate", "Corporate affairs"), + ("freshman", "Freshmen"), + ("international", "International"), + ("external", "External affairs"), + ("media", "Media"), + ("tech", "Technology"), + ("wellbeing", "Wellbeing"), + ("elepaja", "Elepaja"), + ("ceremonies", "Ceremonies"), + ("studies", "Studies"), + ("sosso", "Sössö magazine"), + ("alumni", "Alumni relations"), + ("others", "Others"), + ], + default="others", + max_length=255, + verbose_name="Category", + ), + ), ], ), ] diff --git a/kaehmy/migrations/0011_delete_kaehmybaserole.py b/kaehmy/migrations/0011_delete_kaehmybaserole.py index df1ab74..26e8731 100644 --- a/kaehmy/migrations/0011_delete_kaehmybaserole.py +++ b/kaehmy/migrations/0011_delete_kaehmybaserole.py @@ -6,11 +6,11 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('kaehmy', '0010_auto_20220726_2033'), + ("kaehmy", "0010_auto_20220726_2033"), ] operations = [ migrations.DeleteModel( - name='KaehmyBaseRole', + name="KaehmyBaseRole", ), ] diff --git a/webapp/migrations/0082_delete_baserole.py b/webapp/migrations/0082_delete_baserole.py index 794c137..2fce8dc 100644 --- a/webapp/migrations/0082_delete_baserole.py +++ b/webapp/migrations/0082_delete_baserole.py @@ -6,12 +6,12 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('kaehmy', '0011_delete_kaehmybaserole'), - ('webapp', '0081_auto_20220801_2217'), + ("kaehmy", "0011_delete_kaehmybaserole"), + ("webapp", "0081_auto_20220801_2217"), ] operations = [ migrations.DeleteModel( - name='BaseRole', + name="BaseRole", ), ]