o
     JAf-                     @   sT   	 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 dejjZd
d	dZdS )    Nerroropeni   c                   @   s   e Zd ZeZeZd+dd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dd ZeZd d! Zd"d# ZeZd$d% Zd&d' Zd(d) Zd*S ),	_Databasecc                 C   sL   || _ |dk| _|d | _|d | _|d | _d | _| | | | d S )Nrz.dirz.datz.bak)_mode	_readonly_dirfile_datfile_bakfile_index_create_update)selfZfilebasenamemodeflag r   /usr/lib/python3.10/dbm/dumb.py__init__0   s   




z_Database.__init__c                 C   s   |dkr| j | j| jfD ]}zt| W q ty   Y qw ztj| j ddd}W n0 tyZ   |dvr6 tj| j ddd}| | j  W d    Y d S 1 sRw   Y  Y d S w |	  d S )Nnr   Latin-1encodingr   r   w)
r
   r   r	   _osremoveOSError_ior   _chmodclose)r   r   filenamefr   r   r   r   I   s"   &z_Database._createc                 C   s   d| _ i | _ztj| jddd}W n ty#   |dvr d| _ Y d S w |# |D ]}| }t|\}}|	d}|| j|< q)W d    d S 1 sLw   Y  d S )NFr   r   r   r   T)
	_modifiedr   r   r   r	   r   rstrip_astZliteral_evalencode)r   r   r"   linekeypos_and_siz_pairr   r   r   r   \   s"   
"z_Database._updatec                 C   s   | j d u s| js
d S z	| j| j W n	 ty   Y nw z| j| j| j W n	 ty1   Y nw | jj	| jddd'}| 
| j | j  D ]\}}d|d|f }|| qHW d    d S 1 sfw   Y  d S )Nr   r   r   %r, %r
)r   r#   r   unlinkr   r   renamer	   r   r   r   itemsdecodewrite)r   r"   r(   r)   entryr   r   r   _commitp   s&   "z_Database._commitc                 C   s   | j d u r	tdd S N"DBM object has already been closed)r   r   r   r   r   r   _verify_open   s   
z_Database._verify_openc                 C   sr   t |tr
|d}|   | j| \}}t| jd}|| |	|}W d    |S 1 s2w   Y  |S )Nutf-8rb)

isinstancestrr&   r5   r   r   r   r
   seekread)r   r(   possizr"   Zdatr   r   r   __getitem__   s   



z_Database.__getitem__c                 C   s   t | jd.}|dd t| }|t d t t }|d||   |}|| W d    n1 s8w   Y  |t|fS )Nrb+r             )	r   r   r
   r:   inttell
_BLOCKSIZEr/   len)r   valr"   r<   Znposr   r   r   _addval   s   z_Database._addvalc                 C   sN   t | jd}|| || W d    n1 sw   Y  |t|fS )Nr?   )r   r   r
   r:   r/   rF   )r   r<   rG   r"   r   r   r   _setval   s
   
z_Database._setvalc                 C   sf   || j |< tj| jddd}| | j |d|d|f  W d    d S 1 s,w   Y  d S )Nar   r   r*   )r   r   r   r	   r   r/   r.   )r   r(   r)   r"   r   r   r   _addkey   s
   
"z_Database._addkeyc                 C   s   | j rtdt|tr|d}nt|ttfstdt|tr(|d}nt|ttfs3td|   d| _	|| j
vrJ| || | d S | j
| \}}|t d t }t|t d t }||krr| ||| j
|< d S | || j
|< d S )N'The database is opened for reading onlyr6   zkeys must be bytes or stringszvalues must be bytes or stringsTrA   )r   r   r8   r9   r&   bytes	bytearray	TypeErrorr5   r#   r   rK   rH   rE   rF   rI   )r   r(   rG   r<   r=   Z	oldblocksZ	newblocksr   r   r   __setitem__   s(   


z_Database.__setitem__c                 C   sD   | j rtdt|tr|d}|   d| _| j|= |   d S )NrL   r6   T)	r   r   r8   r9   r&   r5   r#   r   r1   r   r(   r   r   r   __delitem__   s   

z_Database.__delitem__c                 C   &   zt | jW S  ty   tdd w r2   )listr   rO   r   r4   r   r   r   keys   
   
z_Database.keysc                    s         fdd j D S )Nc                    s   g | ]}| | fqS r   r   ).0r(   r4   r   r   
<listcomp>   s    z#_Database.items.<locals>.<listcomp>)r5   r   rU   r4   r   r4   r   r-      s   z_Database.itemsc                 C   sF   t |tr
|d}z|| jv W S  ty"   | jd u r!tdd  w )Nr6   r3   )r8   r9   r&   r   rO   r   rQ   r   r   r   __contains__   s   



z_Database.__contains__c                 C   rS   r2   )iterr   rO   r   r4   r   r   r   iterkeys  rV   z_Database.iterkeysc                 C   rS   r2   )rF   r   rO   r   r4   r   r   r   __len__
  rV   z_Database.__len__c              	   C   sB   z|    W d  | _ | _ | _| _d S d  | _ | _ | _| _w N)r1   r   r
   r	   r   r4   r   r   r   r      s   
6z_Database.closec                 C   s   | j || j d S r]   )r   chmodr   )r   filer   r   r   r     s   z_Database._chmodc                 C   s   | S r]   r   r4   r   r   r   	__enter__  s   z_Database.__enter__c                 G   s   |    d S r]   )r    )r   argsr   r   r   __exit__  s   z_Database.__exit__N)r   )__name__
__module____qualname__r   r   r   r   r   r1   syncr5   r>   rH   rI   rK   rP   rR   rU   r-   rY   r[   __iter__r\   r    __del__r   r`   rb   r   r   r   r   r   #   s4    

	%r   r     c                 C   sV   	 zt d}t | W n	 ty   Y nw || @ }|dvr$tdt| ||dS )Nr   )r   r   r   r   z)Flag must be one of 'r', 'w', 'c', or 'n')r   )r   umaskAttributeError
ValueErrorr   )r_   r   r   Zumr   r   r   r   "  s   

)r   ri   )astr%   ior   osr   collections.abccollections__all__rE   r   r   abcMutableMappingr   r   r   r   r   r   <module>   s      