This repository was archived by the owner on Nov 23, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfstaps.py
More file actions
106 lines (85 loc) · 3.14 KB
/
fstaps.py
File metadata and controls
106 lines (85 loc) · 3.14 KB
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
from flask import Flask, render_template, request, url_for, redirect
import datetime
import inflect
import yaml
DATAFILE='fstaps.yaml'
app = Flask(__name__)
class Tap(object):
def __init__(self, brewery = '', name = '', style = None, abv = None, date_tapped = None):
self.brewery = brewery
self.name = name
self.style = style
self.abv = abv
self.date_tapped = date_tapped
def __repr__(self):
return "%s %s (%s), %s abv, tapped on %s" % (self.brewery, self.name, self.style, self.abv, self.date_tapped)
def get_index(self, max):
return (hash(self.name) % max) + 1
def get_color_index(self, max):
return (hash("%s%s%s" %(self.name, self.brewery, self.abv)) % max) + 1
def nice_tap_date(self):
if self.date_tapped is None:
return None
d = datetime.datetime.strptime(self.date_tapped, "%Y-%m-%d")
month_name = d.strftime("%b")
return "%s %s" % (month_name, inflect.engine().ordinal(d.day))
def to_dict(self):
return { 'brewery': self.brewery, 'name': self.name, 'style': self.style, 'abv': self.abv, 'date_tapped': self.date_tapped }
@staticmethod
def from_dict(data):
return Tap(brewery = data['brewery'], name = data['name'], style = data['style'], abv = data['abv'], date_tapped = data['date_tapped'])
def to_dicts(taps):
return { k: map(lambda x: x.to_dict(), v) for k,v in taps.iteritems() }
def save(data, filename):
stream = file(filename, 'w')
yaml.safe_dump(data, stream)
def load(filename):
stream = file(filename, 'r')
return yaml.load(stream)
@app.route('/')
def tap_list():
raw_data = load(DATAFILE)
bartaps= { k: map(lambda x: Tap.from_dict(x), v) for k, v in raw_data.iteritems() }
return render_template('fstaps.html', bars=bartaps)
@app.route('/downstairs')
def downstairs():
return single_bar_render('downstairs', 'downstairs')
@app.route('/kitchen')
def kitchen():
return single_bar_render('downstairs', 'kitchen')
@app.route('/upstairs')
def upstairs():
return single_bar_render('upstairs', 'upstairs')
@app.route('/sprucegoose')
def sprucegoose():
return single_bar_render('upstairs', 'Spruce Goose')
@app.route('/tenforward')
def tenforward():
return single_bar_render('upstairs', 'Ten Forward')
def single_bar_render(which_bar, alias):
if not alias:
alias = which_bar
raw_data = load(DATAFILE)
bartaps= { k: map(lambda x: Tap.from_dict(x), v) for k, v in raw_data.iteritems() }
return render_template('fstaps.html', bars={alias: bartaps[which_bar]})
@app.route('/edit', methods=['POST'])
def edit_tap():
raw_data = load(DATAFILE)
bartaps= { k: map(lambda x: Tap.from_dict(x), v) for k, v in raw_data.iteritems() }
barname = request.form['barname']
index = int(request.form['index']) - 1
new_tap = new_tap_from_request()
bartaps[barname][index] = new_tap
print to_dicts(bartaps)
save(to_dicts(bartaps), DATAFILE)
return redirect('/')
def new_tap_from_request():
name = request.form['name']
brewery = request.form['brewery']
style = request.form['style']
abv = request.form['abv']
date_tapped = request.form['date_tapped']
return Tap(name=name, brewery=brewery, style=style, abv=abv, date_tapped=date_tapped)
if __name__ == '__main__':
debug = True
app.run(host='0.0.0.0', port=80, debug = debug)