Skip to content

Commit dd2c2b8

Browse files
committed
sirbot: readthedocs
1 parent ea67788 commit dd2c2b8

File tree

4 files changed

+55
-5
lines changed

4 files changed

+55
-5
lines changed

pyslackersweb/sirbot/__init__.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from aiohttp import web
22

3-
from .. import settings
4-
from .views import routes # , on_oauth2_login
3+
from .views import routes
54

65

76
async def app_factory() -> web.Application:
@@ -10,10 +9,7 @@ async def app_factory() -> web.Application:
109
client_session=None, # populated via parent app signal
1110
redis=None, # populated via parent app signal
1211
scheduler=None, # populated via parent app signal
13-
slack_invite_token=settings.SLACK_INVITE_TOKEN,
14-
slack_token=settings.SLACK_TOKEN,
1512
)
1613

1714
sirbot.add_routes(routes)
18-
1915
return sirbot

pyslackersweb/sirbot/settings.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import os
2+
3+
# production
4+
READTHEDOCS_NOTIFICATION_CHANNEL = "community_projects"
5+
6+
# Development
7+
if os.environ.get("PLATFORM_BRANCH") != "master":
8+
READTHEDOCS_NOTIFICATION_CHANNEL = "general"

pyslackersweb/sirbot/views.py

+22
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
11
import logging
22

33
from aiohttp import web
4+
from slack import methods
5+
from slack.events import Message
46

57
from pyslackersweb.util.log import ContextAwareLoggerAdapter
68

9+
from . import settings
710

811
logger = ContextAwareLoggerAdapter(logging.getLogger(__name__))
912

1013
routes = web.RouteTableDef()
14+
15+
16+
@routes.view("/readthedocs", name="readthedocs")
17+
class ReadTheDocsView(web.View):
18+
async def post(self):
19+
payload = await self.request.json()
20+
21+
project = payload.get("name")
22+
if not project:
23+
return web.Response(status=400)
24+
25+
logger.debug("Incoming readthedocs notification: %s", payload)
26+
27+
msg = Message()
28+
msg["channel"] = settings.READTHEDOCS_NOTIFICATION_CHANNEL
29+
msg["text"] = f"""Building of {project} documentation failed ! :cry:"""
30+
await self.request.app["slack_client"].query(methods.CHAT_POST_MESSAGE, data=msg)
31+
32+
return web.Response(status=200)

tests/test_sirbot.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from slack import methods
2+
3+
from pyslackersweb.sirbot import settings
4+
5+
6+
async def test_readthedocs_notification(client):
7+
r = await client.post("/bot/readthedocs", json={"name": "pyslackers/website"})
8+
assert r.status == 200
9+
10+
# Assert we send a message to slack
11+
client.app["slack_client"]._request.assert_called_once()
12+
assert methods.CHAT_POST_MESSAGE.value[0] in client.app["slack_client"]._request.call_args.args
13+
assert (
14+
settings.READTHEDOCS_NOTIFICATION_CHANNEL
15+
in client.app["slack_client"]._request.call_args.args[3]
16+
)
17+
18+
19+
async def test_readthedocs_notification_missing_name(client):
20+
r = await client.post("/bot/readthedocs", json={})
21+
assert r.status == 400
22+
23+
# Assert we did not send a message to slack
24+
assert not client.app["slack_client"]._request.called

0 commit comments

Comments
 (0)