@@ -30,23 +30,33 @@ def find_and_fire_hook(event_name, instance, user_override=None):
30
30
from django .contrib .auth .models import User
31
31
from rest_hooks .models import Hook , HOOK_EVENTS
32
32
33
- if user_override :
34
- user = user_override
35
- elif hasattr (instance , 'user' ):
36
- user = instance .user
37
- elif isinstance (instance , User ):
38
- user = instance
39
- else :
40
- raise Exception (
41
- '{} has no `user` property. REST Hooks needs this.' .format (repr (instance ))
42
- )
43
-
44
33
if not event_name in HOOK_EVENTS .keys ():
45
34
raise Exception (
46
35
'"{}" does not exist in `settings.HOOK_EVENTS`.' .format (event_name )
47
36
)
48
37
49
- hooks = Hook .objects .filter (user = user , event = event_name )
38
+ filters = {'event' : event_name }
39
+
40
+ # Ignore the user if the user_override is False
41
+ if user_override is not False :
42
+ if user_override :
43
+ filters ['user' ] = user_override
44
+ elif hasattr (instance , 'user' ):
45
+ filters ['user' ] = instance .user
46
+ elif isinstance (instance , User ):
47
+ filters ['user' ] = instance
48
+ else :
49
+ raise Exception (
50
+ '{} has no `user` property. REST Hooks needs this.' .format (repr (instance ))
51
+ )
52
+
53
+ # NOTE: This is probably up for discussion, but I think, in this
54
+ # case, instead of raising an error, we should fire the hook for
55
+ # all users/accounts it is subscribed to. That would be a genuine
56
+ # usecase rather than erroring because no user is associated with
57
+ # this event.
58
+
59
+ hooks = Hook .objects .filter (** filters )
50
60
for hook in hooks :
51
61
hook .deliver_hook (instance )
52
62
@@ -65,8 +75,11 @@ def distill_model_event(instance, model, action, user_override=None):
65
75
if auto :
66
76
# break auto into App.Model, Action
67
77
maybe_model , maybe_action = auto .rsplit ('.' , 1 )
68
- if model == maybe_model and action == maybe_action :
78
+ maybe_action = maybe_action .rsplit ('+' , 1 )
79
+ if model == maybe_model and action == maybe_action [0 ]:
69
80
event_name = maybe_event_name
81
+ if len (maybe_action ) == 2 :
82
+ user_override = True
70
83
71
84
if event_name :
72
85
find_and_fire_hook (event_name , instance , user_override = user_override )
0 commit comments