a
    "h-                     @   sR   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   0/opt/python-3.9.21/usr/lib/python3.9/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0 qztj| j ddd}W nZ ty   |dvrn tj| j ddd}| | j  W d    n1 s0    Y  Y n
0 |	  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    0z_Database._createc                 C   s   d| _ i | _ztj| jddd}W n" tyD   |dvr: d| _ Y nZ0 |D |D ].}| }t|\}}|	d}|| j|< qPW d    n1 s0    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y8   Y n0 z| j| j| j W n tyb   Y n0 | jj	| jdddL}| 
| j | j  D ]$\}}d|d|f }|| qW d    n1 s0    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   sp   t |tr|d}|   | j| \}}t| jd$}|| |	|}W d    n1 sb0    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 sp0    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 s80    Y  |t|fS )Nr?   )r   r   r
   r:   r/   rF   )r   r<   rG   r"   r   r   r   _setval   s    
(z_Database._setvalc                 C   sd   || j |< tj| jddd4}| | j |d|d|f  W d    n1 sV0    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rP|d}nt|ttfsftd|   d| _	|| j
vr| || | n^| j
| \}}|t d t }t|t d t }||kr| ||| j
|< n| || 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   s.   zt | jW S  ty(   tdd Y n0 d S r2   )listr   rO   r   r4   r   r   r   keys   s    z_Database.keysc                    s         fdd j D S )Nc                    s   g | ]}| | fqS r   r   ).0r(   r4   r   r   
<listcomp>       z#_Database.items.<locals>.<listcomp>)r5   r   rT   r4   r   r4   r   r-      s    z_Database.itemsc                 C   sP   t |tr|d}z|| jv W S  tyJ   | jd u rDtdd n Y n0 d S )Nr6   r3   )r8   r9   r&   r   rO   r   rQ   r   r   r   __contains__   s    


z_Database.__contains__c                 C   s.   zt | jW S  ty(   tdd Y n0 d S r2   )iterr   rO   r   r4   r   r   r   iterkeys  s    z_Database.iterkeysc                 C   s.   zt | jW S  ty(   tdd Y n0 d S r2   )rF   r   rO   r   r4   r   r   r   __len__
  s    z_Database.__len__c              	   C   sD   z$|    W d  | _ | _ | _| _nd  | _ | _ | _| _0 d S N)r1   r   r
   r	   r   r4   r   r   r   r      s    
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   rT   r-   rX   rZ   __iter__r[   r    __del__r   r_   ra   r   r   r   r   r   #   s2   

	%r   r     c                 C   sT   zt d}t | W n ty*   Y n0 || @ }|dvrFt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   rh   )astr%   ior   osr   collections.abccollections__all__rE   r   r   abcMutableMappingr   r   r   r   r   r   <module>   s     