aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2019-05-28 18:36:49 -0700
committerGravatar MarkKoz <[email protected]>2019-05-28 21:56:14 -0700
commit9f4f7eccafe48a84ba055e02ab9c96d8590193c1 (patch)
treec4c7e2c864e4cef8cd042f1bc0fdc6b4d421baba
parentReplace flask dependency with falcon (diff)
Create falcon API
-rw-r--r--Pipfile2
-rw-r--r--snekbox/api/__init__.py0
-rw-r--r--snekbox/api/app.py6
-rw-r--r--snekbox/api/resources/__init__.py3
-rw-r--r--snekbox/api/resources/eval.py26
-rw-r--r--snekbox/site/snekapp.py35
-rw-r--r--snekbox/site/templates/index.html14
-rw-r--r--snekbox/site/templates/result.html9
8 files changed, 36 insertions, 59 deletions
diff --git a/Pipfile b/Pipfile
index f04614f..5a7ccc2 100644
--- a/Pipfile
+++ b/Pipfile
@@ -29,7 +29,7 @@ lint = "flake8"
precommit = "pre-commit install"
test = "pytest tests --cov . --cov-report term-missing -v"
report = "pytest tests --cov . --cov-report=html"
-snekbox = "gunicorn -w 2 -b 0.0.0.0:8060 snekbox.snekapp:api"
+snekbox = "gunicorn -w 2 -b 0.0.0.0:8060 snekbox.api.app:api"
buildbox = "docker build -t pythondiscord/snekbox:latest -f docker/Dockerfile ."
pushbox = "docker push pythondiscord/snekbox:latest"
buildboxbase = "docker build -t pythondiscord/snekbox-base:latest -f docker/base.Dockerfile ."
diff --git a/snekbox/api/__init__.py b/snekbox/api/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/snekbox/api/__init__.py
diff --git a/snekbox/api/app.py b/snekbox/api/app.py
new file mode 100644
index 0000000..25539af
--- /dev/null
+++ b/snekbox/api/app.py
@@ -0,0 +1,6 @@
+import falcon
+
+from .resources import EvalResource
+
+api = falcon.API()
+api.add_route("/eval", EvalResource())
diff --git a/snekbox/api/resources/__init__.py b/snekbox/api/resources/__init__.py
new file mode 100644
index 0000000..fe422b8
--- /dev/null
+++ b/snekbox/api/resources/__init__.py
@@ -0,0 +1,3 @@
+from .eval import EvalResource
+
+__all__ = ("EvalResource",)
diff --git a/snekbox/api/resources/eval.py b/snekbox/api/resources/eval.py
new file mode 100644
index 0000000..5558b4f
--- /dev/null
+++ b/snekbox/api/resources/eval.py
@@ -0,0 +1,26 @@
+import logging
+
+import falcon
+
+from snekbox.nsjail import NsJail
+
+log = logging.getLogger(__name__)
+
+
+class EvalResource:
+ def __init__(self):
+ self.nsjail = NsJail()
+
+ def on_post(self, req, resp):
+ code = req.media.get("code")
+
+ try:
+ output = self.nsjail.python3(code)
+ except Exception:
+ log.exception("An exception occurred while trying to process the request")
+ raise falcon.HTTPInternalServerError
+
+ resp.media = {
+ "input": code,
+ "output": output
+ }
diff --git a/snekbox/site/snekapp.py b/snekbox/site/snekapp.py
deleted file mode 100644
index ef96148..0000000
--- a/snekbox/site/snekapp.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from flask import Flask, jsonify, render_template, request
-
-from snekbox.nsjail import NsJail
-
-nsjail = NsJail()
-
-# Load app
-app = Flask(__name__)
-app.use_reloader = False
-
-# Logging
-log = app.logger
-
-
-def index():
- """Return a page with a form for inputting code to be executed."""
- return render_template('index.html')
-
-
[email protected]('/result', methods=["POST", "GET"])
-def result():
- """Execute code and return a page displaying the results."""
- if request.method == "POST":
- code = request.form["Code"]
- output = nsjail.python3(code)
- return render_template('result.html', code=code, result=output)
-
-
[email protected]('/input', methods=["POST"])
-def code_input():
- """Execute code and return the results."""
- body = request.get_json()
- output = nsjail.python3(body["code"])
- return jsonify(input=body["code"], output=output)
diff --git a/snekbox/site/templates/index.html b/snekbox/site/templates/index.html
deleted file mode 100644
index 41980d1..0000000
--- a/snekbox/site/templates/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
- <meta charset="utf-8" />
- <title>snekboxweb</title>
- <body>
- <form action="/result" method="POST">
- <p>Code:<br><textarea name="Code" rows="20" cols="80">
-def sum(a,b):
- return a+b
-print( sum(1,2) )</textarea></p>
- <p><input type="submit" value="Run"></p>
- </form>
- </body>
-</html>
diff --git a/snekbox/site/templates/result.html b/snekbox/site/templates/result.html
deleted file mode 100644
index e339605..0000000
--- a/snekbox/site/templates/result.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html>
- <meta charset="utf-8" />
- <title>snekboxweb</title>
- <body>
- <p>Code Evaluated:<br><pre>{{ code }}</pre></p>
- <p>Results:<br><pre>{{ result }}</pre></p>
- </body>
-</html>