Redirect all signals from admin proxy models.

This commit is contained in:
Adarnof 2018-02-23 14:44:12 -05:00
parent 7a9bb0c84b
commit 814b2da0ca
4 changed files with 64 additions and 27 deletions

View File

@ -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.contrib.auth.models import User as BaseUser, Permission as BasePermission
from django.utils.text import slugify from django.utils.text import slugify
from allianceauth.services.hooks import ServicesHook 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.authentication.models import State, get_guest_state, CharacterOwnership, UserProfile
from allianceauth.hooks import get_hooks from allianceauth.hooks import get_hooks
@ -155,3 +156,33 @@ try:
finally: finally:
admin.site.register(User, UserAdmin) admin.site.register(User, UserAdmin)
admin.site.register(Permission, PermissionAdmin) 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)

View File

@ -3,10 +3,9 @@ import logging
from .models import CharacterOwnership, UserProfile, get_guest_state, State from .models import CharacterOwnership, UserProfile, get_guest_state, State
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db.models import Q 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 django.dispatch import receiver, Signal
from esi.models import Token from esi.models import Token
from allianceauth.authentication.admin import User as AdminUser
from allianceauth.eveonline.models import EveCharacter from allianceauth.eveonline.models import EveCharacter
@ -67,6 +66,7 @@ def reassess_on_profile_save(sender, instance, created, *args, **kwargs):
instance.assign_state() instance.assign_state()
@receiver(post_save, sender=User)
def create_required_models(sender, instance, created, *args, **kwargs): def create_required_models(sender, instance, created, *args, **kwargs):
# ensure all users have a model # ensure all users have a model
if created: if created:
@ -74,10 +74,6 @@ def create_required_models(sender, instance, created, *args, **kwargs):
UserProfile.objects.get_or_create(user=instance) 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) @receiver(post_save, sender=Token)
def record_character_ownership(sender, instance, created, *args, **kwargs): def record_character_ownership(sender, instance, created, *args, **kwargs):
if created: if created:
@ -132,6 +128,7 @@ def validate_main_character_token(sender, instance, *args, **kwargs):
profile.save() profile.save()
@receiver(pre_save, sender=User)
def assign_state_on_active_change(sender, instance, *args, **kwargs): def assign_state_on_active_change(sender, instance, *args, **kwargs):
# set to guest state if inactive, assign proper state if reactivated # set to guest state if inactive, assign proper state if reactivated
if instance.pk: if instance.pk:
@ -147,10 +144,6 @@ def assign_state_on_active_change(sender, instance, *args, **kwargs):
instance.profile.save(update_fields=['state']) 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) @receiver(post_save, sender=EveCharacter)
def check_state_on_character_update(sender, instance, *args, **kwargs): def check_state_on_character_update(sender, instance, *args, **kwargs):
# if this is a main character updating, check that user's state # if this is a main character updating, check that user's state

View File

@ -1,8 +1,8 @@
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.models import Group as BaseGroup from django.contrib.auth.models import Group as BaseGroup
from django.db.models.signals import post_save 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, save_auth_group, create_auth_group from .models import AuthGroup
from .models import GroupRequest from .models import GroupRequest
@ -29,5 +29,26 @@ admin.site.register(GroupRequest)
admin.site.register(AuthGroup, AuthGroupAdmin) admin.site.register(AuthGroup, AuthGroupAdmin)
post_save.connect(create_auth_group, sender=Group) @receiver(pre_save, sender=Group)
post_save.connect(save_auth_group, 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)

View File

@ -8,8 +8,6 @@ from django.db.models.signals import pre_save
from django.dispatch import receiver from django.dispatch import receiver
from .hooks import ServicesHook from .hooks import ServicesHook
from .tasks import disable_user 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.models import State, UserProfile
from allianceauth.authentication.signals import state_changed 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()) 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): 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)) 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"): 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)) 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) @receiver(m2m_changed, sender=State.permissions.through)
def m2m_changed_state_permissions(sender, instance, action, pk_set, *args, **kwargs): 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)) 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) disable_user(instance)
@receiver(pre_save, sender=User)
def pre_save_user(sender, instance, *args, **kwargs): def pre_save_user(sender, instance, *args, **kwargs):
logger.debug("Received pre_save from %s" % instance) logger.debug("Received pre_save from %s" % instance)
# check if user is being marked active/inactive # check if user is being marked active/inactive
@ -158,7 +154,3 @@ def pre_save_user(sender, instance, *args, **kwargs):
disable_user(instance) disable_user(instance)
except User.DoesNotExist: except User.DoesNotExist:
pass pass
pre_save.connect(pre_save_user, sender=User)
pre_save.connect(pre_save_user, sender=AdminUser)