aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christopher Baklid <[email protected]>2018-05-25 14:21:10 +0200
committerGravatar Christopher Baklid <[email protected]>2018-05-25 14:21:10 +0200
commit85dbc20a80a2b4c233708be1460da7909e205388 (patch)
tree36d98fca1d490ffe4af0b07defe979389fbe5390
parentgenerate new queue based on session id to lock user to their own event chain (diff)
lint
-rw-r--r--Pipfile2
-rw-r--r--Pipfile.lock31
-rw-r--r--config.py4
-rw-r--r--rmq/consumer.py11
-rw-r--r--rmq/publisher.py21
-rw-r--r--snekbox.py23
-rw-r--r--snekweb.py30
7 files changed, 87 insertions, 35 deletions
diff --git a/Pipfile b/Pipfile
index e8dae92..5417ae3 100644
--- a/Pipfile
+++ b/Pipfile
@@ -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",
diff --git a/config.py b/config.py
index cb428fe..f6ae0f7 100644
--- a/config.py
+++ b/config.py
@@ -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()
-
diff --git a/snekbox.py b/snekbox.py
index 4dfcc48..ee82be8 100644
--- a/snekbox.py
+++ b/snekbox.py
@@ -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)
diff --git a/snekweb.py b/snekweb.py
index ff9f8b4..1c6ea34 100644
--- a/snekweb.py
+++ b/snekweb.py
@@ -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()