B
    \_                 @   s   d dl mZmZmZ yd dlmZ W n  ek
rD   d dlmZ Y nX d dlZd dl	Z	G dd deZ
ejd  dkr~dd Znd	d
 ZdS )    )absolute_importdivisionprint_function)MutableMappingNc               @   s   e Zd ZdZd ddZe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dd Zdd ZdS )!Zipa   Mutable Mapping interface to a Zip file

    Keys must be strings, values must be bytes

    Parameters
    ----------
    filename: string
    mode: string, ('r', 'w', 'a'), defaults to 'a'

    Examples
    --------
    >>> z = Zip('myfile.zip')  # doctest: +SKIP
    >>> z['x'] = b'123'  # doctest: +SKIP
    >>> z['x']  # doctest: +SKIP
    b'123'
    >>> z.flush()  # flush and write metadata to disk  # doctest: +SKIP
    ac             C   s   || _ || _d | _d S )N)filenamemode_file)selfr   r	    r   'lib/python3.7/site-packages/zict/zip.py__init__   s    zZip.__init__c             C   s:   | j dkrtd| jr | jjs4tj| j| j d| _| jS )NclosedzFile closed)r	   )r	   IOErrorr
   fpzipfileZZipFiler   )r   r   r   r   file"   s
    
zZip.filec             C   s   | j |S )N)r   read)r   keyr   r   r   __getitem__*   s    zZip.__getitem__c             C   s   | j |t| d S )N)r   Zwritestrto_bytes)r   r   valuer   r   r   __setitem__-   s    zZip.__setitem__c             C   s   dd | j jD S )Nc             s   s   | ]}|j V  qd S )N)r   ).0zir   r   r   	<genexpr>1   s    zZip.keys.<locals>.<genexpr>)r   filelist)r   r   r   r   keys0   s    zZip.keysc             C   s   t | jj|  S )N)mapr   r   r   )r   r   r   r   values3   s    z
Zip.valuesc                s    fdd j jD S )Nc             3   s"   | ]}|j  j|j fV  qd S )N)r   r   r   )r   r   )r   r   r   r   7   s   zZip.items.<locals>.<genexpr>)r   r   )r   r   )r   r   items6   s    
z	Zip.itemsc             C   s   |   S )N)r   )r   r   r   r   __iter__:   s    zZip.__iter__c             C   s   t dd S )NzNot supported by stdlib zipfile)NotImplementedError)r   r   r   r   r   __delitem__=   s    zZip.__delitem__c             C   s   t | jjS )N)lenr   r   )r   r   r   r   __len__@   s    zZip.__len__c             C   s   | j j  | j   d S )N)r   r   flushclose)r   r   r   r   r'   C   s    z	Zip.flushc             C   s   |    d| _d S )Nr   )r'   r	   )r   r   r   r   r(   G   s    z	Zip.closec             C   s   | S )Nr   )r   r   r   r   	__enter__K   s    zZip.__enter__c             C   s   |    d S )N)r(   )r   typer   	tracebackr   r   r   __exit__N   s    zZip.__exit__N)r   )__name__
__module____qualname____doc__r   propertyr   r   r   r   r    r!   r"   r$   r&   r'   r(   r)   r,   r   r   r   r   r      s   
r      c             C   s   t | trt| S | S )N)
isinstance	bytearraybytes)xr   r   r   r   S   s    
r   c             C   s   | S )Nr   )r6   r   r   r   <lambda>X   s    r7   )Z
__future__r   r   r   Zcollections.abcr   ImportErrorcollectionssysr   r   version_infor   r   r   r   r   <module>   s   G
