mò
­fIc           @   s/   d  Z  d k Z d k Z d f  d „  ƒ  YZ d S(   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>
Nt   DBRecIOc           B   st   t  Z d  d „ Z d „  Z d „  Z d d „ Z d „  Z d d „ Z d	 Z	 d  d
 „ Z
 d „  Z d „  Z d „  Z RS(   Nc         C   sC   | |  _  | |  _ | |  _ d  |  _ d |  _ d |  _ d |  _ d  S(   Ni    (	   t   dbt   selft   keyt   txnt   Nonet   lent   post   closedt	   softspace(   R   R   R   R   (    (    t*   /mit/python/lib/python2.4/bsddb/dbrecio.pyt   __init__#   s    						c         C   s'   |  i p d |  _ |  ` |  ` n d  S(   Ni   (   R   R   R   R   (   R   (    (    R
   t   close,   s    
	c         C   s   |  i o t d ‚ n d S(   Ns   I/O operation on closed filei    (   R   R   t
   ValueError(   R   (    (    R
   t   isatty1   s    
i    c         C   si   |  i o t d ‚ n | d j o | |  i } n | d j o | |  i } n t d | ƒ |  _ d  S(   Ns   I/O operation on closed filei   i   i    (   R   R   R   t   modeR   R   t   max(   R   R   R   (    (    R
   t   seek6   s    
c         C   s   |  i o t d ‚ n |  i S(   Ns   I/O operation on closed file(   R   R   R   R   (   R   (    (    R
   t   tell?   s    
iÿÿÿÿc         C   sŽ   |  i o t d ‚ n | d j  o |  i } n t |  i | |  i ƒ } | |  i } |  i	 i
 t d |  i d | d |  i ƒ} | |  _ | S(   Ns   I/O operation on closed filei    R   t   dlent   doff(   R   R   R   t   nR   t   newpost   minR   R   R   t   getR   R   t   r(   R   R   R   R   R   (    (    R
   t   readD   s    
*	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      	   C   s¤   |  i o t d ‚ n | d  j o |  i } nA | d j  o t t i d ƒ ‚ n | |  i j  o | |  _ n |  i	 i
 t d d |  i d |  i | d | ƒd  S(   Ns   I/O operation on closed filei    s   Negative size not allowedt    R   R   R   (   R   R   R   t   sizeR   R   t   IOErrort   errnot   EINVALR   t   putR   R   R   (   R   R   (    (    R
   t   truncater   s    
	c      	   C   s¸   |  i o t d ‚ n | p d  Sn |  i |  i j o. |  i i d |  i |  i ƒ |  i |  _ n |  i t | ƒ } |  i	 i
 t | d |  i d t | ƒ d |  i ƒ| |  _ d  S(   Ns   I/O operation on closed filet    R   R   R   (   R   R   R   t   sR   R   t   buflistt   appendR   R   R    R   R   (   R   R#   R   (    (    R
   t   write~   s    
 1c         C   s   |  i t i | d ƒ ƒ d  S(   NR   (   R   R&   t   stringt
   joinfieldst   list(   R   R)   (    (    R
   t
   writelines‰   s    c         C   s   |  i o t d ‚ n d  S(   Ns   I/O operation on closed file(   R   R   R   (   R   (    (    R
   t   flushŒ   s    
(   t   __name__t
   __module__R   R   R   R   R   R   R   t   _DBRecIO__fixmeR!   R&   R*   R+   (    (    (    R
   R    "   s   					 		(   t   __doc__R   R'   R    (   R   R'   R    (    (    R
   t   ?   s   		