File: //lib64/python3.6/dbm/__pycache__/dumb.cpython-36.opt-1.pyc
3
  \�.  �               @   sT   d Z ddlZddlZddlZddlZddgZdZ	e
ZG dd� dej�Z
dd
d�ZdS )a�  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')
�    N�error�openi   c               @   s�   e Zd ZeZeZd+dd�Zdd� Zdd� Zdd	� ZeZ	d
d� Z
dd
� Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� ZeZd d!� Zd"d#� ZeZd$d%� Zd&d'� Zd(d)� Zd*S ),�	_Database�cc             C   sJ   || _ |dk| _|d | _|d | _|d | _d | _| j|� | j�  d S )N�rz.dirz.datz.bak)�_mode�	_readonly�_dirfile�_datfile�_bakfile�_index�_create�_update)�selfZfilebasename�mode�flag� r   � /usr/lib64/python3.6/dbm/dumb.py�__init__0   s    
z_Database.__init__c             C   s�   |dkrFx<| j | j| jfD ](}ytj|� W q tk
r@   Y qX qW ytj| j ddd�}W n^ tk
r�   |dkr�dd l}|j	dt
dd	� tj| j d
dd��}| j| j � W d Q R X Y n
X |j�  d S )N�nr   zLatin-1)�encodingr   r   zIThe database file is missing, the semantics of the 'c' flag will be used.�   )�
stacklevel�w)r   r   )
r
   r   r	   �_os�remove�OSError�_ior   �warnings�warn�DeprecationWarning�_chmod�close)r   r   �filename�fr   r   r   r   r
   I   s     
z_Database._createc             C   s�   i | _ ytj| jddd�}W n tk
r:   | j | _Y nPX d| _|�> x6|D ].}|j� }tj	|�\}}|j
d�}|| j |<