aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/human.py
diff options
context:
space:
mode:
Diffstat (limited to 'netlib/human.py')
-rw-r--r--netlib/human.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/netlib/human.py b/netlib/human.py
new file mode 100644
index 00000000..f4640c00
--- /dev/null
+++ b/netlib/human.py
@@ -0,0 +1,51 @@
+SIZE_UNITS = dict(
+ b=1024 ** 0,
+ k=1024 ** 1,
+ m=1024 ** 2,
+ g=1024 ** 3,
+ t=1024 ** 4,
+)
+
+
+def pretty_size(size):
+ suffixes = [
+ ("B", 2 ** 10),
+ ("kB", 2 ** 20),
+ ("MB", 2 ** 30),
+ ]
+ for suf, lim in suffixes:
+ if size >= lim:
+ continue
+ else:
+ x = round(size / float(lim / 2 ** 10), 2)
+ if x == int(x):
+ x = int(x)
+ return str(x) + suf
+
+
+def parse_size(s):
+ try:
+ return int(s)
+ except ValueError:
+ pass
+ for i in SIZE_UNITS.keys():
+ if s.endswith(i):
+ try:
+ return int(s[:-1]) * SIZE_UNITS[i]
+ except ValueError:
+ break
+ raise ValueError("Invalid size specification.")
+
+
+def pretty_duration(secs):
+ formatters = [
+ (100, "{:.0f}s"),
+ (10, "{:2.1f}s"),
+ (1, "{:1.2f}s"),
+ ]
+
+ for limit, formatter in formatters:
+ if secs >= limit:
+ return formatter.format(secs)
+ # less than 1 sec
+ return "{:.0f}ms".format(secs * 1000)