mò &U²Ic@s/dZdkZdkZdfd„ƒYZdS(s˜ File-like objects that read from or write to a bsddb record. This implements (nearly) all stdio methods. f = DBRecIO(db, key, txn=None) f.close() # explicitly release resources held flag = f.isatty() # always false pos = f.tell() # get current position f.seek(pos) # set current position f.seek(pos, mode) # mode 0: absolute; 1: relative; 2: relative to EOF buf = f.read() # read until EOF buf = f.read(n) # read up to n bytes f.truncate([size]) # truncate file at to at most size (default: current pos) f.write(buf) # write at current position f.writelines(list) # for line in list: f.write(line) Notes: - fileno() is left unimplemented so that code which uses it triggers an exception early. - There's a simple test set (see end of this file) - not yet updated for DBRecIO. - readline() is not implemented yet. From: Itamar Shtull-Trauring NtDBRecIOcBsttZdd„Zd„Zd„Zdd„Zd„Zdd„Zd Z dd „Z d „Z d „Z d „Z RS(NcCsC||_||_||_d|_d|_d|_d|_dS(Ni( tdbtselftkeyttxntNonetlentpostclosedt softspace(RRRR((t*/data/zmath/lib/python2.4/bsddb/dbrecio.pyt__init__#s      cCs'|ipd|_|`|`ndS(Ni(RRRR(R((R tclose,s  cCs|io td‚ndS(NsI/O operation on closed filei(RRt ValueError(R((R tisatty1s  icCsi|io td‚n|djo||i}n|djo||i}ntd|ƒ|_dS(NsI/O operation on closed fileiii(RRR tmodeRRtmax(RRR((R tseek6s    cCs|io td‚n|iS(NsI/O operation on closed file(RRR R(R((R ttell?s  iÿÿÿÿcCsŽ|io td‚n|djo |i}nt|i||iƒ}||i}|i i t d|i d|d|iƒ}||_|S(NsI/O operation on closed fileiRtdlentdoff(RRR tnRtnewpostminRRRtgetRRtr(RRRRR((R treadDs     * s| def readline(self, length=None): if self.closed: raise ValueError, "I/O operation on closed file" if self.buflist: self.buf = self.buf + string.joinfields(self.buflist, '') self.buflist = [] i = string.find(self.buf, ' ', self.pos) if i < 0: newpos = self.len else: newpos = i+1 if length is not None: if self.pos + length < newpos: newpos = self.pos + length r = self.buf[self.pos:newpos] self.pos = newpos return r def readlines(self, sizehint = 0): total = 0 lines = [] line = self.readline() while line: lines.append(line) total += len(line) if 0 < sizehint <= total: break line = self.readline() return lines c Cs¤|io td‚n|djo |i}nA|djottidƒ‚n||ijo ||_n|i i t dd|i d|i |d|ƒdS(NsI/O operation on closed fileisNegative size not allowedtRRR(RRR tsizeRRtIOErrorterrnotEINVALRtputRRR(RR((R ttruncaters        c Cs¸|io td‚n|pdSn|i|ijo.|iid|i|iƒ|i|_n|it|ƒ}|i i t |d|i dt|ƒd|iƒ||_dS(NsI/O operation on closed filetRRR( RRR tsRRtbuflisttappendRRR RR(RR#R((R twrite~s  1cCs|iti|dƒƒdS(NR(RR&tstringt joinfieldstlist(RR)((R t writelines‰scCs|io td‚ndS(NsI/O operation on closed file(RRR (R((R tflushŒs (t__name__t __module__RR R RRRRt_DBRecIO__fixmeR!R&R*R+(((R R"s     (t__doc__RR'R(RR'R((R t?s