view mamba/forest.py @ 330:a2724d0078d8

Mamba in a flask.
author Simon Cross <hodgestar@gmail.com>
date Fri, 16 Sep 2011 20:40:48 +0200
parents af947a20c212
children 5456db312f7f
line wrap: on
line source

"""Where mamba's hang out with each other."""

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)


@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()


@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__":
    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)