bumblebee-status/util/format.py
tobi-wan-kenobi 30c1f712a6 [formatting] reformat using "black -t py34"
getting rid of thinking about consistent formatting...
2020-05-03 11:15:52 +02:00

82 lines
2 KiB
Python

import re
def asbool(val):
if val is None:
return False
if isinstance(val, bool):
return val
val = str(val).strip().lower()
return val in ("t", "true", "y", "yes", "on", "1")
def asint(val, minimum=None, maximum=None):
if val is None:
val = 0
val = int(val)
val = min(val, maximum if maximum else val)
val = max(val, minimum if minimum else val)
return val
def aslist(val):
if val is None:
return []
if isinstance(val, list):
return val
return str(val).replace(" ", "").split(",")
__UNITS = {"metric": "C", "kelvin": "K", "imperial": "F", "default": "C"}
def astemperature(value, unit="metric"):
return "{}°{}".format(int(value), __UNITS.get(unit, __UNITS["default"]))
def byte(val, fmt="{:.2f}"):
for unit in ["", "Ki", "Mi", "Gi"]:
if val < 1024.0:
return "{}{}B".format(fmt, unit).format(val)
val /= 1024.0
return "{}GiB".format(fmt).format(val * 1024.0)
__seconds_pattern = re.compile("(([\d\.?]+)h)?(([\d\.]+)m)?([\d\.]+)?s?")
def seconds(duration):
if isinstance(duration, int) or isinstance(duration, float):
return float(duration)
matches = __seconds_pattern.match(duration)
result = 0.0
if matches.group(2):
result += float(matches.group(2)) * 3600 # hours
if matches.group(4):
result += float(matches.group(4)) * 60 # minutes
if matches.group(5):
result += float(matches.group(5)) # seconds
return result
def duration(duration, compact=False, unit=False):
duration = int(duration)
if duration < 0:
return "n/a"
minutes, seconds = divmod(duration, 60)
hours, minutes = divmod(minutes, 60)
suf = "m"
res = "{:02d}:{:02d}".format(minutes, seconds)
if hours > 0:
if compact:
res = "{:02d}:{:02d}".format(hours, minutes)
else:
res = "{:02d}:{}".format(hours, res)
suf = "h"
return "{}{}".format(res, suf if unit else "")
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4