From d90931fbe5b67112aba8c4976fa52c5310222f1e Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Mon, 7 Sep 2020 11:02:40 +0300 Subject: [PATCH] Make access level an int instead of a string. We started with a string because we thought it could maybe provide more flexibility, though really, an int makes much more sense, especially on all the platforms etebase runs nowadays. --- .../migrations/0026_auto_20200907_0752.py | 23 +++++++++++ .../migrations/0027_auto_20200907_0752.py | 23 +++++++++++ .../migrations/0028_auto_20200907_0754.py | 39 +++++++++++++++++++ .../migrations/0029_auto_20200907_0801.py | 21 ++++++++++ django_etebase/models.py | 14 +++---- 5 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 django_etebase/migrations/0026_auto_20200907_0752.py create mode 100644 django_etebase/migrations/0027_auto_20200907_0752.py create mode 100644 django_etebase/migrations/0028_auto_20200907_0754.py create mode 100644 django_etebase/migrations/0029_auto_20200907_0801.py diff --git a/django_etebase/migrations/0026_auto_20200907_0752.py b/django_etebase/migrations/0026_auto_20200907_0752.py new file mode 100644 index 0000000..38c0b92 --- /dev/null +++ b/django_etebase/migrations/0026_auto_20200907_0752.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1 on 2020-09-07 07:52 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_etebase', '0025_auto_20200804_1216'), + ] + + operations = [ + migrations.RenameField( + model_name='collectioninvitation', + old_name='accessLevel', + new_name='accessLevelOld', + ), + migrations.RenameField( + model_name='collectionmember', + old_name='accessLevel', + new_name='accessLevelOld', + ), + ] diff --git a/django_etebase/migrations/0027_auto_20200907_0752.py b/django_etebase/migrations/0027_auto_20200907_0752.py new file mode 100644 index 0000000..d822d3d --- /dev/null +++ b/django_etebase/migrations/0027_auto_20200907_0752.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1 on 2020-09-07 07:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_etebase', '0026_auto_20200907_0752'), + ] + + operations = [ + migrations.AddField( + model_name='collectioninvitation', + name='accessLevel', + field=models.IntegerField(choices=[(0, 'Read Only'), (1, 'Admin'), (2, 'Read Write')], default=0), + ), + migrations.AddField( + model_name='collectionmember', + name='accessLevel', + field=models.IntegerField(choices=[(0, 'Read Only'), (1, 'Admin'), (2, 'Read Write')], default=0), + ), + ] diff --git a/django_etebase/migrations/0028_auto_20200907_0754.py b/django_etebase/migrations/0028_auto_20200907_0754.py new file mode 100644 index 0000000..cb62e63 --- /dev/null +++ b/django_etebase/migrations/0028_auto_20200907_0754.py @@ -0,0 +1,39 @@ +# Generated by Django 3.1 on 2020-09-07 07:54 + +from django.db import migrations + +from django_etebase.models import AccessLevels + + +def change_access_level_to_int(apps, schema_editor): + CollectionMember = apps.get_model('django_etebase', 'CollectionMember') + CollectionInvitation = apps.get_model('django_etebase', 'CollectionInvitation') + + for member in CollectionMember.objects.all(): + if member.accessLevelOld == 'adm': + member.accessLevel = AccessLevels.ADMIN + elif member.accessLevelOld == 'rw': + member.accessLevel = AccessLevels.READ_WRITE + elif member.accessLevelOld == 'ro': + member.accessLevel = AccessLevels.READ_ONLY + member.save() + + for invitation in CollectionInvitation.objects.all(): + if invitation.accessLevelOld == 'adm': + invitation.accessLevel = AccessLevels.ADMIN + elif invitation.accessLevelOld == 'rw': + invitation.accessLevel = AccessLevels.READ_WRITE + elif invitation.accessLevelOld == 'ro': + invitation.accessLevel = AccessLevels.READ_ONLY + invitation.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_etebase', '0027_auto_20200907_0752'), + ] + + operations = [ + migrations.RunPython(change_access_level_to_int), + ] diff --git a/django_etebase/migrations/0029_auto_20200907_0801.py b/django_etebase/migrations/0029_auto_20200907_0801.py new file mode 100644 index 0000000..7cd54d4 --- /dev/null +++ b/django_etebase/migrations/0029_auto_20200907_0801.py @@ -0,0 +1,21 @@ +# Generated by Django 3.1 on 2020-09-07 08:01 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_etebase', '0028_auto_20200907_0754'), + ] + + operations = [ + migrations.RemoveField( + model_name='collectioninvitation', + name='accessLevelOld', + ), + migrations.RemoveField( + model_name='collectionmember', + name='accessLevelOld', + ), + ] diff --git a/django_etebase/models.py b/django_etebase/models.py index 7570bae..797aa0f 100644 --- a/django_etebase/models.py +++ b/django_etebase/models.py @@ -138,10 +138,10 @@ class RevisionChunkRelation(models.Model): ordering = ('id', ) -class AccessLevels(models.TextChoices): - ADMIN = 'adm' - READ_WRITE = 'rw' - READ_ONLY = 'ro' +class AccessLevels(models.IntegerChoices): + READ_ONLY = 0 + ADMIN = 1 + READ_WRITE = 2 class CollectionMember(models.Model): @@ -149,8 +149,7 @@ class CollectionMember(models.Model): collection = models.ForeignKey(Collection, related_name='members', on_delete=models.CASCADE) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) encryptionKey = models.BinaryField(editable=True, blank=False, null=False) - accessLevel = models.CharField( - max_length=3, + accessLevel = models.IntegerField( choices=AccessLevels.choices, default=AccessLevels.READ_ONLY, ) @@ -195,8 +194,7 @@ class CollectionInvitation(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='incoming_invitations', on_delete=models.CASCADE) signedEncryptionKey = models.BinaryField(editable=False, blank=False, null=False) - accessLevel = models.CharField( - max_length=3, + accessLevel = models.IntegerField( choices=AccessLevels.choices, default=AccessLevels.READ_ONLY, )