X Tutup
Skip to content

Commit 3cf2e86

Browse files
authored
Remove aiohttp dependency from required ones (slackapi#27)
* Remove slackclient dependency * Remove aiohttp dependency from App and fix a few bugs * Fix CI builds
1 parent 119ae11 commit 3cf2e86

File tree

99 files changed

+5603
-844
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+5603
-844
lines changed

.travis.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,9 @@ python:
99
install:
1010
- python setup.py install
1111
script:
12-
- python setup.py test
12+
- pip install "pytest>=5,<6"
13+
- pytest tests/scenario_tests/
14+
- pip install "pytest-asyncio<1"
15+
- pip install "aiohttp>=3,<4"
16+
- pytest tests/scenario_tests_async/
17+
- python setup.py test

samples/app.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
logging.basicConfig(level=logging.DEBUG)
1212

1313
from slack_bolt import App
14-
from slack_bolt.kwargs_injection import Args
15-
from slack_sdk import WebClient
1614

1715
app = App(process_before_response=True)
1816

@@ -23,10 +21,11 @@ def log_request(logger, payload, next):
2321
return next()
2422

2523

26-
@app.command("/bolt-py-proto-111") # or app.command(re.compile(r"/bolt-.+"))(test_command)
27-
def test_command(args: Args):
28-
args.logger.info(args.payload)
29-
respond, ack = args.respond, args.ack
24+
@app.command("/hello-bolt-python")
25+
# or app.command(re.compile(r"/hello-.+"))(test_command)
26+
def test_command(payload, respond, client, ack, logger):
27+
logger.info(payload)
28+
ack("Thanks!")
3029

3130
respond(blocks=[
3231
{
@@ -47,13 +46,7 @@ def test_command(args: Args):
4746
}
4847
}
4948
])
50-
ack("thanks!")
51-
5249

