Source code for labblouin.logfile

# logfile.py
# --------------------------------
# logfile> May 6, 2013; Alex Safatli
# XMLfile> Jun 26, 2013; Alex Safatli
# --------------------------------
# Encapsulates logfile management
# as well as XML file reading and
# parsing for recording of discrete
# information.

import os, timer, re
from sys import stdout
from datetime import datetime
import xml.etree.cElementTree as xml

[docs]def parseTime(time): y,w,d,h,m,s = 0,0,0,0,0,0 nums = re.split('[a-z]',time)[:-1] lers = re.split('[0-9]*',time)[1:] if 'y' in lers: y = int(nums[lers.index('y')]) if 'w' in lers: w = int(nums[lers.index('w')]) if 'd' in lers: d = int(nums[lers.index('d')]) if 'h' in lers: h = int(nums[lers.index('h')]) if 'm' in lers: m = int(nums[lers.index('m')]) if 's' in lers: s = int(nums[lers.index('s')]) return y, w, d, h, m, s
[docs]def calculateTime(timevector): y,w,d,h,m,s = timevector return y*3.15569e7+w*604800+d*86400+h*3600+m*60+s
[docs]class XMLfile(): def __init__(self,xmlf,root='root'): self.path = xmlf self.root = xml.Element(root) self.tree = None
[docs] def compile(self): self.tree = xml.ElementTree(self.root)
[docs] def read(self): self.tree = xml.parse(self.path) self.root = self.tree.getroot()
[docs] def write(self): self.compile() self.tree.write(self.path)
def _add(self,ele,it,*args): out = xml.SubElement(ele,it) for arg in args: if len(arg) != 2: continue else: name,val = arg name = str(name) val = str(val) if name == 'xml': out.text = val else: out.set(name,val) return out
[docs] def add(self,ele,it,*args): out = self._add(ele,it,*args) self.write() return out
[docs]class logfile(): def __init__(self,logf,enable=True,silent=False): self.logfile = logf self.numat = 0 self.totalnum = 100 self.stime = timer.getTime() self.lastnum = self.numat self.enabled = enable self.silent = silent if enable and not os.path.isfile(logf): fout = open(logf,'w') fout.close()
[docs] def setTotalNum(self,tn): self.totalnum = tn
[docs] def incrementTimer(self): self.numat += 1
[docs] def updateTimer(self,numat): self.numat = numat
def __fs__(self,tot): # Format seconds. y,w,d,h,m,s = 0,0,0,0,0,0 if (tot < 1 or self.numat == 0): return '...' y = tot/(60*60*24*360) tot = tot % (60*60*24*360) w = tot/(60*60*24*7) tot = tot % (60*60*24*7) d = tot/(60*60*24) tot = tot % (60*60*24) h = tot/(60*60) tot = tot % (60*60) m = tot/(60) tot = tot % 60 s = tot out = '' if (y >= 1): out += '%dy' % y if (w >= 1): out += '%dw' % w if (d >= 1): out += '%dd' % d if (h >= 1): out += '%dh' % h if (m >= 1): out += '%dm' % m if (s >= 1): out += '%ds' % s return out
[docs] def writeTemporary(self,msg,silent=None): self._write(msg,temp=True,silent=silent)
def _write(self,msg,temp=False,silent=None): if silent == None: silent = self.silent if silent and not self.enabled: return numat = self.numat+1 totnum = self.totalnum+1 tim = timer.estimateRemainingTime(self.stime,numat,totnum) # time remaining cur = datetime.now().strftime("%y-%m-%d %H:%M") perc = (float(numat)/totnum)*100 if temp: suff = '\r' else: suff = '' out = '[%s | %3d%% | rem %10s] %s' % (cur,perc,self.__fs__(tim),msg) if not silent: stdout.write('\033[K' + out + suff) stdout.flush() if not self.enabled: return else: fout = open(self.logfile,'a') fout.write(out.strip('\n') + '\n') fout.close()
[docs] def write(self,msg,silent=None): self._write(msg + '\n',silent=silent)
[docs] def writeElapsedTime(self): t = timer.getTime() self.write('Elapsed: %s' % (self.__fs__(t-self.stime)))