Skip to content
Snippets Groups Projects
Commit cc02a252 authored by Jiří Setnička's avatar Jiří Setnička
Browse files

Pomocná funkce human_timedelta pro vyrábění řetězců styl "za 3 minuty"

Registrujeme ji i jako template funkci. A to template přidáváme jako
variable i 'now', ať se nemusí předávat explicitně.
parent 2742e071
Branches
No related tags found
No related merge requests found
# Utils that do not depend on any other in mo (to avoid circular dependency)
from datetime import datetime
from typing import Optional
import mo
def human_timedelta(d: datetime, ref: Optional[datetime] = None, descriptive: bool = False) -> str:
"""Vyrábí česky formátované řetězece 'za 3 minuty', 'před 27 dny' a podobně
z rozdílu daného datetime a referenčního času (například now).
Pokud se předá `descriptive=True`, tak vyrábí "deskriptivní" popis
ve stylu '3 minuty po', '27 dní před' a podobně.
"""
if ref is None:
ref = mo.now
(prefix, suffix) = ("", "")
if ref > d:
delta = ref - d
if descriptive:
suffix = " před"
else:
prefix = "před "
before = True
else:
delta = d - ref
if descriptive:
suffix = " po"
else:
prefix = "za "
before = False
if delta.days > 0:
unitprefix = ''
unit = (
('den' if descriptive else 'dnem', 'dny', 'dny'),
('den', 'dny', 'dní')
)
number = delta.days
else:
unit = (
# 1 minuta před, 3 minuty před, 5 minut před / před 1 minutou, před 3 minutami, před 5 minutami
('a', 'y', '') if descriptive else ('ou', 'ami', 'ami'),
# 1 minuta po, 3 minuty po, 5 minut po / za 1 minutu, za 3 minuty, za 5 minut
('a' if descriptive else 'u', 'y', '')
)
if delta.seconds > 3600:
unitprefix = 'hodin'
number = delta.seconds // 3600
elif delta.seconds > 60:
unitprefix = 'minut'
number = delta.seconds // 60
else:
unitprefix = 'sekund'
number = delta.seconds
unit = unit[0] if before else unit[1]
if number == 1:
unit = unit[0]
elif number != 0 and number < 4:
unit = unit[1]
else:
unit = unit[2]
return f"{prefix}{number} {unitprefix}{unit}{suffix}"
import datetime import datetime
from mo.util_simple import human_timedelta
import dateutil.tz import dateutil.tz
from flask import Flask, request, g, session from flask import Flask, request, g, session
import flask.logging import flask.logging
...@@ -32,6 +33,9 @@ logger.addHandler(flask.logging.default_handler) ...@@ -32,6 +33,9 @@ logger.addHandler(flask.logging.default_handler)
# Budeme používat české locale # Budeme používat české locale
locale.setlocale(locale.LC_COLLATE, 'cs_CZ.UTF-8') locale.setlocale(locale.LC_COLLATE, 'cs_CZ.UTF-8')
# Registrování vlastních funkcí
app.jinja_env.globals.update(human_timedelta=human_timedelta)
# Naše filtry pro Jinju # Naše filtry pro Jinju
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment