From 814b2da0caedcd743b86e6ff7d568ef9897add80 Mon Sep 17 00:00:00 2001 From: Adarnof Date: Fri, 23 Feb 2018 14:44:12 -0500 Subject: [PATCH] Redirect all signals from admin proxy models. --- allianceauth/authentication/admin.py | 35 ++++++++++++++++++++++++-- allianceauth/authentication/signals.py | 13 +++------- allianceauth/groupmanagement/admin.py | 31 +++++++++++++++++++---- allianceauth/services/signals.py | 12 ++------- 4 files changed, 64 insertions(+), 27 deletions(-) diff --git a/allianceauth/authentication/admin.py b/allianceauth/authentication/admin.py index 15afcca7..74eac1ff 100644 --- a/allianceauth/authentication/admin.py +++ b/allianceauth/authentication/admin.py @@ -3,7 +3,8 @@ from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.models import User as BaseUser, Permission as BasePermission from django.utils.text import slugify from allianceauth.services.hooks import ServicesHook - +from django.db.models.signals import pre_save, post_save, pre_delete, post_delete, m2m_changed +from django.dispatch import receiver from allianceauth.authentication.models import State, get_guest_state, CharacterOwnership, UserProfile from allianceauth.hooks import get_hooks @@ -154,4 +155,34 @@ try: admin.site.unregister(BaseUser) finally: admin.site.register(User, UserAdmin) - admin.site.register(Permission, PermissionAdmin) \ No newline at end of file + admin.site.register(Permission, PermissionAdmin) + + +@receiver(pre_save, sender=User) +def redirect_pre_save(sender, signal=None, *args, **kwargs): + pre_save.send(BaseUser, *args, **kwargs) + + +@receiver(post_save, sender=User) +def redirect_post_save(sender, signal=None, *args, **kwargs): + post_save.send(BaseUser, *args, **kwargs) + + +@receiver(pre_delete, sender=User) +def redirect_pre_delete(sender, signal=None, *args, **kwargs): + pre_delete.send(BaseUser, *args, **kwargs) + + +@receiver(post_delete, sender=User) +def redirect_post_delete(sender, signal=None, *args, **kwargs): + post_delete.send(BaseUser, *args, **kwargs) + + +@receiver(m2m_changed, sender=User.groups.through) +def redirect_m2m_changed_groups(sender, signal=None, *args, **kwargs): + m2m_changed.send(BaseUser, *args, **kwargs) + + +@receiver(m2m_changed, sender=User.user_permissions.through) +def redirect_m2m_changed_permissions(sender, signal=None, *args, **kwargs): + m2m_changed.send(BaseUser, *args, **kwargs) diff --git a/allianceauth/authentication/signals.py b/allianceauth/authentication/signals.py index 4193d2c3..b0d8fb50 100644 --- a/allianceauth/authentication/signals.py +++ b/allianceauth/authentication/signals.py @@ -3,10 +3,9 @@ import logging from .models import CharacterOwnership, UserProfile, get_guest_state, State from django.contrib.auth.models import User from django.db.models import Q -from django.db.models.signals import post_save, pre_delete, m2m_changed, pre_save +from django.db.models.signals import pre_save, post_save, pre_delete, m2m_changed from django.dispatch import receiver, Signal from esi.models import Token -from allianceauth.authentication.admin import User as AdminUser from allianceauth.eveonline.models import EveCharacter @@ -67,6 +66,7 @@ def reassess_on_profile_save(sender, instance, created, *args, **kwargs): instance.assign_state() +@receiver(post_save, sender=User) def create_required_models(sender, instance, created, *args, **kwargs): # ensure all users have a model if created: @@ -74,10 +74,6 @@ def create_required_models(sender, instance, created, *args, **kwargs): UserProfile.objects.get_or_create(user=instance) -post_save.connect(create_required_models, sender=User) -post_save.connect(create_required_models, sender=AdminUser) - - @receiver(post_save, sender=Token) def record_character_ownership(sender, instance, created, *args, **kwargs): if created: @@ -132,6 +128,7 @@ def validate_main_character_token(sender, instance, *args, **kwargs): profile.save() +@receiver(pre_save, sender=User) def assign_state_on_active_change(sender, instance, *args, **kwargs): # set to guest state if inactive, assign proper state if reactivated if instance.pk: @@ -147,10 +144,6 @@ def assign_state_on_active_change(sender, instance, *args, **kwargs): instance.profile.save(update_fields=['state']) -pre_save.connect(assign_state_on_active_change, sender=User) -pre_save.connect(assign_state_on_active_change, sender=AdminUser) - - @receiver(post_save, sender=EveCharacter) def check_state_on_character_update(sender, instance, *args, **kwargs): # if this is a main character updating, check that user's state diff --git a/allianceauth/groupmanagement/admin.py b/allianceauth/groupmanagement/admin.py index 3146293b..66cf28f7 100644 --- a/allianceauth/groupmanagement/admin.py +++ b/allianceauth/groupmanagement/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin from django.contrib.auth.models import Group as BaseGroup -from django.db.models.signals import post_save - -from .models import AuthGroup, save_auth_group, create_auth_group +from django.db.models.signals import pre_save, post_save, pre_delete, post_delete, m2m_changed +from django.dispatch import receiver +from .models import AuthGroup from .models import GroupRequest @@ -29,5 +29,26 @@ admin.site.register(GroupRequest) admin.site.register(AuthGroup, AuthGroupAdmin) -post_save.connect(create_auth_group, sender=Group) -post_save.connect(save_auth_group, sender=Group) +@receiver(pre_save, sender=Group) +def redirect_pre_save(sender, signal=None, *args, **kwargs): + pre_save.send(BaseGroup, *args, **kwargs) + + +@receiver(post_save, sender=Group) +def redirect_post_save(sender, signal=None, *args, **kwargs): + post_save.send(BaseGroup, *args, **kwargs) + + +@receiver(pre_delete, sender=Group) +def redirect_pre_delete(sender, signal=None, *args, **kwargs): + pre_delete.send(BaseGroup, *args, **kwargs) + + +@receiver(post_delete, sender=Group) +def redirect_post_delete(sender, signal=None, *args, **kwargs): + post_delete.send(BaseGroup, *args, **kwargs) + + +@receiver(m2m_changed, sender=Group.permissions.through) +def redirect_m2m_changed_permissions(sender, signal=None, *args, **kwargs): + m2m_changed.send(BaseGroup, *args, **kwargs) \ No newline at end of file diff --git a/allianceauth/services/signals.py b/allianceauth/services/signals.py index 6bed464a..55478592 100644 --- a/allianceauth/services/signals.py +++ b/allianceauth/services/signals.py @@ -8,8 +8,6 @@ from django.db.models.signals import pre_save from django.dispatch import receiver from .hooks import ServicesHook from .tasks import disable_user -from allianceauth.authentication.admin import User as AdminUser -from allianceauth.groupmanagement.admin import Group as AdminGroup from allianceauth.authentication.models import State, UserProfile from allianceauth.authentication.signals import state_changed @@ -57,6 +55,7 @@ def m2m_changed_user_permissions(sender, instance, action, *args, **kwargs): transaction.on_commit(lambda: validate_all_services()) +@receiver(m2m_changed, sender=Group.permissions.through) def m2m_changed_group_permissions(sender, instance, action, pk_set, *args, **kwargs): logger.debug("Received m2m_changed from group %s permissions with action %s" % (instance, action)) if instance.pk and (action == "post_remove" or action == "post_clear"): @@ -89,10 +88,6 @@ def m2m_changed_group_permissions(sender, instance, action, pk_set, *args, **kwa logger.debug("Permission change for group {} was not service permission, ignoring".format(instance)) -m2m_changed.connect(m2m_changed_group_permissions, sender=Group.permissions.through) -m2m_changed.connect(m2m_changed_group_permissions, sender=AdminGroup.permissions.through) - - @receiver(m2m_changed, sender=State.permissions.through) def m2m_changed_state_permissions(sender, instance, action, pk_set, *args, **kwargs): logger.debug("Received m2m_changed from state %s permissions with action %s" % (instance, action)) @@ -145,6 +140,7 @@ def pre_delete_user(sender, instance, *args, **kwargs): disable_user(instance) +@receiver(pre_save, sender=User) def pre_save_user(sender, instance, *args, **kwargs): logger.debug("Received pre_save from %s" % instance) # check if user is being marked active/inactive @@ -158,7 +154,3 @@ def pre_save_user(sender, instance, *args, **kwargs): disable_user(instance) except User.DoesNotExist: pass - - -pre_save.connect(pre_save_user, sender=User) -pre_save.connect(pre_save_user, sender=AdminUser)