roundabout,
created on Tuesday, 25 June 2024, 10:15:57 (1719310557),
received on Wednesday, 31 July 2024, 06:54:50 (1722408890)
Author identity: vlad <vlad.muntoiu@gmail.com>
dc9c6e3bd656a687e95fb495cd6577feabd58dea
jinja_utils.py
@@ -1,4 +1,4 @@
from app import app
from app import app, _, n_
import flask
from datetime import datetime
import markdown
@@ -38,6 +38,110 @@ def rstrip(value: str, characters=None):
@app.template_filter("strftime")
def strftime(value: datetime, syntax: str):
# Split the strftime syntax into placeholders and literals.
placeholders = {
"%a", "%A", "%w", "%d", "%-d", "%b", "%B", "%m", "%-m", "%y", "%Y",
"%H", "%-H", "%I", "%-I", "%p", "%M", "%-M", "%S", "%-S", "%f", "%z",
"%Z", "%j", "%-j", "%U", "%W", "%c", "%x", "%X", "%%", "%G", "%u", "%V",
"%-V", "%s", "%:z", "%e"
}
tokens = []
i = 0
length = len(syntax)
while i < length:
if syntax[i] == "%":
if i+1 < length and syntax[i:i + 2] in placeholders:
tokens.append(syntax[i:i + 2])
i += 2
elif i+1 < length and syntax[i:i + 3] in placeholders:
tokens.append(syntax[i:i + 3])
i += 3
else:
tokens.append(syntax[i])
i += 1
else:
tokens.append(syntax[i])
i += 1
new_tokens = []
for token in tokens:
match token:
case "%A":
# Translate the full weekday name.
weekday_number = value.weekday()
weekday_names = [
_("Monday"),
_("Tuesday"),
_("Wednesday"),
_("Thursday"),
_("Friday"),
_("Saturday"),
_("Sunday")
]
new_tokens.append(weekday_names[weekday_number])
case "%a":
# Translate the abbreviated weekday name.
weekday_number = value.weekday()
weekday_names = [
_("Mon"),
_("Tue"),
_("Wed"),
_("Thu"),
_("Fri"),
_("Sat"),
_("Sun")
]
new_tokens.append(weekday_names[weekday_number])
case "%B":
# Translate the full month name.
month_number = value.month
month_names = [
_("January"),
_("February"),
_("March"),
_("April"),
_("May"),
_("June"),
_("July"),
_("August"),
_("September"),
_("October"),
_("November"),
_("December")
]
new_tokens.append(month_names[month_number - 1])
case "%b":
# Translate the abbreviated month name.
month_number = value.month
month_names = [
_("Jan"),
_("Feb"),
_("Mar"),
_("Apr"),
_("May (short)"),
_("Jun"),
_("Jul"),
_("Aug"),
_("Sep"),
_("Oct"),
_("Nov"),
_("Dec")
]
new_tokens.append(month_names[month_number - 1])
case "%p":
# Translate the AM/PM indicator.
if value.hour < 12:
new_tokens.append(_("am"))
else:
new_tokens.append(_("pm"))
case _:
new_tokens.append(token)
print([value.strftime(token) if token in placeholders else token for token in new_tokens], syntax)
syntax = "".join([value.strftime(token) if token in placeholders else token for token in new_tokens])
return value.strftime(syntax)