Skip to content

Commit 9550f2d

Browse files
committed
Send Slack request with event data (if handler asks for it)
1 parent c115c7b commit 9550f2d

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

slackeventsapi/server.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from flask import Flask, request, make_response
2+
import inspect
23
import json
34
import platform
45
import sys
@@ -117,7 +118,15 @@ def event():
117118
# Parse the Event payload and emit the event to the event listener
118119
if "event" in event_data:
119120
event_type = event_data["event"]["type"]
120-
self.emitter.emit(event_type, event_data)
121+
event_args = [event_data]
122+
123+
listeners = self.emitter.listeners(event_type)
124+
if listeners:
125+
argspec = inspect.getargspec(listeners[0])
126+
if len(argspec[0]) == 2:
127+
event_args = [event_data, request]
128+
129+
self.emitter.emit(event_type, *event_args)
121130
response = make_response("", 200)
122131
response.headers['X-Slack-Powered-By'] = self.package_info
123132
return response

tests/test_events.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,31 @@ def event_handler(event_data):
2929
assert res.status_code == 200
3030

3131
assert test_event_emission.event_handled
32+
33+
def test_event_emission_with_request(adapter):
34+
test_event_emission.event_handled = False
35+
36+
# Events should trigger an event
37+
@adapter.on('reaction_added')
38+
def event_handler(event_data, request):
39+
test_event_emission.event_handled = True
40+
assert request.headers['X-Slack-Retry-No'] == '99'
41+
42+
data = pytest.reaction_event_fixture
43+
timestamp = int(time.time())
44+
signature = pytest.create_signature(adapter.signing_secret, timestamp, data)
45+
46+
with adapter.server.test_client() as client:
47+
res = client.post(
48+
'/slack/events',
49+
data=data,
50+
content_type='application/json',
51+
headers={
52+
'X-Slack-Request-Timestamp': timestamp,
53+
'X-Slack-Retry-No': '99',
54+
'X-Slack-Signature': signature
55+
}
56+
)
57+
assert res.status_code == 200
58+
59+
assert test_event_emission.event_handled

0 commit comments

Comments
 (0)