]> git.lizzy.rs Git - cheatdb.git/blobdiff - app/utils.py
Restrict seeing the email addresses of others to admins only
[cheatdb.git] / app / utils.py
index 5960fa66ca18a575de463f2c2138242ab7e8bb87..38f7ccc7a79069cf30772395a680851a3312df9e 100644 (file)
@@ -22,6 +22,9 @@ 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
 
 def abs_url_for(path, **kwargs):
        scheme = "https" if app.config["BASE_URL"][:5] == "https" else "http"
@@ -30,6 +33,28 @@ def abs_url_for(path, **kwargs):
 def abs_url(path):
        return urljoin(app.config["BASE_URL"], path)
 
+def url_set_query(**kwargs):
+       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:
                return default