�`^c@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 <itamar@maxnm.com>
i�NtDBRecIOcBsteZd
d�Zd�Zd�Zdd�Zd�Zdd�ZdZ d
d �Z
d
�Zd�Zd�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(RRRRtmax(R Rtmode((s#/sys/lib/python2.7/bsddb/dbrecio.pytseek6s cCs|jrtd�n|jS(NsI/O operation on closed file(RRR(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( RRRtminRRtgetRR(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(RRRRtIOErrorterrnotEINVALRtputRRR(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(
RRRRtbuflisttappendRRRR(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
RR
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.pyt<module>s
|