Passed
Push — main ( 7fb18a...baf70b )
by Jochen
04:45
created

byceps.util.templatefilters.separate_thousands()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
"""
2
byceps.util.templatefilters
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
Provide and register custom template filters.
6
7
:Copyright: 2006-2021 Jochen Kupperschmidt
8
:License: Revised BSD (see `LICENSE` file for details)
9
"""
10
11 1
from datetime import datetime
12
13 1
from flask import current_app
14 1
from flask_babel import gettext
15 1
from jinja2 import pass_eval_context
16 1
from jinja2.filters import do_default, do_trim
17 1
from markupsafe import Markup
18 1
import pendulum
19
20 1
from .datetime import format as dateformat
21 1
from . import money
22
23
24 1
@pass_eval_context
25
def dim(eval_ctx, value):
26
    """Render value in a way so that it looks dimmed."""
27 1
    dimmed = _dim(value)
28 1
    return _wrap_markup_on_autoescape(eval_ctx, dimmed)
29
30
31 1
def _dim(value):
32 1
    return f'<span class="dimmed">{value}</span>'
33
34
35 1
@pass_eval_context
36 1
def fallback(eval_ctx, value, fallback=None):
37 1
    defaulted = do_trim(do_default(value, '', True))
38 1
    if defaulted:
39 1
        result = value
40
    else:
41 1
        if fallback is None:
42 1
            fallback = gettext('not specified')
43 1
        result = _dim(fallback)
44
45 1
    return _wrap_markup_on_autoescape(eval_ctx, result)
46
47
48 1
def _wrap_markup_on_autoescape(eval_ctx, value):
49 1
    return Markup(value) if eval_ctx.autoescape else value
50
51
52 1
def local_tz_to_utc(dt: datetime):
53 1
    tz_str = _get_timezone()
54
55 1
    return (pendulum.instance(dt)
56
        .set(tz=tz_str)
57
        .in_tz(pendulum.UTC)
58
        # Keep SQLAlchemy from converting it to another zone.
59
        .replace(tzinfo=None))
60
61
62 1
def utc_to_local_tz(dt: datetime) -> datetime:
63
    """Convert naive date/time object from UTC to configured time zone."""
64 1
    tz_str = _get_timezone()
65 1
    return pendulum.instance(dt).in_tz(tz_str)
66
67
68 1
def _get_timezone() -> str:
69 1
    return current_app.config['TIMEZONE']
70
71
72 1
def register(app):
73
    """Make functions available as template filters."""
74 1
    functions = [
75
        dateformat.format_custom,
76
        dateformat.format_date_iso,
77
        dateformat.format_date_short,
78
        dateformat.format_date_long,
79
        dateformat.format_datetime_iso,
80
        dateformat.format_datetime_short,
81
        dateformat.format_datetime_long,
82
        dateformat.format_time,
83
        dim,
84
        fallback,
85
        money.format_euro_amount,
86
        utc_to_local_tz,
87
    ]
88
89 1
    for f in functions:
90
        app.add_template_filter(f)
91