diff options
author | 2021-08-31 16:27:18 +0200 | |
---|---|---|
committer | 2021-11-26 21:14:16 +0100 | |
commit | f093907393b4f479f62409286831b938ba65c558 (patch) | |
tree | 389689c8ebe865af10eb53a35b5c1df63b805d32 | |
parent | Merge pull request #619 from hedyhli/patch-1 (diff) |
Create a signal to unassign roles from user when deleted
Add a signal to the api app that automatically unassigns
deleted roles from users that have them
-rw-r--r-- | pydis_site/apps/api/__init__.py | 1 | ||||
-rw-r--r-- | pydis_site/apps/api/apps.py | 10 | ||||
-rw-r--r-- | pydis_site/apps/api/signals.py | 12 |
3 files changed, 22 insertions, 1 deletions
diff --git a/pydis_site/apps/api/__init__.py b/pydis_site/apps/api/__init__.py index e69de29b..afa5b4d5 100644 --- a/pydis_site/apps/api/__init__.py +++ b/pydis_site/apps/api/__init__.py @@ -0,0 +1 @@ +default_app_config = 'pydis_site.apps.api.apps.ApiConfig' diff --git a/pydis_site/apps/api/apps.py b/pydis_site/apps/api/apps.py index 76810b2e..18eda9e3 100644 --- a/pydis_site/apps/api/apps.py +++ b/pydis_site/apps/api/apps.py @@ -4,4 +4,12 @@ from django.apps import AppConfig class ApiConfig(AppConfig): """Django AppConfig for the API app.""" - name = 'api' + name = 'pydis_site.apps.api' + + def ready(self) -> None: + """ + Gets called as soon as the registry is fully populated. + + https://docs.djangoproject.com/en/3.2/ref/applications/#django.apps.AppConfig.ready + """ + import pydis_site.apps.api.signals # noqa: F401 diff --git a/pydis_site/apps/api/signals.py b/pydis_site/apps/api/signals.py new file mode 100644 index 00000000..c69704b1 --- /dev/null +++ b/pydis_site/apps/api/signals.py @@ -0,0 +1,12 @@ +from django.db.models.signals import pre_delete +from django.dispatch import receiver + +from pydis_site.apps.api.models.bot import Role, User + + +@receiver(signal=pre_delete, sender=Role) +def delete_role_from_user(sender: Role, instance: Role, **kwargs) -> None: + """Unassigns the Role (instance) that is being deleted from every user that has it.""" + for user in User.objects.filter(roles__contains=[instance.id]): + del user.roles[user.roles.index(instance.id)] + user.save() |