mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-04-23 23:22:38 +00:00
54 lines
1.2 KiB
Python
54 lines
1.2 KiB
Python
# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
seconds = (_('second'), _('seconds'))
|
|
minutes = (_('minute'), _('minutes'))
|
|
hours = (_('hour'), _('hours'))
|
|
days = (_('day'), _('days'))
|
|
weeks = (_('week'), _('weeks'))
|
|
|
|
|
|
def plural(x):
|
|
if x == 1:
|
|
return 0
|
|
return 1
|
|
|
|
|
|
def pretty_duration(duration):
|
|
"""
|
|
I receive datetime.timedelta object
|
|
You receive string object
|
|
"""
|
|
text = []
|
|
sec = duration.seconds
|
|
d = duration.days
|
|
|
|
if d >= 7:
|
|
w = d // 7
|
|
text.append(str(w) + ' ' + weeks[plural(w)])
|
|
d -= w * 7
|
|
if d > 0:
|
|
text.append(str(d) + ' ' + days[plural(d)])
|
|
|
|
if sec >= 3600:
|
|
h = sec // 3600
|
|
text.append(str(h) + ' ' + hours[plural(h)])
|
|
sec -= h * 3600
|
|
|
|
if sec >= 60:
|
|
m = sec // 60
|
|
text.append(str(m) + ' ' + minutes[plural(m)])
|
|
sec -= m * 60
|
|
|
|
if sec > 0:
|
|
text.append(str(sec) + ' ' + seconds[plural(sec)])
|
|
|
|
if len(text) == 0:
|
|
return ''
|
|
if len(text) == 1:
|
|
return text[0]
|
|
if len(text) >= 2:
|
|
return ', '.join(t for t in text[:-1]) + ' ' + _('and') + ' ' + text[-1]
|