diff options
author | 2018-05-25 14:21:10 +0200 | |
---|---|---|
committer | 2018-05-25 14:21:10 +0200 | |
commit | 85dbc20a80a2b4c233708be1460da7909e205388 (patch) | |
tree | 36d98fca1d490ffe4af0b07defe979389fbe5390 | |
parent | generate new queue based on session id to lock user to their own event chain (diff) |
lint
-rw-r--r-- | Pipfile | 2 | ||||
-rw-r--r-- | Pipfile.lock | 31 | ||||
-rw-r--r-- | config.py | 4 | ||||
-rw-r--r-- | rmq/consumer.py | 11 | ||||
-rw-r--r-- | rmq/publisher.py | 21 | ||||
-rw-r--r-- | snekbox.py | 23 | ||||
-rw-r--r-- | snekweb.py | 30 |
7 files changed, 87 insertions, 35 deletions
@@ -13,11 +13,13 @@ flask-sockets = "*" gevent = "==1.2.2" gevent-websocket = "*" gunicorn = "*" +"flake8" = "*" [requires] python_version = "3.6" [scripts] +lint = "flake8" snekbox = "python snekbox.py" snekweb = "gunicorn -w 1 -b 0.0.0.0:5000 -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker snekweb:app" buildbox = "docker build -t pythondiscord/snekbox:latest -f docker/Dockerfile ." diff --git a/Pipfile.lock b/Pipfile.lock index c580d4a..7bb08b6 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "e371feaf8cfbc6df9050701afd2f1c9be77630841f833962845421542640e825" + "sha256": "293e67cbad98e54a08d90526cb01eb524040819f89b942beff3425d7442d0ba9" }, "pipfile-spec": 6, "requires": { @@ -62,6 +62,14 @@ ], "version": "==0.2.3" }, + "flake8": { + "hashes": [ + "sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0", + "sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37" + ], + "index": "pypi", + "version": "==3.5.0" + }, "flask": { "hashes": [ "sha256:2271c0070dbcb5275fad4a82e29f23ab92682dc45f9dfbc22c02ba9b9322ce48", @@ -177,6 +185,27 @@ ], "version": "==1.0" }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766", + "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9" + ], + "version": "==2.3.1" + }, + "pyflakes": { + "hashes": [ + "sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f", + "sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805" + ], + "version": "==1.6.0" + }, "requests": { "hashes": [ "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", @@ -1,5 +1,6 @@ import os + def attempt_automatically_finding_the_ip_of_rmq(): try: import docker @@ -7,9 +8,10 @@ def attempt_automatically_finding_the_ip_of_rmq(): containers = client.containers.get('snekbox_pdrmq_1') HOST = list(containers.attrs.get('NetworkSettings').get('Networks').values())[0]['IPAddress'] return HOST - except: + except Exception: return '172.17.0.2' + USERNAME = 'guest' PASSWORD = 'guest' HOST = os.environ.get('RMQ_HOST', attempt_automatically_finding_the_ip_of_rmq()) diff --git a/rmq/consumer.py b/rmq/consumer.py index 8e1ce2b..2c41e26 100644 --- a/rmq/consumer.py +++ b/rmq/consumer.py @@ -3,7 +3,14 @@ import traceback import pika from pika.exceptions import ConnectionClosed -def consume(username='guest', password='guest', host='localhost', port=5672, queue='', callback=None): + +def consume(username='guest', + password='guest', + host='localhost', + port=5672, + queue='', + callback=None): + while True: credentials = pika.PlainCredentials(username, password) con_params = pika.ConnectionParameters(host, port, '/', credentials) @@ -21,7 +28,7 @@ def consume(username='guest', password='guest', host='localhost', port=5672, que channel.start_consuming() - except: + except Exception: exc = traceback.format_exc() print(exc, flush=True) diff --git a/rmq/publisher.py b/rmq/publisher.py index 4ba9db9..1a9a5cf 100644 --- a/rmq/publisher.py +++ b/rmq/publisher.py @@ -1,6 +1,16 @@ import pika -def publish(message, username='guest', password='guest', host='localhost', port=5672, queue='', routingkey='', exchange='', exchange_type=''): + +def publish(message, + username='guest', + password='guest', + host='localhost', + port=5672, + queue='', + routingkey='', + exchange='', + exchange_type=''): + credentials = pika.PlainCredentials(username, password) connection = pika.BlockingConnection(pika.ConnectionParameters(host, port, '/', credentials)) properties = pika.BasicProperties(content_type='text/plain', delivery_mode=1) @@ -11,10 +21,10 @@ def publish(message, username='guest', password='guest', host='localhost', port= channel.queue_bind(exchange=exchange, queue=queue, routing_key=routingkey) result = channel.basic_publish( - exchange=exchange, - routing_key=routingkey, - body=message, - properties=properties + exchange=exchange, + routing_key=routingkey, + body=message, + properties=properties ) if result: @@ -23,4 +33,3 @@ def publish(message, username='guest', password='guest', host='localhost', port= print("not delivered") connection.close() - @@ -1,23 +1,14 @@ -import traceback import sys -import time -import pika import io import json from rmq.consumer import consume from rmq.publisher import publish -from config import USERNAME -from config import PASSWORD from config import HOST -from config import PORT -from config import EXCHANGE from config import EXCHANGE_TYPE from config import QUEUE -from config import RETURN_QUEUE -from config import RETURN_EXCHANGE -from config import RETURN_ROUTING_KEY + def execute(snippet): old_stdout = sys.stdout @@ -38,15 +29,21 @@ def execute(snippet): def message_handler(ch, method, properties, body): msg = body.decode('utf-8') - # Execute code snippets here print(f"incoming: {msg}", flush=True) snek_msg = json.loads(msg) + for snekid, snekcode in snek_msg.items(): result = execute(snekcode) print(f"outgoing: {result}", flush=True) - publish(result, host=HOST, queue=snekid, routingkey=snekid, exchange=snekid, exchange_type=EXCHANGE_TYPE) + publish(result, + host=HOST, + queue=snekid, + routingkey=snekid, + exchange=snekid, + exchange_type=EXCHANGE_TYPE) + + ch.basic_ack(delivery_tag=method.delivery_tag) - ch.basic_ack(delivery_tag = method.delivery_tag) if __name__ == '__main__': consume(host=HOST, queue=QUEUE, callback=message_handler) @@ -12,11 +12,9 @@ from flask import render_template from flask_sockets import Sockets from config import HOST -from config import PORT from config import EXCHANGE from config import EXCHANGE_TYPE from config import QUEUE -from config import RETURN_QUEUE from config import ROUTING_KEY app = Flask(__name__) @@ -28,6 +26,7 @@ sockets = Sockets(app) def index(): return render_template('index.html') + @sockets.route('/ws/<snekboxid>') def websocket_route(ws, snekboxid): RMQ_queue = queue.Queue(maxsize=0) @@ -35,9 +34,10 @@ def websocket_route(ws, snekboxid): def message_handler(ch, method, properties, body): msg = body.decode('utf-8') RMQ_queue.put(msg) - ch.basic_ack(delivery_tag = method.delivery_tag) + ch.basic_ack(delivery_tag=method.delivery_tag) - consumer = threading.Thread(target=consume, kwargs={'host':HOST, 'queue':snekboxid, 'callback':message_handler}) + consumer_parameters = {'host': HOST, 'queue': snekboxid, 'callback': message_handler} + consumer = threading.Thread(target=consume, kwargs=consumer_parameters) consumer.daemon = True consumer.start() @@ -60,19 +60,25 @@ def websocket_route(ws, snekboxid): while not ws.closed: message = ws.receive() if message: - snek_msg = json.dumps({snekboxid:message}) + snek_msg = json.dumps({snekboxid: message}) print(f"forwarding {snek_msg} to rabbitmq") - publish(snek_msg, host=HOST, queue=QUEUE, routingkey=ROUTING_KEY, exchange=EXCHANGE, exchange_type=EXCHANGE_TYPE) + publish(snek_msg, + host=HOST, + queue=QUEUE, + routingkey=ROUTING_KEY, + exchange=EXCHANGE, + exchange_type=EXCHANGE_TYPE) - except: + except Exception: print(traceback.format_exc()) finally: if not ws.closed: ws.close() -# if __name__ == '__main__': -# from gevent import pywsgi -# from geventwebsocket.handler import WebSocketHandler -# server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler) -# server.serve_forever() + +if __name__ == '__main__': + from gevent import pywsgi + from geventwebsocket.handler import WebSocketHandler + server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler) + server.serve_forever() |