a
    f¼Dfr  ã                   @   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   sŽ   |s$t jd|d}t |¡ d| _nd| _|| _tj |¡sntt	ƒ t 
|¡ W d   ƒ n1 sd0    Y  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   úW/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/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  ¡  z–| ¡ D ]z\}}|  |¡}tj tj |¡¡sPt tj |¡¡ t	|dƒ(}| 
|¡ |rtt |¡ W d   ƒ q1 sˆ0    Y  qW |r¶| j  ¡  n|r´| j  ¡  0 d S )NÚab)r   ÚacquireÚitemsr   r   r   r   Údirnamer   ÚopenÚwriteÚfsyncÚrelease)	r   Údatar   r$   ÚkwargsÚkÚvÚfnÚfr   r   r   r   "   s    

,zFile.appendc              	   K   s¸   t |tttfƒsJ ‚|r"| j ¡  z€g }|D ]d}zBt|  |¡dƒ}| | 	¡ ¡ W d   ƒ n1 sf0    Y  W q, t
yŽ   | d¡ Y q,0 q,W |r´| j ¡  n|r²| j ¡  0 |S )NÚrbó    )Ú
isinstanceÚlistÚtupleÚsetr   r   r"   r   r   Úreadr   r%   )r   Úkeysr   r'   ÚresultÚkeyr+   r   r   r   Ú_get0   s     
0ÿz	File._getc                 C   s    |   |¡}tj tj |¡¡s0t tj |¡¡ |r>| j ¡  zLt|   |¡dƒ}| 	|¡ W d  ƒ n1 sp0    Y  W |rœ| j 
¡  n|rš| j 
¡  0 dS )z Idempotent set ÚwbN)r   r   r   r   r!   r   r   r   r"   r#   r%   )r   r5   Úvaluer   r*   r+   r   r   r   Ú_isetA   s    

*ÿz
File._isetc                 C   sb   |r| j  ¡  z>|D ]&}t| j|ƒ}tj |¡rt |¡ qW |r^| j  ¡  n|r\| j  ¡  0 d S ©N)r   r   r   r   r   r   Úremover%   )r   r3   r   r5   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   r5   r   r   r   r   a   s    zFile.filenamec                 G   s   |   ¡  t | j¡ d S r:   )rA   r   Úrmdirr   )r   Úargsr   r   r   Ú__exit__d   s    zFile.__exit__c                 C   s   | j s|  ¡  t | j¡ d S r:   )r   rA   r   rB   r   r   r   r   r   Ú__del__h   s    zFile.__del__)NN)TF)T)T)T)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r6   r9   r<   rA   r   rD   rE   r   r   r   r   r      s   




r   c                 C   s   t j | tt|ƒƒ¡S r:   )r   r   ÚjoinÚescape_filenameÚtoken)r   r5   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'

    Ú )rI   ÚfilterÚvalid_charsÚ__contains__©r*   r   r   r   rJ   v   s    rJ   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   rI   ÚmaprK   )r5   r   r   r   rK      s
    

rK   c                  C   s$   t D ]} tj | ¡rt | ¡ qd S r:   )r
   r   r   r   r=   r>   rP   r   r   r   Úcleanup“   s    rS   )ÚatexitÚ
contextlibr   r   r=   Ústringr   Úcorer   r   r   r   Úascii_lettersÚdigitsr   ÚseprN   rJ   rK   r/   r
   ÚregisterrS   r   r   r   r   Ú<module>   s   b