changeset 330:a2724d0078d8

Mamba in a flask.
author Simon Cross <hodgestar@gmail.com>
date Fri, 16 Sep 2011 20:40:48 +0200
parents 172eac039c91
children 0c25bca380de
files mamba/forest.py
diffstat 1 files changed, 54 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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/<levelname>")
+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/<levelname>", 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 <port> <level folder>"
+        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)