mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 01:12:08 +01:00 
			
		
		
		
	Don't trigger signals when we add an object through a permission check
This commit is contained in:
		@@ -50,7 +50,7 @@ def save_object(sender, instance, **kwargs):
 | 
				
			|||||||
    in order to store each modification made
 | 
					    in order to store each modification made
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    # noinspection PyProtectedMember
 | 
					    # noinspection PyProtectedMember
 | 
				
			||||||
    if instance._meta.label_lower in EXCLUDED or hasattr(instance, "_no_log"):
 | 
					    if instance._meta.label_lower in EXCLUDED or hasattr(instance, "_no_signal"):
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # noinspection PyProtectedMember
 | 
					    # noinspection PyProtectedMember
 | 
				
			||||||
@@ -117,7 +117,7 @@ def delete_object(sender, instance, **kwargs):
 | 
				
			|||||||
    Each time a model is deleted, an entry in the table `Changelog` is added in the database
 | 
					    Each time a model is deleted, an entry in the table `Changelog` is added in the database
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    # noinspection PyProtectedMember
 | 
					    # noinspection PyProtectedMember
 | 
				
			||||||
    if instance._meta.label_lower in EXCLUDED or hasattr(instance, "_no_log"):
 | 
					    if instance._meta.label_lower in EXCLUDED or hasattr(instance, "_no_signal"):
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Si un utilisateur est connecté, on récupère l'utilisateur courant ainsi que son adresse IP
 | 
					    # Si un utilisateur est connecté, on récupère l'utilisateur courant ainsi que son adresse IP
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ def save_user_profile(instance, created, raw, **_kwargs):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    Hook to create and save a profile when an user is updated if it is not registered with the signup form
 | 
					    Hook to create and save a profile when an user is updated if it is not registered with the signup form
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    if not raw and created and instance.is_active:
 | 
					    if not raw and created and instance.is_active and not hasattr(instance, "_no_signal"):
 | 
				
			||||||
        from .models import Profile
 | 
					        from .models import Profile
 | 
				
			||||||
        Profile.objects.get_or_create(user=instance)
 | 
					        Profile.objects.get_or_create(user=instance)
 | 
				
			||||||
        if instance.is_superuser:
 | 
					        if instance.is_superuser:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,8 @@ def save_user_note(instance, raw, **_kwargs):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    Hook to create and save a note when an user is updated
 | 
					    Hook to create and save a note when an user is updated
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    if not raw and (instance.is_superuser or instance.profile.registration_valid):
 | 
					    if not raw and (instance.is_superuser or instance.profile.registration_valid)\
 | 
				
			||||||
 | 
					            and not hasattr(instance, "_no_signal"):
 | 
				
			||||||
        # Create note only when the registration is validated
 | 
					        # Create note only when the registration is validated
 | 
				
			||||||
        from note.models import NoteUser
 | 
					        from note.models import NoteUser
 | 
				
			||||||
        NoteUser.objects.get_or_create(user=instance)
 | 
					        NoteUser.objects.get_or_create(user=instance)
 | 
				
			||||||
@@ -17,10 +18,8 @@ def save_club_note(instance, raw, **_kwargs):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    Hook to create and save a note when a club is updated
 | 
					    Hook to create and save a note when a club is updated
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    if raw:
 | 
					 | 
				
			||||||
    # When provisionning data, do not try to autocreate
 | 
					    # When provisionning data, do not try to autocreate
 | 
				
			||||||
        return
 | 
					    if not raw and not hasattr(instance, "_no_signal"):
 | 
				
			||||||
 | 
					 | 
				
			||||||
        from .models import NoteClub
 | 
					        from .models import NoteClub
 | 
				
			||||||
        NoteClub.objects.get_or_create(club=instance)
 | 
					        NoteClub.objects.get_or_create(club=instance)
 | 
				
			||||||
        instance.note.save()
 | 
					        instance.note.save()
 | 
				
			||||||
@@ -30,5 +29,6 @@ def delete_transaction(instance, **_kwargs):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    Whenever we want to delete a transaction (caution with this), we ensure the transaction is invalid first.
 | 
					    Whenever we want to delete a transaction (caution with this), we ensure the transaction is invalid first.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					    if not hasattr(instance, "_no_signal"):
 | 
				
			||||||
        instance.valid = False
 | 
					        instance.valid = False
 | 
				
			||||||
        instance.save()
 | 
					        instance.save()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,8 +57,8 @@ class InstancedPermission:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    # Force insertion, no data verification, no trigger
 | 
					                    # Force insertion, no data verification, no trigger
 | 
				
			||||||
                    obj._force_save = True
 | 
					                    obj._force_save = True
 | 
				
			||||||
                    # We don't want log anything
 | 
					                    # We don't want to trigger any signal (log, ...)
 | 
				
			||||||
                    obj._no_log = True
 | 
					                    obj.no_signal = True
 | 
				
			||||||
                    Model.save(obj, force_insert=True)
 | 
					                    Model.save(obj, force_insert=True)
 | 
				
			||||||
                    ret = self.model.model_class().objects.filter(self.query & Q(pk=0)).exists()
 | 
					                    ret = self.model.model_class().objects.filter(self.query & Q(pk=0)).exists()
 | 
				
			||||||
                    # Delete testing object
 | 
					                    # Delete testing object
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ def pre_save_object(sender, instance, **kwargs):
 | 
				
			|||||||
    if instance._meta.label_lower in EXCLUDED:
 | 
					    if instance._meta.label_lower in EXCLUDED:
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if hasattr(instance, "_force_save"):
 | 
					    if hasattr(instance, "_force_save") or hasattr(instance, "_no_signal"):
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    user = get_current_authenticated_user()
 | 
					    user = get_current_authenticated_user()
 | 
				
			||||||
@@ -82,7 +82,8 @@ def pre_delete_object(instance, **kwargs):
 | 
				
			|||||||
    if instance._meta.label_lower in EXCLUDED:
 | 
					    if instance._meta.label_lower in EXCLUDED:
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if hasattr(instance, "_force_delete") or hasattr(instance, "pk") and instance.pk == 0:
 | 
					    if hasattr(instance, "_force_delete") or hasattr(instance, "pk") and instance.pk == 0 \
 | 
				
			||||||
 | 
					            or hasattr(instance, "_no_signal"):
 | 
				
			||||||
        # Don't check permissions on force-deleted objects
 | 
					        # Don't check permissions on force-deleted objects
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ def save_special_transaction(instance, created, **kwargs):
 | 
				
			|||||||
    When a special transaction is created, we create its linked proxy
 | 
					    When a special transaction is created, we create its linked proxy
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if not hasattr(instance, "_no_signal"):
 | 
				
			||||||
        if instance.is_credit():
 | 
					        if instance.is_credit():
 | 
				
			||||||
            if created and RemittanceType.objects.filter(note=instance.source).exists():
 | 
					            if created and RemittanceType.objects.filter(note=instance.source).exists():
 | 
				
			||||||
                SpecialTransactionProxy.objects.create(transaction=instance, remittance=None).save()
 | 
					                SpecialTransactionProxy.objects.create(transaction=instance, remittance=None).save()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user