mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-30 11:19:23 +00:00
1ffc273c94
- Move more stuff that belongs in netlib.human - Move some stuff to near the only use - Zap mitmproxy.utils.timestamp(). I see the rationale, but we used it interchangeably with time.time() throughout the project. Since time.time() dominates in the codebase and timestamp() is such low utility, away it goes.
65 lines
1.4 KiB
Python
65 lines
1.4 KiB
Python
import datetime
|
|
import time
|
|
|
|
|
|
SIZE_TABLE = [
|
|
("b", 1024 ** 0),
|
|
("k", 1024 ** 1),
|
|
("m", 1024 ** 2),
|
|
("g", 1024 ** 3),
|
|
("t", 1024 ** 4),
|
|
]
|
|
|
|
SIZE_UNITS = dict(SIZE_TABLE)
|
|
|
|
|
|
def pretty_size(size):
|
|
for bottom, top in zip(SIZE_TABLE, SIZE_TABLE[1:]):
|
|
if bottom[1] <= size < top[1]:
|
|
suf = bottom[0]
|
|
lim = bottom[1]
|
|
x = round(size / lim, 2)
|
|
if x == int(x):
|
|
x = int(x)
|
|
return str(x) + suf
|
|
return "%s%s" % (size, SIZE_TABLE[0][0])
|
|
|
|
|
|
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)
|
|
|
|
|
|
def format_timestamp(s):
|
|
s = time.localtime(s)
|
|
d = datetime.datetime.fromtimestamp(time.mktime(s))
|
|
return d.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
|
|
def format_timestamp_with_milli(s):
|
|
d = datetime.datetime.fromtimestamp(s)
|
|
return d.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|