diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-07-12 20:10:19 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-07-12 20:10:19 +0100 |
commit | ae4352068ef6f3e014be6695cbddcf914013fd1b (patch) | |
tree | 09cfc248eeb1e21dfd32febf553f62b9687fd9e5 /app/utils.py | |
parent | 2faa0e42195fdf46ff6e647c250da7d438798c59 (diff) | |
download | cheatdb-ae4352068ef6f3e014be6695cbddcf914013fd1b.tar.xz |
Add tag filter list to package page
Diffstat (limited to 'app/utils.py')
-rw-r--r-- | app/utils.py | 24 |
1 files changed, 21 insertions, 3 deletions
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: |