diff options
Diffstat (limited to 'uploader/flask_extensions.py')
| -rw-r--r-- | uploader/flask_extensions.py | 51 |
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 + }) |
