diff options
author | 2019-05-28 18:36:49 -0700 | |
---|---|---|
committer | 2019-05-28 21:56:14 -0700 | |
commit | 9f4f7eccafe48a84ba055e02ab9c96d8590193c1 (patch) | |
tree | c4c7e2c864e4cef8cd042f1bc0fdc6b4d421baba | |
parent | Replace flask dependency with falcon (diff) |
Create falcon API
-rw-r--r-- | Pipfile | 2 | ||||
-rw-r--r-- | snekbox/api/__init__.py | 0 | ||||
-rw-r--r-- | snekbox/api/app.py | 6 | ||||
-rw-r--r-- | snekbox/api/resources/__init__.py | 3 | ||||
-rw-r--r-- | snekbox/api/resources/eval.py | 26 | ||||
-rw-r--r-- | snekbox/site/snekapp.py | 35 | ||||
-rw-r--r-- | snekbox/site/templates/index.html | 14 | ||||
-rw-r--r-- | snekbox/site/templates/result.html | 9 |
8 files changed, 36 insertions, 59 deletions
@@ -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 - - [email protected]('/') -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> |