ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     
f%  c               @   sq   d  Z  d d l Z d d l Z d d l Z d d g Z d Z e Z	 Gd d   d e j
  Z d d d	 d  Z d S(
   u  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')

i    Nu   erroru   openi   c             B   s   |  Ee  Z d  Z e Z e Z d d   Z d d   Z d d   Z e Z d d   Z	 d	 d
   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z e Z d d   Z d d   Z e Z d d    Z d! S("   u	   _Databasec             C   s   | |  _  | d |  _ | d |  _ | d |  _ d  |  _ y t j |  j d d d } Wn= t k
 r t j |  j d d d } |  j	 |  j  Yn X| j
   |  j   d  S(   Nu   .diru   .datu   .baku   ru   encodingu   Latin-1u   w(   u   _modeu   _dirfileu   _datfileu   _bakfileu   Noneu   _indexu   _iou   openu   IOErroru   _chmodu   closeu   _update(   u   selfu   filebasenameu   modeu   f(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   __init__/   s    		
u   _Database.__init__c             C   s   i  |  _  y t j |  j d d d } Wn t k
 r< YnV XxH | D]@ } | j   } t |  \ } } | j d  } | |  j  | <qD W| j   d  S(   Nu   ru   encodingu   Latin-1(	   u   _indexu   _iou   openu   _dirfileu   IOErroru   rstripu   evalu   encodeu   close(   u   selfu   fu   lineu   keyu   pos_and_siz_pair(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   _updateM   s    	u   _Database._updatec             C   s   |  j  d  k r d  Sy |  j j |  j  Wn |  j j k
 rD Yn Xy |  j j |  j |  j  Wn |  j j k
 r| Yn X|  j j	 |  j d d d } |  j
 |  j  x= |  j  j   D], \ } } | j d | j d  | f  q W| j   d  S(   Nu   wu   encodingu   Latin-1u   %r, %r
(   u   _indexu   Noneu   _osu   unlinku   _bakfileu   erroru   renameu   _dirfileu   _iou   openu   _chmodu   itemsu   writeu   decodeu   close(   u   selfu   fu   keyu   pos_and_siz_pair(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   _commit^   s    $u   _Database._commitc             C   ss   t  | t  r! | j d  } n  |  j | \ } } t j |  j d  } | j |  | j |  } | j	   | S(   Nu   utf-8u   rb(
   u
   isinstanceu   stru   encodeu   _indexu   _iou   openu   _datfileu   seeku   readu   close(   u   selfu   keyu   posu   sizu   fu   dat(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   __getitem__y   s    
u   _Database.__getitem__c             C   s   t  j |  j d  } | j d d  t | j    } | t d t t } | j d | |  | } | j |  | j   | t	 |  f S(   Nu   rb+i    i   i   s    (
   u   _iou   openu   _datfileu   seeku   intu   tellu
   _BLOCKSIZEu   writeu   closeu   len(   u   selfu   valu   fu   posu   npos(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   _addval   s    
u   _Database._addvalc             C   sI   t  j |  j d  } | j |  | j |  | j   | t |  f S(   Nu   rb+(   u   _iou   openu   _datfileu   seeku   writeu   closeu   len(   u   selfu   posu   valu   f(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   _setval   s
    
u   _Database._setvalc             C   sf   | |  j  | <t j |  j d d d } |  j |  j  | j d | j d  | f  | j   d  S(   Nu   au   encodingu   Latin-1u   %r, %r
(   u   _indexu   _iou   openu   _dirfileu   _chmodu   writeu   decodeu   close(   u   selfu   keyu   pos_and_siz_pairu   f(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   _addkey   s
     u   _Database._addkeyc             C   s4  t  | t  r! | j d  } n$ t  | t t f  sE t d   n  t  | t  rf | j d  } n$ t  | t t f  s t d   n  | |  j k r |  j | |  j |   n{ |  j | \ } } | t	 d t	 } t
 |  t	 d t	 } | | k r|  j | |  |  j | <n |  j |  |  j | <d  S(   Nu   utf-8u   keys must be bytes or stringsu   values must be bytes or stringsi   (   u
   isinstanceu   stru   encodeu   bytesu	   bytearrayu	   TypeErroru   _indexu   _addkeyu   _addvalu
   _BLOCKSIZEu   lenu   _setval(   u   selfu   keyu   valu   posu   sizu	   oldblocksu	   newblocks(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   __setitem__   s     u   _Database.__setitem__c             C   s9   t  | t  r! | j d  } n  |  j | =|  j   d  S(   Nu   utf-8(   u
   isinstanceu   stru   encodeu   _indexu   _commit(   u   selfu   key(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   __delitem__   s    
u   _Database.__delitem__c             C   s   t  |  j j    S(   N(   u   listu   _indexu   keys(   u   self(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   keys   s    u   _Database.keysc                s      f d d     j  j   D S(   Nc                s    g  |  ] } |   | f  q S(    (    (   u   .0u   key(   u   self(    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu
   <listcomp>   s   	 u#   _Database.items.<locals>.<listcomp>(   u   _indexu   keys(   u   self(    (   u   selfu-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   items   s    u   _Database.itemsc             C   s.   t  | t  r! | j d  } n  | |  j k S(   Nu   utf-8(   u
   isinstanceu   stru   encodeu   _index(   u   selfu   key(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   __contains__   s    u   _Database.__contains__c             C   s   t  |  j j    S(   N(   u   iteru   _indexu   keys(   u   self(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   iterkeys   s    u   _Database.iterkeysc             C   s   t  |  j  S(   N(   u   lenu   _index(   u   self(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   __len__   s    u   _Database.__len__c             C   s,   |  j    d  |  _ |  _ |  _ |  _ d  S(   N(   u   _commitu   Noneu   _indexu   _datfileu   _dirfileu   _bakfile(   u   self(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   close   s    
u   _Database.closec             C   s/   t  |  j d  r+ |  j j | |  j  n  d  S(   Nu   chmod(   u   hasattru   _osu   chmodu   _mode(   u   selfu   file(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   _chmod   s    u   _Database._chmodN(   u   __name__u
   __module__u   __qualname__u   _osu   _iou   __init__u   _updateu   _commitu   syncu   __getitem__u   _addvalu   _setvalu   _addkeyu   __setitem__u   __delitem__u   keysu   itemsu   __contains__u   iterkeysu   __iter__u   __len__u   closeu   __del__u   _chmod(   u
   __locals__(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu	   _Database"   s*   

!u	   _Databasei  c             C   sM   y  t  j d  } t  j |  Wn t k
 r4 Yn X| | @} t |  |  S(   u  Open the database file, filename, and return corresponding object.

    The flag argument, used to control how the database is opened in the
    other DBM implementations, is ignored in the dbm.dumb module; the
    database is always opened for update, and will be created if it does
    not exist.

    The optional mode argument is the UNIX mode of the file, used only when
    the database has to be created.  It defaults to octal code 0o666 (and
    will be modified by the prevailing umask).

    i    (   u   _osu   umasku   AttributeErroru	   _Database(   u   fileu   flagu   modeu   um(    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   open   s    (   u   __doc__u   iou   _iou   osu   _osu   collectionsu   __all__u
   _BLOCKSIZEu   IOErroru   erroru   MutableMappingu	   _Databaseu   Noneu   open(    (    (    u-   /opt/alt/python33/lib64/python3.3/dbm/dumb.pyu   <module>   s   