Use Flask for Python environment

Flask gives us easy routing support, and simple interface for getting
at request data.
This commit is contained in:
Soam Vasani
2016-11-19 20:04:46 -08:00
parent 8a9559be1f
commit 640e65f35f
4 changed files with 38 additions and 43 deletions
+12 -3
View File
@@ -1,3 +1,12 @@
FROM python:3-onbuild
CMD [ "python", "./server.py" ]
EXPOSE 8888
FROM ubuntu:16.04
RUN apt-get update -y
RUN apt-get install -y python3 python3-pip python3-dev build-essential
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
ENTRYPOINT ["python3"]
CMD ["server.py"]
+1
View File
@@ -0,0 +1 @@
Flask===0.11.1
+23 -38
View File
@@ -1,47 +1,32 @@
#!/usr/bin/env python
import imp
from http.server import BaseHTTPRequestHandler, HTTPServer
from flask import Flask
from flask import request
from flask import abort
app = Flask(__name__)
codepath = '/userfunc/user'
userfunc = None
@app.route('/specialize', methods=['POST'])
def load():
global userfunc
userfunc = (imp.load_source('user', codepath)).main
return ""
@app.route('/', methods=['GET', 'POST', 'PUT', 'HEAD', 'OPTIONS', 'DELETE'])
def f():
if userfunc == None:
print("Generic container: no requests supported")
abort(500)
return userfunc()
#
# Request context that's passed to user functions
# TODO: this starts the built-in server, which isn't the most
# efficient. We should use something better.
#
class Context:
def __init__(self, handler):
self.handler = handler
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
global userfunc
userfunc = (imp.load_source('user', codepath)).main
self.send_response(200)
self.end_headers()
self.wfile.write(bytes("ok\n", "utf8"))
return
# GET
def do_GET(self):
global userfunc
try:
print("GET request")
ctx = Context(self)
message = userfunc(ctx)
self.send_response(200)
self.end_headers()
self.wfile.write(bytes(message, "utf8"))
return
except:
self.send_response(500)
self.end_headers()
def run():
print('starting server...')
server_address = ('0.0.0.0', 8888)
httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
httpd.serve_forever()
run()
app.run(host='0.0.0.0', port='8888')
+2 -2
View File
@@ -1,2 +1,2 @@
def main(context):
return "Hello, world!"
def main():
return "Hello, world!\n"