[CompStrm Wiki] wdb, tks2
Status: Beta
Brought to you by:
blaforge
From: Bill la F. <laf...@ya...> - 2006-01-13 14:04:06
|
import wdb from tks.randompot import UUID from tks.ts import ts,tsMax from tkcs import tc from os.path import exists RECORD='$record%' TIMESTAMP='!timestamp%' #key prefixes RPTC='v' RVTC='p' PVTC='r' TC='t' SEP= chr(1) #string seperator for keys and values DELIM='HDwxR0cFv7P3abBzHBxDI3P4\n' class TKS: def __init__(self): self.btree=wdb.btree('AgileWiki',blksize=1024) self.lfile=file('AgileWiki.dmp','a') lfile=self.lfile lfile.write(DELIM) lfile.write('user=admin\n') lfile.write('time='+tc.display(tc.timestamp('.'))+'\n') lfile.write(DELIM) lfile.flush() def close(self): self.btree.close() self.lfile.close() def Transaction(self,R,T=None,U=None): 'Creates/returns a new transaction' return Transaction(self,R,T=T,U=U) def getDocument(self,R,P,time=None): 'Returns (document,type) or None' ts=tsMax(time) key=RPTC+SEP.join((R,P,ts,'999999')) limit=''.join((RPTC,R,SEP,P,SEP)) k,v=self.btree.items(key,limit).next() if not k: return None V1,V2,D=v.split(SEP) if len(V1)==0: return None return D,V1 class Transaction: def __init__(self,tks,R,T=None,U=None): self.lfile=tks.lfile self.btree=tks.btree self.R=R if U: self.U=U else: self.U=UUID() self.C=0 if T: self.T=T else: self.T=ts() self.log=[] log=self.log log.append(self.U+'\n') log.append(self.T+'\n') log.append(self.R+'\n') self.btree.tran() def commit(self): log=self.log log.append(DELIM) log=''.join(self.log) self.lfile.write(log) self.lfile.flush() self.btree.commit() def put(self,pre,kl,dl): key=pre+SEP.join(kl) data=SEP.join(dl) self.btree.put(key,data) def putRPTC(self,P,V1,V2,D): c=str(self.C).zfill(6) self.put(RPTC,(self.R,P,self.T,c),(V1,V2,D)) self.put(TC,(self.T,c),(self.R,P)) self.C+=1 log=self.log log.append('r '+self.R+'\n') log.append('p '+P+'\n') log.append('v1 '+V1+'\n') log.append('v2 '+V2+'\n') log.append('d '+D+'\n') log.append(self.R+'\n') def assignDocument(self,P,D,ext): self.putRPTC(P,ext,'',D) envSvc=TKS() |