Source code for president.utils
# This file is placed in the Public Domain.
#
# pylint: disable=C,I,R,W0212,W0718,E0402
"utilities"
import os
import pathlib
import time
import types
[docs]def cdir(pth) -> None:
if not pth.endswith(os.sep):
pth = os.path.dirname(pth)
pth = pathlib.Path(pth)
os.makedirs(pth, exist_ok=True)
[docs]def fntime(daystr) -> float:
daystr = daystr.replace('_', ':')
datestr = ' '.join(daystr.split(os.sep)[-2:])
if '.' in datestr:
datestr, rest = datestr.rsplit('.', 1)
else:
rest = ''
tme = time.mktime(time.strptime(datestr, '%Y-%m-%d %H:%M:%S'))
if rest:
tme += float('.' + rest)
else:
tme = 0
return tme
[docs]def laps(seconds, short=True) -> str:
txt = ""
nsec = float(seconds)
if nsec < 1:
return f"{nsec:.2f}s"
year = 365*24*60*60
week = 7*24*60*60
nday = 24*60*60
hour = 60*60
minute = 60
years = int(nsec/year)
nsec -= years*year
weeks = int(nsec/week)
nsec -= weeks*week
nrdays = int(nsec/nday)
nsec -= nrdays*nday
hours = int(nsec/hour)
nsec -= hours*hour
minutes = int(nsec/minute)
nsec -= int(minute*minutes)
sec = int(nsec)
if years:
txt += f"{years}y"
if weeks:
nrdays += weeks * 7
if nrdays:
txt += f"{nrdays}d"
if nrdays and short and txt:
return txt.strip()
if hours:
txt += f"{hours}h"
if minutes:
txt += f"{minutes}m"
if sec:
txt += f"{sec}s"
txt = txt.strip()
return txt
[docs]def name(obj) -> str:
typ = type(obj)
if isinstance(typ, types.ModuleType):
return obj.__name__
if '__self__' in dir(obj):
return '%s.%s' % (obj.__self__.__class__.__name__, obj.__name__)
if '__class__' in dir(obj) and '__name__' in dir(obj):
return '%s.%s' % (obj.__class__.__name__, obj.__name__)
if '__class__' in dir(obj):
return obj.__class__.__name__
if '__name__' in dir(obj):
return '%s.%s' % (obj.__class__.__name__, obj.__name__)
return None
[docs]def skip(txt, skipping) -> bool:
for skp in spl(skipping):
if skp in txt:
return True
return False
[docs]def spl(txt) -> []:
try:
res = txt.split(',')
except (TypeError, ValueError):
res = txt
return [x for x in res if x]
[docs]def strip(path) -> str:
return os.sep.join(path.split(os.sep)[-4:])
[docs]def wait(func=None):
while 1:
time.sleep(1.0)
if func:
func()