ó }®¸Qc@s5dZddlZddlZddd„ƒ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 iÿÿÿÿNtDBRecIOcBsteZd d„Zd„Zd„Zdd„Zd„Zdd„ZdZ d d „Z d „Z d „Z d „Z RS(cCsC||_||_||_d|_d|_d|_d|_dS(Ni(tdbtkeyttxntNonetlentpostclosedt softspace(tselfRRR((s#/sys/lib/python2.7/bsddb/dbrecio.pyt__init__#s      cCs%|js!d|_|`|`ndS(Ni(RRR(R ((s#/sys/lib/python2.7/bsddb/dbrecio.pytclose,s  cCs|jrtd‚ndS(NsI/O operation on closed filei(Rt ValueError(R ((s#/sys/lib/python2.7/bsddb/dbrecio.pytisatty1s  icCsc|jrtd‚n|dkr1||j}n|dkrM||j}ntd|ƒ|_dS(NsI/O operation on closed fileiii(RR RRtmax(R Rtmode((s#/sys/lib/python2.7/bsddb/dbrecio.pytseek6s    cCs|jrtd‚n|jS(NsI/O operation on closed file(RR R(R ((s#/sys/lib/python2.7/bsddb/dbrecio.pyttell?s  iÿÿÿÿcCs|jrtd‚n|dkr-|j}nt|j||jƒ}||j}|jj|jd|jd|d|jƒ}||_|S(NsI/O operation on closed fileiRtdlentdoff( RR RtminRRtgetRR(R tntnewposRtr((s#/sys/lib/python2.7/bsddb/dbrecio.pytreadDs     - 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Ÿ|jrtd‚n|dkr-|j}n<|dkrNttjdƒ‚n||jkri||_n|jj|j dd|j d|j |d|ƒdS(NsI/O operation on closed fileisNegative size not allowedtRRR( RR RRtIOErrorterrnotEINVALRtputRRR(R tsize((s#/sys/lib/python2.7/bsddb/dbrecio.pyttruncaters        c Cs²|jrtd‚n|sdS|j|jkr^|jjd|j|jƒ|j|_n|jt|ƒ}|jj|j|d|j dt|ƒd|jƒ||_dS(NsI/O operation on closed filetRRR( RR RRtbuflisttappendRRRR(R tsR((s#/sys/lib/python2.7/bsddb/dbrecio.pytwrite~s  4cCs|jtj|dƒƒdS(NR(R%tstringt joinfields(R tlist((s#/sys/lib/python2.7/bsddb/dbrecio.pyt writelines‰scCs|jrtd‚ndS(NsI/O operation on closed file(RR (R ((s#/sys/lib/python2.7/bsddb/dbrecio.pytflushŒs N(t__name__t __module__RR R R RRRt_DBRecIO__fixmeR R%R)R*(((s#/sys/lib/python2.7/bsddb/dbrecio.pyR"s    , ((t__doc__RR&R(((s#/sys/lib/python2.7/bsddb/dbrecio.pyts  œ