commit: 866287aefa418043337878676c60ca6469d8ed4b
Author: Mart Raudsepp <leio <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 18 23:45:28 2016 +0000
Commit: Mart Raudsepp <leio <AT> gentoo <DOT> org>
CommitDate: Sun Dec 18 23:45:28 2016 +0000
URL: https://gitweb.gentoo.org/proj/grumpy.git/commit/?id=866287ae
frontend: Implement saving of followed maintainers/projects to cookie
frontend/grumpy.py | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/frontend/grumpy.py b/frontend/grumpy.py
index 7e7a086..62ce9b1 100644
--- a/frontend/grumpy.py
+++ b/frontend/grumpy.py
@@ -1,5 +1,5 @@
-from flask import render_template, request
-from flask_classy import FlaskView
+from flask import current_app, redirect, render_template, request, url_for
+from flask_classy import FlaskView, route
from sqlalchemy.sql import collate
from flask_wtf import FlaskForm
from wtforms import SelectMultipleField, widgets
@@ -23,16 +23,33 @@ class GrumpyView(FlaskView):
return render_template("index.html", categories=categories)
class SetupView(FlaskView):
+ @route('/', methods=['GET', 'POST']) # FIXME: Can we enable POST without
giving a rule override from the automatic, or handle this some other better way
with wtforms setup?
def index(self):
maintainers =
models.Maintainer.query.order_by(collate(models.Maintainer.email,
'NOCASE')).all()
form = FollowSetupForm()
choices = []
+ defaults = []
form_mapping = {}
+ follows = request.cookies.get('follows', '').split()
for maintainer in maintainers:
choices.append((maintainer.id, maintainer.email))
form_mapping[maintainer.id] = maintainer
+ if maintainer.email in follows:
+ defaults.append(maintainer.id)
form.maintainers.choices = choices
+ form.maintainers.default = defaults
+
+ if form.validate_on_submit():
+ followed_maintainers = set()
+ for choice in choices:
+ if choice[0] in form.maintainers.data:
+ followed_maintainers.add(choice[1])
+ response =
current_app.make_response(redirect(url_for('GrumpyView:index')))
+ # FIXME: This will fail with too many following (usually string
value length above 4093); move this to session eventually. If that is delayed,
we could at least make it fit more by omitting @gentoo.org in those cases (and
suffixing it back after cookie read for defaults handling)
+ response.set_cookie('follows', value='
'.join(followed_maintainers))
+ return response
+
form.process()
return render_template("setup.html", mapping=form_mapping, form=form)