diff options
Diffstat (limited to 'app.py')
-rw-r--r-- | app.py | 86 |
1 files changed, 86 insertions, 0 deletions
@@ -0,0 +1,86 @@ +import magic + +from fit import Fit +from flask import Flask, render_template, request, flash, redirect, url_for +from werkzeug import secure_filename + + +fit = Fit('static/fit.git') + +app = Flask(__name__) +app.secret_key = 'naidiequ8zies1weed4we6iexood1Bae' + +ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) + + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS + + +@app.route('/files/<oid>') +def show(oid): + data = fit.get_file(oid) + mime = magic.Magic(mime=True) + header = { 'Content-Type' : mime.from_buffer(data[:1024]) } + return data, 200, header + + +@app.route('/search') +def search(): + params = request.args.get('search', '') + tags = '/'.join(params.split(',')) + if tags: + return redirect(url_for('list', tag=tags)) + + return redirect(url_for('list')) + + +@app.route('/all') +@app.route('/tags/<path:tag>') +def list(tag=None): + if tag: + params = tag.split('/') + return render_template( + 'files.html', + files=fit.get_files_for_tags(params), + tags=params + ) + + return render_template( + 'files.html', + files=fit.get_all_files() + ) + + +@app.route('/', methods=['GET', 'POST']) +def index(): + if request.method == 'POST': + + params = request.form['tags'] + tags = params.split(',') if len(params) else [] + + saved_files = [] + for key, upload in request.files.iteritems(): + if upload and allowed_file(upload.filename): + filename = secure_filename(upload.filename) + + git_path = 'files/%s' % filename + + try: + oid = fit.add_file(upload.stream.getvalue(), git_path, tags) + except: + oid = fit.add_file(upload.stream.read(), git_path, tags) + + saved_files.append(url_for('show', oid=oid)) + + flash("File %s saved." % filename) + + return render_template( + 'index.html', + tags=fit.get_all_tags() + ) + + +if __name__ == "__main__": + app.run(debug=True) |