
    z%iJ-                     |    	 d dl Zd dlZd dlZd dlZddgZdZ	e
Z G d dej                  j                        ZddZy)	    Nerroropeni   c                       e Zd ZeZeZddZd Zd Zd ZeZ	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd ZeZd Zd ZeZd Zd Zd Zy)	_Databasec                     | j                   j                  |      }|| _        |dk(  | _        |dz   | _        |dz   | _        |dz   | _        d | _        | j                  |       | j                  |       y )Nrs   .dirs   .dats   .bak)
_osfsencode_mode	_readonly_dirfile_datfile_bakfile_index_create_update)selffilebasenamemodeflags       </home/uftp/.pyenv/versions/3.12.0/lib/python3.12/dbm/dumb.py__init__z_Database.__init__0   ss    xx((6
#+ %w. %w.$w.  	TT    c                    |dk(  r>| j                   | j                  | j                  fD ]  }	 t        j                  |        	 t        j                  | j                   dd      }|j                          y # t
        $ r Y Zw xY w# t
        $ r[ |dvr t        j                  | j                   dd      5 }| j                  | j                          d d d        Y y # 1 sw Y   Y y xY ww xY w)Nnr   Latin-1encodingcr   w)
r   r   r   r	   removeOSError_ior   close_chmod)r   r   filenamefs       r   r   z_Database._createJ   s    3;!]]DMM4==I JJx(	i@A GGI  
  	+:%$--yA +QDMM*+ + +	+s;   A8"B 8	BB0C+7CC+C'	"C+'C+c                 j   d| _         i | _        	 t        j                  | j                  dd      }|5  |D ]J  }|j                         }t        j                  |      \  }}|j                  d      }|| j                  |<   L 	 d d d        y # 1 sw Y   y xY w# t        $ r |dvr d| _         Y y w xY w)NFr   r   r   r   T)
	_modifiedr   r$   r   r   rstrip_astliteral_evalencoder#   )r   r   r(   linekeypos_and_siz_pairs         r   r   z_Database._update]   s    	8i@A  8 8D;;=D,0,=,=d,C)C)**Y/C'7DKK$	88 8 8  	":%!DN	"s   "B ABBB21B2c                 f   | j                   | j                  sy 	 | j                  j                  | j                         	 | j                  j                  | j                  | j                         | j                  j                  | j                  dd      5 }| j                  | j                         | j                   j                         D ]-  \  }}|j                  d      d|d}|j                  |       / 	 d d d        y # t
        $ r Y w xY w# t
        $ r Y w xY w# 1 sw Y   y xY w)Nr!   r   r   , 
)r   r*   r	   unlinkr   r#   renamer   r$   r   r&   itemsdecodewrite)r   r(   r0   r1   entrys        r   _commitz_Database._commitq   s    ;;dnn	HHOODMM*	HHOODMM4==9 XX]]4==#	]B 	aKK&)-):):)< %% '*jj&;=MN		 	  		
  			 	s0   %D	 0D A&D'		DD	D$#D$'D0c                 2    | j                   t        d      y N"DBM object has already been closed)r   r   r   s    r   _verify_openz_Database._verify_open   s    ;;<== r   c                 <   t        |t              r|j                  d      }| j                          | j                  |   \  }}t        j                  | j                  d      5 }|j                  |       |j                  |      }d d d        |S # 1 sw Y   S xY w)Nutf-8rb)

isinstancestrr.   r@   r   r$   r   r   seekread)r   r0   possizr(   dats         r   __getitem__z_Database.__getitem__   s    c3**W%C;;s#SXXdmmT* 	aFF3K&&+C	 
	 
s   $#BBc                 d   t        j                  | j                  d      5 }|j                  dd       t	        |j                               }|t        z   dz
  t        z  t        z  }|j                  d||z
  z         |}|j                  |       d d d        t        |      fS # 1 sw Y   xY w)Nrb+r             )	r$   r   r   rF   inttell
