about summary refs log tree commit diff
path: root/uploader/flask_extensions.py
blob: 30fbad77b78432b2846f1b188b2b122a7040d6e0 (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
"""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)

logger = logging.getLogger(__name__)


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."""
    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, other variables: %s", flags, values)
    return flask_url_for(endpoint=endpoint,
                         _anchor=_anchor,
                         _method=_method,
                         _scheme=_scheme,
                         _external=_external,
                         **values,
                         **flags)