def find_and_fire_hook(event_name, instance, user_override=None): """ Look up Hooks that apply """ from django.contrib.auth.models import User from rest_hooks.models import Hook, HOOK_EVENTS if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format(event_name) ) filters = {'event': event_name} # Ignore the user if the user_override is False if user_override is not False: if user_override: filters['user'] = user_override elif hasattr(instance, 'user'): filters['user'] = instance.user elif isinstance(instance, User): filters['user'] = instance else: raise Exception( '{} has no `user` property. REST Hooks needs this.'.format(repr(instance)) ) # NOTE: This is probably up for discussion, but I think, in this # case, instead of raising an error, we should fire the hook for # all users/accounts it is subscribed to. That would be a genuine # usecase rather than erroring because no user is associated with # this event. hooks = Hook.objects.filter(**filters) for hook in hooks: hook.deliver_hook(instance)
def find_and_fire_hook(event_name, instance, user_override=None): """ Look up Hooks that apply """ from django.contrib.auth.models import User from rest_hooks.models import Hook, HOOK_EVENTS if user_override: user = user_override elif hasattr(instance, 'user'): user = instance.user elif isinstance(instance, User): user = instance else: raise Exception( '{} has no `user` property. REST Hooks needs this.'.format( repr(instance))) if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format( event_name)) hooks = Hook.objects.filter(user=user, event=event_name) for hook in hooks: hook.deliver_hook(instance)
def find_and_fire_hook(event_name, instance, user_override=None): """ Look up Hooks that apply """ from django.contrib.auth.models import User from rest_hooks.models import Hook, HOOK_EVENTS if user_override: user = user_override elif hasattr(instance, 'user'): user = instance.user elif isinstance(instance, User): user = instance else: raise Exception( '{} has no `user` property. REST Hooks needs this.'.format(repr(instance)) ) if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format(event_name) ) hooks = Hook.objects.filter(user=user, event=event_name) for hook in hooks: hook.deliver_hook(instance)
def find_and_fire_hook(event_name, instance, user_override=None): """ Look up Hooks that apply """ from django.contrib.auth.models import User from rest_hooks.models import Hook, HOOK_EVENTS if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format( event_name)) filters = {'event': event_name} # Ignore the user if the user_override is False if user_override is not False: if user_override: filters['user'] = user_override elif hasattr(instance, 'user'): filters['user'] = instance.user elif isinstance(instance, User): filters['user'] = instance else: raise Exception( '{} has no `user` property. REST Hooks needs this.'.format( repr(instance))) # NOTE: This is probably up for discussion, but I think, in this # case, instead of raising an error, we should fire the hook for # all users/accounts it is subscribed to. That would be a genuine # usecase rather than erroring because no user is associated with # this event. hooks = Hook.objects.filter(**filters) for hook in hooks: hook.deliver_hook(instance)
def find_and_fire_hook(event_name, instance, user_override=None): """ Look up Hooks that apply """ from rest_hooks.models import Hook, HOOK_EVENTS if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format( event_name)) filters = {'event': event_name} hooks = Hook.objects.filter(**filters) for hook in hooks: hook.deliver_hook(instance)
def find_and_fire_hook(event_name, instance, user_override=False): """ Look up Hooks that apply """ from django.db.models import Q from rest_hooks.models import Hook, HOOK_EVENTS if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format(event_name) ) # fetch all registered hooks for this event hooks = Hook.objects.filter(event=event_name) # iterate over all registered hooks & deliver the event to each one for hook in hooks: hook.deliver_hook(instance)
def find_and_fire_hook(event_name, instance, user_override=False): """ Look up Hooks that apply """ from django.db.models import Q from rest_hooks.models import Hook, HOOK_EVENTS if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format( event_name)) # fetch all registered hooks for this event hooks = Hook.objects.filter(event=event_name) # iterate over all registered hooks & deliver the event to each one for hook in hooks: hook.deliver_hook(instance)
def find_and_fire_hook(event_name, instance, user_override=None): """ Look up Hooks that apply """ from django.contrib.auth.models import User from rest_hooks.models import Hook, HOOK_EVENTS # specified user(s) to notify if user_override: users = user_override if isinstance(user_override, list) else [user_override] # has relationship with user table elif hasattr(instance, 'user'): users = [instance.user] # exposed property to tell us which users should be notified elif hasattr(instance, 'hook_users'): users = instance.hook_users # is a user object itself elif isinstance(instance, User): users = [instance] else: raise Exception( '{} has no `user` or `hook_users` property. REST Hooks needs this.'.format(repr(instance)) ) if not event_name in HOOK_EVENTS.keys(): raise Exception( '"{}" does not exist in `settings.HOOK_EVENTS`.'.format(event_name) ) hooks = Hook.objects.filter(user__in=users, event=event_name) for hook in hooks: hook.deliver_hook(instance)