summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-18 05:29:59 +0100
committerAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-19 02:15:55 +0100
commit90a8462a48bce1cda4102e37f76b0bf3bb827301 (patch)
tree12ed7092bcf5f42eed1491ed2e4ab6205d0c714b
parent0bfe5fad665a1d75b194a49c8f8f58624a08f478 (diff)
downloadpadlite-teams-90a8462a48bce1cda4102e37f76b0bf3bb827301.tar.gz
padlite-teams-90a8462a48bce1cda4102e37f76b0bf3bb827301.tar.bz2
padlite-teams-90a8462a48bce1cda4102e37f76b0bf3bb827301.zip
filters: backport selectattr, rejectattr
We want to use jinja2 from wheezy and need to backport two template functions.
-rw-r--r--filters.py36
-rw-r--r--views.py1
2 files changed, 37 insertions, 0 deletions
diff --git a/filters.py b/filters.py
new file mode 100644
index 0000000..b8b0d47
--- /dev/null
+++ b/filters.py
@@ -0,0 +1,36 @@
+from app import app
+from jinja2 import contextfilter
+from jinja2.filters import make_attrgetter
+
+@app.template_filter('selectattr')
+@contextfilter
+def do_selectattr(*args, **kwargs):
+ return _select_or_reject(args, kwargs, lambda x: x)
+
+@app.template_filter('rejectattr')
+@contextfilter
+def do_rejectattr(*args, **kwargs):
+ return _select_or_reject(args, kwargs, lambda x: not x)
+
+def _select_or_reject(args, kwargs, modfunc):
+ context = args[0]
+ seq = args[1]
+
+ try:
+ attr = args[2]
+ except LookupError:
+ raise FilterArgumentError('Missing parameter for attribute name')
+ transfunc = make_attrgetter(context.environment, attr)
+
+ try:
+ name = args[3]
+ args = args[4:]
+ func = lambda item: context.environment.call_test(
+ name, item, args, kwargs)
+ except LookupError:
+ func = bool
+
+ if seq:
+ for item in seq:
+ if modfunc(func(transfunc(item))):
+ yield item
diff --git a/views.py b/views.py
index 5df76f8..01dd5c7 100644
--- a/views.py
+++ b/views.py
@@ -5,6 +5,7 @@ from flask_peewee.utils import get_object_or_404
from models import Group, Member
from forms import CreateGroup, DeleteGroup
from utils import templated
+from filters import *
def get_group_or_404(*query):
group = get_object_or_404(Group.select().join(Member),