view mamba/forest.py @ 496:0c5853bb7a14

Timestamp uncurated level files.
author Simon Cross <hodgestar@gmail.com>
date Sat, 17 Sep 2011 23:02:24 +0200
parents 5456db312f7f
children 91e1a95343b2
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

from datetime import datetime
import os
import sys

app = Flask(__name__)
app.config['LEVEL_FOLDER'] = None  # set later


def path(ctype):
    if ctype == "curated":
        return os.path.join(app.config['LEVEL_FOLDER'], 'curated')
    elif ctype == "uncurated":
        return os.path.join(app.config['LEVEL_FOLDER'], 'uncurated')
    abort(404, "Not found")


def list_levels(folder):
    endl = len(".txt")
    files = [x[:-endl] for x in os.listdir(folder)
             if not x.startswith('.') and x.endswith('.txt')]
    return "\n".join(files)


@app.route("/<ctype>/index")
def index(ctype):
    ctype = path(ctype)
    return list_levels(ctype)


@app.route("/<ctype>/level/<levelname>")
def level(ctype, levelname):
    ctype = path(ctype)
    levelname = "%s.txt" % secure_filename(levelname)
    levelpath = os.path.join(ctype, 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):
    ts = datetime.now().strftime("%Y%m%d.%H%M%S")
    levelname = "%s.%s.txt" % (secure_filename(levelname), ts)
    levelpath = os.path.join(path("uncurated"), 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]
    for ctype in ("curated", "uncurated"):
        folder = os.path.join(level_folder, ctype)
        if not os.path.exists(folder):
            os.makedirs(folder)
        if not os.path.isdir(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)