‰.
„52c      si     d  Z   d   e d ƒ Z  k Z  e i Z  d Z  d f  d „  ƒ  YZ Š e e d „ Z d S(   s…  A slow but simple dbm clone for the Mac.

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:

- 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 9 d „  Z C d „  Z K d „  Z Z d „  Z a d „  Z g d „  Z y 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/python/mac/dbmac.pys   __init__c   s½   + , h  |  _ - y . t |  i ƒ } Wn / t j
 o
 0 nw X2 xb 2 d oW 3 | i ƒ  } 4 | o 4 Pn 5 t | ƒ \ } \ } } 6 | | f |  i | <qJ W7 | 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/python/mac/dbmac.pys   _updatec   sï   9 : y : t  i |  i ƒ Wn ; t  i j
 o
 ; n X< y < t  i |  i |  i ƒ Wn = t  i j
 o
 = n X> t |  i d ƒ } ? xH |  i	 i
 ƒ  d ? r2 \ } \ } } @ | i d | | | f ƒ q¥ WA | 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/python/mac/dbmac.pys   _commitc   sh   C D |  i | \ } } E t |  i d ƒ } F | i | ƒ G | i	 | ƒ } H | i ƒ  I | 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/python/mac/dbmac.pys   __getitem__c   s¨   K L t  |  i d ƒ } M | i d d ƒ N | i ƒ  } R | t d t t } S | i	 d | | ƒ T | } V | i	 | ƒ W | i ƒ  X | 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/python/mac/dbmac.pys   _addvalc   sV   Z [ t  |  i d ƒ } \ | i | ƒ ] | i | ƒ ^ | i ƒ  _ | | f Sd  S(   Ns   rb+(	   s   _opens   selfs   _datfiles   fs   seeks   poss   writes   vals   close(   s   selfs   poss   vals   fs   /usr/lib/python/mac/dbmac.pys   _setvalc   sk   a | \ } } b | | f |  i | <c t |  i d ƒ } d | i d | | | f ƒ e | i	 ƒ  d  S(   Ns   as   %s, (%s, %s)
(
   s   poss   sizs   selfs   _indexs   keys   _opens   _dirfiles   fs   writes   close(   s   selfs   keys    s   poss   sizs   fs   /usr/lib/python/mac/dbmac.pys   _addkeyc   si  g h t  | ƒ t  d ƒ j o t  | ƒ j n o i t d ‚ n j |  i i | ƒ o5 k |  i | ƒ \ } } l |  i
 | | | f ƒ nÓ n |  i | \ } } o | t d t } p t | ƒ t d t } q | | j o5 r |  i | | ƒ \ } } s | | f |  i | <n/ u |  i | ƒ \ } } v | | f |  i | <w |  i
 | | | f ƒ d  S(   Ns    s%   dbmac 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/python/mac/dbmac.pys   __setitem__c   s!   y z |  i | ={ |  i ƒ  d  S(   N(   s   selfs   _indexs   keys   _commit(   s   selfs   keys   /usr/lib/python/mac/dbmac.pys   __delitem__c   s   } ~ |  i i ƒ  Sd  S(   N(   s   selfs   _indexs   keys(   s   selfs   /usr/lib/python/mac/dbmac.pys   keysc   s   €  |  i i | ƒ Sd  S(   N(   s   selfs   _indexs   has_keys   key(   s   selfs   keys   /usr/lib/python/mac/dbmac.pys   has_keyc   s   ƒ „ t  |  i ƒ Sd  S(   N(   s   lens   selfs   _index(   s   selfs   /usr/lib/python/mac/dbmac.pys   __len__c   s(   † ‡ t  |  _ |  _ |  _ |  _ d  S(   N(   s   Nones   selfs   _indexs   _datfiles   _dirfiles   _bakfile(   s   selfs   /usr/lib/python/mac/dbmac.pys   close(   s   __init__s   _updates   _commits   __getitem__s   _addvals   _setvals   _addkeys   __setitem__s   __delitem__s   keyss   has_keys   __len__s   close(    s   /usr/lib/python/mac/dbmac.pys	   _Databasec   s   Š Œ t  |  ƒ Sd  S(   N(   s	   _Databases   file(   s   files   flags   modes   /usr/lib/python/mac/dbmac.pys   openN(	   s   __doc__s
   __import__s   _oss   __builtin__s   opens   _opens
   _BLOCKSIZEs	   _Databases   None(    s   /usr/lib/python/mac/dbmac.pys   ?