https://github.com/Dans-labs/text-fabric
Tip revision: 63a53596831dae34a70bfa49ecc054f03f72e985 authored by Dirk Roorda on 30 November 2016, 11:15:14 UTC
New minor release 0.0.4
New minor release 0.0.4
Tip revision: 63a5359
timestamp.py
import sys
import collections
import time
class Timestamp(object):
def __init__(self, level=None):
self.oneLevelRep = ' | '
self.timestamp = {}
self.indent(level=level, reset=True)
def raw_msg(self, msg, tm=True, nl=True, error=False):
if tm:
msgRep = '{}{:>7} {}'.format(self.levelRep, self._elapsed(), msg).replace('\n', '\n'+self.levelRep)
else:
msgRep = '{}{}'.format(self.levelRep, msg).replace('\n', '\n'+self.levelRep)
channel = sys.stderr if error else sys.stdout
channel.write('{}{}'.format(msgRep, '\n' if nl else ''))
channel.flush()
def info(self, msg, tm=True, nl=True): self.raw_msg(msg, tm=tm, nl=nl)
def error(self, msg, tm=True, nl=True): self.raw_msg(msg, tm=tm, nl=nl, error=True)
def indent(self, level=None, reset=False):
self.level = level if level != None else 0
self.levelRep = self.oneLevelRep * self.level
if reset:
self.timestamp[self.level] = time.time()
def _elapsed(self):
interval = time.time() - self.timestamp.setdefault(self.level, time.time())
if interval < 10: return "{: 2.2f}s".format(interval)
interval = int(round(interval))
if interval < 60: return "{:>2d}s".format(interval)
if interval < 3600: return "{:>2d}m {:>02d}s".format(interval // 60, interval % 60)
return "{:>2d}h {:>02d}m {:>02d}s".format(interval // 3600, (interval % 3600) // 60, interval % 60)