summaryrefslogtreecommitdiffstats
path: root/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'app.py')
-rw-r--r--app.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..7d0356d
--- /dev/null
+++ b/app.py
@@ -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)