Use Flask for Python environment
Flask gives us easy routing support, and simple interface for getting at request data.
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
FROM python:3-onbuild
|
FROM ubuntu:16.04
|
||||||
CMD [ "python", "./server.py" ]
|
|
||||||
EXPOSE 8888
|
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"]
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Flask===0.11.1
|
||||||
|
|||||||
@@ -1,47 +1,32 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import imp
|
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'
|
codepath = '/userfunc/user'
|
||||||
|
|
||||||
userfunc = None
|
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:
|
app.run(host='0.0.0.0', port='8888')
|
||||||
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()
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
def main(context):
|
def main():
|
||||||
return "Hello, world!"
|
return "Hello, world!\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user