diff --git a/environments/python3/Dockerfile b/environments/python3/Dockerfile index 3f6c9fc8..b04d09be 100644 --- a/environments/python3/Dockerfile +++ b/environments/python3/Dockerfile @@ -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"] + diff --git a/environments/python3/requirements.txt b/environments/python3/requirements.txt index e69de29b..9f85444c 100644 --- a/environments/python3/requirements.txt +++ b/environments/python3/requirements.txt @@ -0,0 +1 @@ +Flask===0.11.1 diff --git a/environments/python3/server.py b/environments/python3/server.py index 6f42b0ef..4faca621 100644 --- a/environments/python3/server.py +++ b/environments/python3/server.py @@ -1,42 +1,32 @@ #!/usr/bin/env python import imp -from http.server import BaseHTTPRequestHandler, HTTPServer -# -# Load the file. -# +from flask import Flask +from flask import request +from flask import abort + +app = Flask(__name__) + codepath = '/userfunc/user' + userfunc = None -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 +@app.route('/specialize', methods=['POST']) +def load(): + global userfunc + userfunc = (imp.load_source('user', codepath)).main + return "" - # GET - def do_GET(self): - global userfunc - try: - print("GET request") - message = userfunc(None) - self.send_response(200) - self.end_headers() - self.wfile.write(bytes(message, "utf8")) - return - except: - self.send_response(500) - self.end_headers() +@app.route('/', methods=['GET', 'POST', 'PUT', 'HEAD', 'OPTIONS', 'DELETE']) +def f(): + if userfunc == None: + print("Generic container: no requests supported") + abort(500) + return userfunc() -def run(): - print('starting server...') - server_address = ('0.0.0.0', 8888) - httpd = HTTPServer(server_address, testHTTPServer_RequestHandler) - httpd.serve_forever() - - -run() +# +# TODO: this starts the built-in server, which isn't the most +# efficient. We should use something better. +# +app.run(host='0.0.0.0', port='8888') diff --git a/examples/python/hello.py b/examples/python/hello.py index 31fe7bde..2c3a3088 100644 --- a/examples/python/hello.py +++ b/examples/python/hello.py @@ -1,2 +1,2 @@ -def main(context): - return "Hello, world!" +def main(): + return "Hello, world!\n"