N
εu¦9c       sn     d  Z    e d  Z  k Z  e i Z  d Z  e Z ! d f  d     YZ	  e
 e
 d  Z d S(   s­  A dumb and slow but simple dbm clone.

For database spam, spam.dir contains the index (a text file),
spam.bak *may* contain a backup of the index (also a text file),
while spam.dat contains the data (a binary file).

XXX TO DO:

- seems to contain a bug when updating...

- reclaim free space (currently, space once occupied by deleted or expanded
items is never reused)

- support concurrent access (currently, if two processes take turns making
updates, they can mess up the index)

- support efficient access to large databases (currently, the whole index
is read when the database is opened, and some updates rewrite the whole index)

- support opening for read-only (flag = 'm')

s   osi   s	   _Databasec      s‘   ! # d   Z  / d   Z = d   Z G d   Z O d   Z ^ d   Z e d   Z k d   Z } d	   Z  d
   Z	  d   Z
  d   Z  d   Z RS(   Nc    s   # $ | d |  _ % | d |  _ & | d |  _ ( y ) t |  i d  } Wn+ * t j
 o + t |  i d  } n X, | i   - |  i	   d  S(   Ns   .dirs   .dats   .baks   rs   w(
   s   files   selfs   _dirfiles   _datfiles   _bakfiles   _opens   fs   IOErrors   closes   _update(   s   selfs   files   fs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   __init__# s   c    s½   / 0 h  |  _ 1 y 2 t |  i  } Wn 3 t j
 o
 4 nw X6 xb 6 d oW 7 | i   } 8 | o 8 Pn 9 t |  \ } \ } } : | | f |  i | <qJ W; | i   d  S(   Ni   (   s   selfs   _indexs   _opens   _dirfiles   fs   IOErrors   readlines   lines   evals   keys   poss   sizs   close(   s   selfs   fs   lines   keys   poss   sizs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   _update/ s    
 c    sο   = > y > t  i |  i  Wn ? t  i j
 o
 ? n X@ y @ t  i |  i |  i  Wn A t  i j
 o
 A n XB t |  i d  } C xH |  i	 i
   d C r2 \ } \ } } D | i d | | | f  q₯ WE | i   d  S(   Ns   wi    s   %s, (%s, %s)
(   s   _oss   unlinks   selfs   _bakfiles   errors   renames   _dirfiles   _opens   fs   _indexs   itemss   keys   poss   sizs   writes   close(   s   selfs   fs   keys   poss   sizs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   _commit= s        $c    sh   G H |  i | \ } } I t |  i d  } J | i |  K | i	 |  } L | i   M | Sd  S(   Ns   rb(   s   selfs   _indexs   keys   poss   sizs   _opens   _datfiles   fs   seeks   reads   dats   close(   s   selfs   keys   poss   sizs   fs   dats+   /usr/lib/python1.5/site-packages/dumbdbm.pys   __getitem__G s   c    s¨   O P t  |  i d  } Q | i d d  R | i   } V | t d t t } W | i	 d | |  X | } Z | i	 |  [ | i   \ | t |  f Sd  S(   Ns   rb+i    i   i   s    (   s   _opens   selfs   _datfiles   fs   seeks   tells   poss
   _BLOCKSIZEs   nposs   writes   vals   closes   len(   s   selfs   vals   fs   poss   nposs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   _addvalO s   	c    s\   ^ _ t  |  i d  } ` | i |  a | i |  b | i   c | t	 |  f Sd  S(   Ns   rb+(
   s   _opens   selfs   _datfiles   fs   seeks   poss   writes   vals   closes   len(   s   selfs   poss   vals   fs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   _setval^ s
   c    sk   e | \ } } f | | f |  i | <g t |  i d  } h | i d | | | f  i | i	   d  S(   Ns   as   %s, (%s, %s)
(
   s   poss   sizs   selfs   _indexs   keys   _opens   _dirfiles   fs   writes   close(   s   selfs   keys   .4s   poss   sizs   fs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   _addkeye s    c    si  k l t  |  t  d  j o t  |  j n o m t d  n n |  i i |  o5 o |  i |  \ } } p |  i
 | | | f  nΣ r |  i | \ } } s | t d t } t t |  t d t } u | | j o5 v |  i | |  \ } } w | | f |  i | <n/ y |  i |  \ } } z | | f |  i | <{ |  i
 | | | f  d  S(   Ns    s   keys and values must be stringsi   (   s   types   keys   vals	   TypeErrors   selfs   _indexs   has_keys   _addvals   poss   sizs   _addkeys
   _BLOCKSIZEs	   oldblockss   lens	   newblockss   _setval(   s   selfs   keys   vals   poss   sizs	   oldblockss	   newblockss+   /usr/lib/python1.5/site-packages/dumbdbm.pys   __setitem__k s   4c    s!   } ~ |  i | = |  i   d  S(   N(   s   selfs   _indexs   keys   _commit(   s   selfs   keys+   /usr/lib/python1.5/site-packages/dumbdbm.pys   __delitem__} s   c    s     |  i i   Sd  S(   N(   s   selfs   _indexs   keys(   s   selfs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   keys s   c    s     |  i i |  Sd  S(   N(   s   selfs   _indexs   has_keys   key(   s   selfs   keys+   /usr/lib/python1.5/site-packages/dumbdbm.pys   has_key s   c    s     t  |  i  Sd  S(   N(   s   lens   selfs   _index(   s   selfs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   __len__ s   c    s-     t  |  _  t  |  _ |  _ |  _ d  S(   N(   s   Nones   selfs   _indexs   _datfiles   _dirfiles   _bakfile(   s   selfs+   /usr/lib/python1.5/site-packages/dumbdbm.pys   close s   (   s   __init__s   _updates   _commits   __getitem__s   _addvals   _setvals   _addkeys   __setitem__s   __delitem__s   keyss   has_keys   __len__s   close(    s+   /usr/lib/python1.5/site-packages/dumbdbm.pys	   _Database! s   
c    s     t  |   Sd  S(   N(   s	   _Databases   file(   s   files   flags   modes+   /usr/lib/python1.5/site-packages/dumbdbm.pys   open s   N(   s   __doc__s
   __import__s   _oss   __builtin__s   opens   _opens
   _BLOCKSIZEs   IOErrors   errors	   _Databases   None(    s+   /usr/lib/python1.5/site-packages/dumbdbm.pys   ? s   			n