Skip to content

Commit

Permalink
Use tornado instead of simple http and websockets
Browse files Browse the repository at this point in the history
Signed-off-by: Ygal Blum <[email protected]>
  • Loading branch information
ygalblum committed Jul 3, 2024
1 parent e110c17 commit 853cb6f
Show file tree
Hide file tree
Showing 9 changed files with 182 additions and 224 deletions.
101 changes: 20 additions & 81 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ readme = "README.md"

[tool.poetry.dependencies]
python = "^3.11"
websockets = "^12.0"
injector = "^0.21.0"
pydantic = "^2.7.4"
envyaml = "^1.10.211231"
tornado = "^6.4.1"


[build-system]
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
websockets==12.0
injector==0.21.0
pydantic==2.7.4
envyaml==1.10.211231
tornado==6.4.1
17 changes: 7 additions & 10 deletions slack_server_mock/__main__.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
""" Application """
import asyncio
import tornado

from slack_server_mock.servers.http.server import start_http_server, stop_http_server
from slack_server_mock.servers.websocket.server import start_websocket_server
from slack_server_mock.servers.websocket.server import start_websocket_server, stop_websocket_server


loop = asyncio.new_event_loop()
websocket_server_task = loop.create_task(start_websocket_server())
loop.run_in_executor(None, start_http_server)
start_websocket_server()
start_http_server()
try:
loop.run_forever()
tornado.ioloop.IOLoop.current().start()
except KeyboardInterrupt:
print("Shutting down servers")
print("Shutting down")
finally:
websocket_server_task.cancel()
loop.run_until_complete(websocket_server_task)
stop_http_server()
loop.close()
stop_websocket_server()
20 changes: 6 additions & 14 deletions slack_server_mock/actor/actor.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
""" Slack Actor """
import asyncio
import json

from injector import inject, singleton
from websockets.server import WebSocketServerProtocol
from tornado.websocket import WebSocketHandler

from slack_server_mock.settings.settings import Settings

Expand All @@ -18,10 +17,10 @@ def __init__(self, settings: Settings) -> None:
self._counter = 0
self._websocket = None

async def app_connected(self, websocket: WebSocketServerProtocol):
def app_connected(self, websocket: WebSocketHandler):
""" Notify the actor that the application connected """
self._websocket = websocket
await self._websocket.send(self._wrap_message_with_envelope(self._conversation[0]['question']))
self._websocket.write_message(self._wrap_message_with_envelope(self._conversation[0]['question']))

def message_received(self, msg: str):
""" Notify the actor that the application sent a message """
Expand All @@ -32,19 +31,12 @@ def message_received(self, msg: str):
self._conversation[self._counter]['answer'] = msg
self._counter += 1
if self._counter < len(self._conversation):
self._send_response()
self._websocket.write_message(
self._wrap_message_with_envelope(self._conversation[self._counter]['question'])
)
else:
self._dump_conversation()

def _send_response(self):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(self._do_send_response())
loop.close()

async def _do_send_response(self):
await self._websocket.send(self._wrap_message_with_envelope(self._conversation[self._counter]['question']))

def _dump_conversation(self):
with open(self._output, "+w", encoding="utf-8") as f:
json.dump(self._conversation, f)
Expand Down
Loading

0 comments on commit 853cb6f

Please sign in to comment.