# HG changeset patch # User Simon Cross # Date 1316198448 -7200 # Node ID a2724d0078d8a3beda97838925926a80de85fa21 # Parent 172eac039c91bd032dddaf5af4e6dabba9a21b7e Mamba in a flask. diff -r 172eac039c91 -r a2724d0078d8 mamba/forest.py --- a/mamba/forest.py Fri Sep 16 20:40:31 2011 +0200 +++ b/mamba/forest.py Fri Sep 16 20:40:48 2011 +0200 @@ -1,21 +1,62 @@ """Where mamba's hang out with each other.""" -from wsgiref.simple_server import make_server +from werkzeug.utils import secure_filename +from flask import Flask, request, abort + +import os +import sys + +app = Flask(__name__) +app.config['LEVEL_FOLDER'] = None # set later + + +@app.route("/index") +def index(): + endl = len(".txt") + files = [x[:-endl] for x in os.listdir(app.config['LEVEL_FOLDER']) + if not x.startswith('.') and x.endswith('.txt')] + return "\n".join(files) -class ForestApp(object): - """Where mamba's hang out and exchange levels.""" +@app.route("/level/") +def level(levelname): + levelname = "%s.txt" % secure_filename(levelname) + levelpath = os.path.join(app.config['LEVEL_FOLDER'], levelname) + if not os.path.isfile(levelpath): + abort(404, "Level not found. Hsss.") + with open(levelpath) as level: + return level.read() + - def __call__(self, environ, start_response): - status = '200 OK' - headers = [('Content-type', 'text/plain')] - start_response(status, headers) - - # The returned object is going to be printed - return ["Hello World"] +@app.route("/save/", methods=['GET', 'POST']) +def save(levelname): + levelname = "%s.txt" % secure_filename(levelname) + levelpath = os.path.join(app.config['LEVEL_FOLDER'], levelname) + if request.method == 'POST': + if os.path.exists(levelpath): + abort(409, "Mamba already resident.") + leveldata = request.form['data'].encode('ascii') + with open(levelpath, 'w') as level: + level.write(leveldata) + return "Ssss." + else: + abort(405, "Post levels here. Hsss.") if __name__ == "__main__": - forest_app = ForestApp() - httpd = make_server('', 8000, forest_app) - httpd.serve_forever() + if len(sys.argv) != 3: + print "Usage: python -m mamba.forest " + sys.exit(1) + + host = '0.0.0.0' + port = int(sys.argv[1]) + level_folder = sys.argv[2] + if not os.path.exists(level_folder): + os.makedirs(level_folder) + if not os.path.isdir(level_folder): + print "Level folder must be a folder." + sys.exit(1) + + app.config['LEVEL_FOLDER'] = level_folder + # app.debug = True + app.run(host=host, port=port)