_BLOCKSIZEr9   len)r   valr(   rH   nposs        r   _addvalz_Database._addval   s    XXdmmU+ 	qFF1aLaffh-C:%)j8JFDGGE48$%CGGCL	 SX	 	s   A0B&&B/c                     t        j                  | j                  d      5 }|j                  |       |j	                  |       d d d        |t        |      fS # 1 sw Y   xY w)NrM   )r$   r   r   rF   r9   rT   )r   rH   rU   r(   s       r   _setvalz_Database._setval   sQ    XXdmmU+ 	qFF3KGGCL	 SX	 	s   #AA"c                    || j                   |<   t        j                  | j                  dd      5 }| j	                  | j                         |j                  |j                  d      d|d       d d d        y # 1 sw Y   y xY w)Nar   r   r3   r4   )r   r$   r   r   r&   r9   r8   )r   r0   r1   r(   s       r   _addkeyz_Database._addkey   sj    +CXXdmmS9= 	LKK&GG#**Y"79IJK	L 	L 	Ls   AA==Bc                    | j                   rt        d      t        |t              r|j	                  d      }n!t        |t
        t        f      st        d      t        |t              r|j	                  d      }n!t        |t
        t        f      st        d      | j                          d| _	        || j                  vr"| j                  || j                  |             y | j                  |   \  }}|t        z   dz
  t        z  }t        |      t        z   dz
  t        z  }||k  r | j                  ||      | j                  |<   y | j                  |      | j                  |<   y )N'The database is opened for reading onlyrB   zkeys must be bytes or stringszvalues must be bytes or stringsTrO   )r   r   rD   rE   r.   bytes	bytearray	TypeErrorr@   r*   r   r\   rW   rS   rT   rY   )r   r0   rU   rH   rI   	oldblocks	newblockss          r   __setitem__z_Database.__setitem__   s+   >>ABBc3**W%CC%!34;<<c3**W%CC%!34=>>dkk!LLdll3/0 {{3'HCz)A-*<ISJ.2zAII%#'<<S#9C 
 $(<<#4C r   c                     | j                   rt        d      t        |t              r|j	                  d      }| j                          d| _        | j                  |= | j                          y )Nr^   rB   T)	r   r   rD   rE   r.   r@   r*   r   r;   r   r0   s     r   __delitem__z_Database.__delitem__   sW    >>ABBc3**W%CKK
 	r   c                 `    	 t        | j                        S # t        $ r t        d      d w xY wr=   )listr   ra   r   r?   s    r   keysz_Database.keys   6    	H$$ 	H<=4G	H    -c                     | j                          | j                  j                         D cg c]	  }|| |   f c}S c c}w N)r@   r   rj   rf   s     r   r7   z_Database.items   s8    ,0KK,<,<,>?Sd3i ???s   >c                     t        |t              r|j                  d      }	 || j                  v S # t        $ r | j                  t        d      d  w xY w)NrB   r>   )rD   rE   r.   r   ra   r   rf   s     r   __contains__z_Database.__contains__   sX    c3**W%C	$++%% 	{{"@AtK		s	   1 #Ac                 `    	 t        | j                        S # t        $ r t        d      d w xY wr=   )iterr   ra   r   r?   s    r   iterkeysz_Database.iterkeys  rk   rl   c                 `    	 t        | j                        S # t        $ r t        d      d w xY wr=   )rT   r   ra   r   r?   s    r   __len__z_Database.__len__  s6    	Ht{{## 	H<=4G	Hrl   c                     	 | j                          d x| _        x| _        x| _        | _        y # d x| _        x| _        x| _        | _        w xY wrn   )r;   r   r   r   r   r?   s    r   r%   z_Database.close  sJ    	OLLNJNNDKN$-N$-$-$NDKN$-N$-$-s	   / Ac                 P    | j                   j                  || j                         y rn   )r	   chmodr   )r   files     r   r&   z_Database._chmod  s    tTZZ(r   c                     | S rn    r?   s    r   	__enter__z_Database.__enter__  s    r   c                 $    | j                          y rn   )r%   )r   argss     r   __exit__z_Database.__exit__  s    

r   N)r    )__name__
__module____qualname__r	   r$   r   r   r   r;   syncr@   rK   rW   rY   r\   rd   rg   rj   r7   rp   rs   __iter__ru   r%   __del__r&   r|   r   r{   r   r   r   r   #   s     C
C4&8(2 D>L5JH@	H
 HHO G)r   r   c                     	 	 t        j                  d      }t        j                  |       || z  }|dvrt        d      t	        | ||      S # t        $ r Y (w xY w)Nr   )r   r!   r    r   z)Flag must be one of 'r', 'w', 'c', or 'n')r   )r	   umaskAttributeError
ValueErrorr   )ry   r   r   ums       r   r   r   #  si    YYq\		"
 s|''DEET4d++  s   *A 	AA)r    i  )astr,   ior$   osr	   collections.abccollections__all__rS   r#   r   abcMutableMappingr   r   r{   r   r   <module>r      sJ   .    F

}.. }@,r   