U
    ª/er  ã                   @   s    d dl Z d dlmZ d dlZd dlZd dlZd dlZddlmZ d dl	Z	G dd„ deƒZ
dd„ Zd	ej ej ejj Zd
d„ Zdd„ Zeƒ Ze jdd„ ƒZdS )é    N)Úsuppressé   )Ú	Interfacec                   @   sn   e Zd Zddd„Zdd„ Zdd„ Zdd
d„Zddd„Zddd„Zddd„Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚFileNc              	   C   sz   |s$t jd|d}t |¡ d| _nd| _|| _tj |¡sZtt	ƒ t 
|¡ W 5 Q R X t |  d¡¡| _t | ¡ d S )Nz.partd)ÚsuffixÚdirFTz.lock)ÚtempfileÚmkdtempÚcleanup_filesÚappendÚ_explicitly_given_pathÚpathÚosÚexistsr   ÚOSErrorÚmakedirsÚlocketZ	lock_fileÚfilenameÚlockr   Ú__init__)Úselfr   r   © r   ú./tmp/pip-unpacked-wheel-ziavv1t7/partd/file.pyr      s    

zFile.__init__c                 C   s
   d| j iS ©Nr   )r   ©r   r   r   r   Ú__getstate__   s    zFile.__getstate__c                 C   s    t  | |¡ t | |d ¡ d S r   )r   Ú__setstate__r   r   )r   Ústater   r   r   r      s    zFile.__setstate__TFc           	   
   K   s˜   |r| j  ¡  zt| ¡ D ]f\}}|  |¡}tj tj |¡¡sPt 	tj |¡¡ t
|dƒ}| |¡ |rtt |¡ W 5 Q R X qW 5 |r’| j  ¡  X d S )NÚab)r   ÚacquireÚreleaseÚitemsr   r   r   r   Údirnamer   ÚopenÚwriteÚfsync)	r   Údatar   r%   ÚkwargsÚkÚvÚfnÚfr   r   r   r   "   s     


 zFile.appendc              
   K   s˜   t |tttfƒst‚|r"| j ¡  z`g }|D ]R}z.t|  	|¡dƒ}| 
| ¡ ¡ W 5 Q R X W q, tk
r|   | 
d¡ Y q,X q,W 5 |r’| j ¡  X |S )NÚrbó    )Ú
isinstanceÚlistÚtupleÚsetÚAssertionErrorr   r   r    r#   r   r   Úreadr   )r   Úkeysr   r'   ÚresultÚkeyr+   r   r   r   Ú_get0   s    
z	File._getc              	   C   s~   |   |¡}tj tj |¡¡s0t tj |¡¡ |r>| j ¡  z*t	|   |¡dƒ}| 
|¡ W 5 Q R X W 5 |rx| j ¡  X dS )z Idempotent set ÚwbN)r   r   r   r   r"   r   r   r   r    r#   r$   )r   r6   Úvaluer   r*   r+   r   r   r   Ú_isetA   s    

z
File._isetc                 C   sT   |r| j  ¡  z0|D ]&}t| j|ƒ}tj |¡rt |¡ qW 5 |rN| j  ¡  X d S ©N)r   r   r    r   r   r   r   Úremove)r   r4   r   r6   r   r   r   r   Ú_deleteO   s    
zFile._deletec                 C   s4   t j | j¡rt | j¡ | j ¡  t  | j¡ d S r;   )r   r   r   ÚshutilÚrmtreeZ
_iset_seenÚclearÚmkdirr   r   r   r   Údrop[   s    
z	File.dropc                 C   s   t | j|ƒS r;   )r   r   )r   r6   r   r   r   r   a   s    zFile.filenamec                 G   s   |   ¡  t | j¡ d S r;   )rB   r   Úrmdirr   )r   Úargsr   r   r   Ú__exit__d   s    zFile.__exit__c                 C   s   | j s|  ¡  t | j¡ d S r;   )r   rB   r   rC   r   r   r   r   r   Ú__del__h   s    zFile.__del__)NN)TF)T)T)T)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r7   r:   r=   rB   r   rE   rF   r   r   r   r   r      s   




r   c                 C   s   t j | tt|ƒƒ¡S r;   )r   r   ÚjoinÚescape_filenameÚtoken)r   r6   r   r   r   r   n   s    r   z-_.() c                 C   s   d  ttj| ƒ¡S )zc Escape text so that it is a valid filename

    >>> escape_filename('Foo!bar?')
    'Foobar'

    Ú )rJ   ÚfilterÚvalid_charsÚ__contains__©r*   r   r   r   rK   v   s    rK   c                 C   s6   t | tƒr| S t | tƒr*tjjtt| ƒŽ S t| ƒS dS )zo

    >>> token('hello')
    'hello'
    >>> token(('hello', 'world'))  # doctest: +SKIP
    'hello/world'
    N)r.   Ústrr0   r   r   rJ   ÚmaprL   )r6   r   r   r   rL      s
    

rL   c                  C   s$   t D ]} tj | ¡rt | ¡ qd S r;   )r
   r   r   r   r>   r?   rQ   r   r   r   Úcleanup“   s    rT   )ÚatexitÚ
contextlibr   r   r>   Ústringr   Úcorer   r   r   r   Úascii_lettersÚdigitsr   ÚseprO   rK   rL   r/   r
   ÚregisterrT   r   r   r   r   Ú<module>   s   b