1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
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', 'zip', 'gs', 'gz' ])
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):
get_files = lambda files: map(
lambda x: (x[0], x[1], fit.get_tags_for_file(x[1])),
files
)
if tag:
params = tag.split('/')
return render_template(
'files.html',
files=get_files(fit.get_files_for_tags(params)),
tags=params
)
return render_template(
'files.html',
files=get_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)
|