From ae4352068ef6f3e014be6695cbddcf914013fd1b Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 12 Jul 2020 20:10:19 +0100 Subject: Add tag filter list to package page --- app/utils.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'app/utils.py') diff --git a/app/utils.py b/app/utils.py index cc338b4..38f7ccc 100644 --- a/app/utils.py +++ b/app/utils.py @@ -22,6 +22,7 @@ from .models import * from . import app import random, string, os, imghdr from urllib.parse import urljoin +from werkzeug.datastructures import MultiDict # These are given to Jinja in template_filters.py @@ -33,9 +34,26 @@ def abs_url(path): return urljoin(app.config["BASE_URL"], path) def url_set_query(**kwargs): - args = dict(request.args) - args.update(kwargs) - return url_for(request.endpoint, **args) + args = MultiDict(request.args) + + for key, value in kwargs.items(): + if key == "_add": + for key2, value_to_add in value.items(): + values = set(args.getlist(key2)) + values.add(value_to_add) + args.setlist(key2, list(values)) + elif key == "_remove": + for key2, value_to_remove in value.items(): + values = set(args.getlist(key2)) + values.discard(value_to_remove) + args.setlist(key2, list(values)) + else: + args.setlist(key, [ value ]) + + + dargs = dict(args.lists()) + + return url_for(request.endpoint, **dargs) def get_int_or_abort(v, default=None): if v is None: -- cgit v1.2.3