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
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)
|