aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar D0rs4n <[email protected]>2021-08-31 16:27:18 +0200
committerGravatar D0rs4n <[email protected]>2021-11-26 21:14:16 +0100
commitf093907393b4f479f62409286831b938ba65c558 (patch)
tree389689c8ebe865af10eb53a35b5c1df63b805d32
parentMerge 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__.py1
-rw-r--r--pydis_site/apps/api/apps.py10
-rw-r--r--pydis_site/apps/api/signals.py12
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()