about summary refs log tree commit diff
path: root/uploader/flask_extensions.py
blob: 83d25aabdd97797d5894a672b3f7ac0c137a354c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
        })