summaryrefslogtreecommitdiffstats
path: root/app.py
blob: 6b96caefcd2e27ccb414c334a8339f6173974b74 (plain)
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)