from django.core.exceptions import PermissionDenied from django.db.models.signals import post_save from django.dispatch import receiver from rest_framework.exceptions import PermissionDenied from djeveric.signals import request_confirmation, user_confirmed, AlreadyConfirmed from userausfall.models import User @receiver(post_save, sender=User) def user_saved(sender, instance: User, **kwargs): if (instance.confidant_unconfirmed is not None) and (instance.confidant_unconfirmed != instance.confidant): request_confirmation(instance.confidant_unconfirmed, instance) @receiver(user_confirmed) def user_confirmed(sender, user: User, instance: User, **kwargs): if user == instance.confidant_unconfirmed: if instance.confidant_unconfirmed != instance.confidant: # confirm the confidant instance.confidant = instance.confidant_unconfirmed instance.save() else: raise AlreadyConfirmed("The confidant has already been confirmed.") else: raise PermissionDenied()