about summary refs log tree commit diff
path: root/uploader/flask_extensions.py
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/flask_extensions.py')
-rw-r--r--uploader/flask_extensions.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/uploader/flask_extensions.py b/uploader/flask_extensions.py
new file mode 100644
index 0000000..83d25aa
--- /dev/null
+++ b/uploader/flask_extensions.py
@@ -0,0 +1,51 @@
+"""Custom extensions to the default flask functions/classes."""
+import logging
+from typing import Any, Optional
+
+from flask import (
+    request,
+    current_app as app,
+    url_for as flask_url_for,
+    render_template as flask_render_template)
+
+logger = logging.getLogger(__name__)
+
+
+def __fetch_flags__():
+    flags = {}
+    for flag in app.config["FEATURE_FLAGS_HTTP"]:
+        flag_value = (request.args.get(flag) or request.form.get(flag) or "").strip()
+        if bool(flag_value):
+            flags[flag] = flag_value
+            continue
+        continue
+    logger.debug("HTTP FEATURE FLAGS: %s", flags)
+    return flags
+
+
+def url_for(
+        endpoint: str,
+        _anchor: Optional[str] = None,
+        _method: Optional[str] = None,
+        _scheme: Optional[str] = None,
+        _external: Optional[bool] = None,
+        **values: Any) -> str:
+    """Extension to flask's `url_for` function."""
+    logger.debug("other variables: %s", values)
+    return flask_url_for(endpoint=endpoint,
+                         _anchor=_anchor,
+                         _method=_method,
+                         _scheme=_scheme,
+                         _external=_external,
+                         **values,
+                         **__fetch_flags__())
+
+
+def render_template(template_name_or_list, **context: Any) -> str:
+    """Extend flask's `render_template` function"""
+    return flask_render_template(
+        template_name_or_list,
+        **{
+            **context,
+            **__fetch_flags__() # override any flag values
+        })