You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
1.2 KiB
Python

from django.utils.translation import gettext, ngettext
from django.template import Library
from django.utils.html import avoid_wrapping
from django.utils import formats
register = Library()
@register.filter(is_safe=True)
def bwformat(bps):
try:
bps = float(bps)
except (TypeError, ValueError, UnicodeDecodeError):
value = ngettext("%(bw)d bps", "%(bw)d bps", 0) % {"bw": 0}
return avoid_wrapping(value)
filesize_number_format = lambda value: formats.number_format(round(value, 1), -1)
K = 1 * 10 ** 3
M = 1 * 10 ** 6
G = 1 * 10 ** 9
T = 1 * 10 ** 12
P = 1 * 10 ** 15
if bps < K:
value = ngettext("%(size)d bps", "%(size)d bps", bps) % {"size": bps}
elif bps < M:
value = gettext("%s Kbps") % filesize_number_format(bps / K)
elif bps < G:
value = gettext("%s Mbps") % filesize_number_format(bps / M)
elif bps < T:
value = gettext("%s Gbps") % filesize_number_format(bps / G)
elif bps < P:
value = gettext("%s Tbps") % filesize_number_format(bps / T)
else:
value = gettext("%s Pbps") % filesize_number_format(bps / P)
return avoid_wrapping(value)