53-
@app.shortcut("test-shortcut")
54-
def test_shortcut(ack, client: WebClient, logger, payload):
55-
logger.info(payload)
56-
ack()
5750
res = client.views_open(
5851
trigger_id=payload["trigger_id"],
5952
view={
@@ -102,10 +95,9 @@ def button_click(logger, payload, ack, respond):
10295

10396

10497
@app.event("app_mention")
105-
def event_test(ack, payload, say, logger):
98+
def event_test(payload, say, logger):
10699
logger.info(payload)
107100
say("What's up?")
108-
return ack()
109101

110102

111103
@app.message("test")

samples/async_app.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
logging.basicConfig(level=logging.DEBUG)
1111

12-
from slack_bolt import AsyncApp
12+
from slack_bolt.async_app import AsyncApp
1313

1414
app = AsyncApp()
1515

@@ -26,6 +26,12 @@ async def event_test(payload, say, logger):
2626
await say("What's up?")
2727

2828

29+
@app.command("/hello-bolt-python")
30+
# or app.command(re.compile(r"/hello-.+"))(test_command)
31+
async def command(ack):
32+
await ack("Thanks!")
33+
34+
2935
if __name__ == "__main__":
3036
app.start(3000)
3137

samples/aws_chalice/app.py

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1-
# ------------------------------------------------
2-
# instead of slack_bolt in requirements.txt
3-
import sys
4-
5-
sys.path.insert(1, "latest_slack_bolt")
6-
# ------------------------------------------------
7-
81
import logging
2+
import time
3+
94
from chalice import Chalice, Response
5+
106
from slack_bolt import App
117
from slack_bolt.adapter.aws_lambda.chalice_handler import ChaliceSlackRequestHandler
8+
from slack_bolt.adapter.aws_lambda.lambda_s3_oauth_flow import LambdaS3OAuthFlow
129

1310
# process_before_response must be True when running on FaaS
14-
bolt_app = App(process_before_response=True)
11+
bolt_app = App(
12+
process_before_response=True,
13+
authorization_test_enabled=False,
14+
oauth_flow=LambdaS3OAuthFlow(
15+
install_path="/api/slack/install",
16+
redirect_uri_path="/api/slack/oauth_redirect",
17+
),
18+
)
1519

1620

1721
@bolt_app.event("app_mention")
@@ -20,22 +24,41 @@ def handle_app_mentions(payload, say, logger):
2024
say("What's up? I'm a Chalice app :wave:")
2125

2226

27+
@bolt_app.command("/hello-bolt-python-chalice")
28+
def respond_to_slack_within_3_seconds(ack):
29+
ack("Thanks!")
30+
31+
2332
ChaliceSlackRequestHandler.clear_all_log_handlers()
2433
logging.basicConfig(format='%(asctime)s %(message)s', level=logging.DEBUG)
2534

2635
# Don't change this variable name "app"
2736
app = Chalice(app_name="bolt-python-chalice")
28-
slack_handler = ChaliceSlackRequestHandler(app=bolt_app)
37+
slack_handler = ChaliceSlackRequestHandler(app=bolt_app, chalice=app)
2938

3039

31-
@app.route("/slack/events", methods=["POST"])
40+
@app.route(
41+
"/slack/events",
42+
methods=["POST"],
43+
content_types=["application/x-www-form-urlencoded", "application/json"],
44+
)
3245
def events() -> Response:
3346
return slack_handler.handle(app.current_request)
3447

48+
49+
@app.route("/slack/install", methods=["GET"])
50+
def install() -> Response:
51+
return slack_handler.handle(app.current_request)
52+
53+
54+
@app.route("/slack/oauth_redirect", methods=["GET"])
55+
def oauth_redirect() -> Response:
56+
return slack_handler.handle(app.current_request)
57+
3558
# configure aws credentials properly
3659
# pip install -r requirements.txt
3760
# edit .chalice/config.json
38-
# rm -rf vendor/latest_slack_bolt && cp -pr ../../src vendor/latest_slack_bolt
61+
# rm -rf vendor/slack_* && cp -pr ../../src/* vendor/
3962
# chalice deploy
4063

4164
# for local dev

samples/aws_chalice/deploy.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#!/bin/bash
22

33
# configure aws credentials properly
4+
pip install -U chalice click boto3
45
pip install -r requirements.txt
56
# edit .chalice/config.json
6-
rm -rf vendor/latest_slack_bolt && cp -pr ../../src vendor/latest_slack_bolt
7+
rm -rf vendor/slack_* && cp -pr ../../src vendor
78
chalice deploy

samples/aws_chalice/oauth_app.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
1-
# ------------------------------------------------
2-
# instead of slack_bolt in requirements.txt
3-
import sys
4-
5-
sys.path.insert(1, "latest_slack_bolt")
6-
# ------------------------------------------------
7-
81
import logging
2+
93
from chalice import Chalice, Response
4+
105
from slack_bolt import App
116
from slack_bolt.adapter.aws_lambda.chalice_handler import ChaliceSlackRequestHandler
127
from slack_bolt.adapter.aws_lambda.lambda_s3_oauth_flow import LambdaS3OAuthFlow
138

149
# process_before_response must be True when running on FaaS
1510
bolt_app = App(
1611
process_before_response=True,
12+
authorization_test_enabled=False,
1713
oauth_flow=LambdaS3OAuthFlow(
1814
install_path="/api/slack/install",
1915
redirect_uri_path="/api/slack/oauth_redirect",
@@ -27,15 +23,24 @@ def handle_app_mentions(payload, say, logger):
2723
say("What's up? I'm a Chalice app :wave:")
2824

2925

26+
@bolt_app.command("/hello-bolt-python-chalice")
27+
def respond_to_slack_within_3_seconds(ack):
28+
ack("Thanks!")
29+
30+
3031
ChaliceSlackRequestHandler.clear_all_log_handlers()
3132
logging.basicConfig(format='%(asctime)s %(message)s', level=logging.DEBUG)
3233

3334
# Don't change this variable name "app"
3435
app = Chalice(app_name="bolt-python-chalice")
35-
slack_handler = ChaliceSlackRequestHandler(app=bolt_app)
36+
slack_handler = ChaliceSlackRequestHandler(app=bolt_app, chalice=app)
3637

3738

38-
@app.route("/slack/events", methods=["POST"])
39+
@app.route(
40+
"/slack/events",
41+
methods=["POST"],
42+
content_types=["application/x-www-form-urlencoded", "application/json"],
43+
)
3944
def events() -> Response:
4045
return slack_handler.handle(app.current_request)
4146

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
chalice>=1,<2
2-
click>=7,<8
3-
slackclient>=2,<3
4-
boto3==1.4.4
1+
#slackclient>=2,<3

samples/aws_chalice/simple_app.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
1-
# ------------------------------------------------
2-
# instead of slack_bolt in requirements.txt
3-
import sys
4-
5-
sys.path.insert(1, "latest_slack_bolt")
6-
# ------------------------------------------------
7-
81
import logging
2+
import time
3+
94
from chalice import Chalice, Response
105
from slack_bolt import App
116
from slack_bolt.adapter.aws_lambda.chalice_handler import ChaliceSlackRequestHandler
@@ -25,10 +20,32 @@ def handle_app_mentions(payload, say, logger):
2520

2621
# Don't change this variable name "app"
2722
app = Chalice(app_name="bolt-python-chalice")
28-
slack_handler = ChaliceSlackRequestHandler(app=bolt_app)
23+
slack_handler = ChaliceSlackRequestHandler(app=bolt_app, chalice=app)
24+
25+
26+
def respond_to_slack_within_3_seconds(ack):
27+
# This method is for synchronous communication with the Slack API server
28+
ack("Thanks!")
29+
30+
31+
def can_be_long(say):
32+
# This can be executed in a thread, asyncio's Future, a new AWS lambda function
33+
# ack() is not allowed here
34+
time.sleep(5)
35+
say("I'm done!")
36+
37+
38+
bolt_app.command("/hello-bolt-python-chalice")(
39+
ack=respond_to_slack_within_3_seconds,
40+
subsequent=[can_be_long],
41+
)
2942

3043

31-
@app.route("/slack/events", methods=["POST"])
44+
@app.route(
45+
"/slack/events",
46+
methods=["POST"],
47+
content_types=["application/x-www-form-urlencoded", "application/json"],
48+
)
3249
def events() -> Response:
3350
return slack_handler.handle(app.current_request)
3451

samples/aws_lambda/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
latest_slack_bolt/
1+
vendor/

samples/aws_lambda/aws_lambda.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
# instead of slack_bolt in requirements.txt
33
import sys
44

5-
sys.path.insert(1, "latest_slack_bolt")
5+
sys.path.insert(1, "vendor")
66
# ------------------------------------------------
77

88
import logging
9+
910
from slack_bolt import App
1011
from slack_bolt.adapter.aws_lambda import SlackRequestHandler
1112

@@ -19,6 +20,11 @@ def handle_app_mentions(payload, say, logger):
1920
say("What's up?")
2021

2122

23+
@app.command("/hello-bolt-python-lambda")
24+
def respond_to_slack_within_3_seconds(ack):
25+
ack("Thanks!")
26+
27+
2228
SlackRequestHandler.clear_all_log_handlers()
2329
logging.basicConfig(format='%(asctime)s %(message)s', level=logging.DEBUG)
2430

@@ -30,6 +36,6 @@ def handler(event, context):
3036
# export SLACK_SIGNING_SECRET=***
3137
# export SLACK_BOT_TOKEN=xoxb-***
3238

33-
# rm -rf latest_slack_bolt && cp -pr ../../src latest_slack_bolt
39+
# rm -rf vendor && cp -pr ../../src/* vendor/
3440
# pip install python-lambda
3541
# lambda deploy --config-file aws_lambda_config.yaml --requirements requirements.txt

0 commit comments

Comments
 (0)
X Tutup