o
    Nrfr  ã                   @   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 |¡s7tt	ƒ t 
|¡ W d   ƒ n1 s2w   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   úS/var/www/html/software/conda/envs/catlas/lib/python3.10/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  ¡  zN| ¡ D ]=\}}|  |¡}tj tj |¡¡s(t tj |¡¡ t	|dƒ}| 
|¡ |r:t |¡ W d   ƒ n1 sDw   Y  qW |rT| j  ¡  d S d S |r^| j  ¡  w w )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 ]1}z!t|  |¡dƒ}| | 	¡ ¡ W d   ƒ n1 s3w   Y  W q t
yG   | d¡ Y qw W |rP| j ¡  |S |rZ| j ¡  w w )NÚrbó    )Ú
isinstanceÚlistÚtupleÚsetr   r   r"   r   r   Úreadr   r%   )r   Úkeysr   r'   ÚresultÚkeyr+   r   r   r   Ú_get0   s*   
ÿ€ÿü
þÿz	File._getc                 C   s¤   |   |¡}tj tj |¡¡st tj |¡¡ |r| j ¡  z)t|   |¡dƒ}| 	|¡ W d  ƒ n1 s8w   Y  W |rG| j 
¡  dS dS |rQ| j 
¡  w w )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   sf   |r| j  ¡  z"|D ]}t| j|ƒ}tj |¡rt |¡ q
W |r(| j  ¡  d S d S |r2| j  ¡  w w ©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 d S r:   )r   rA   r   rB   r   r   r   r   r   Ú__del__h   s   þzFile.__del__)NN)TF)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   s2   t | tƒr| S t | tƒrtjjtt| ƒŽ S t| ƒS )zo

    >>> token('hello')
    'hello'
    >>> token(('hello', 'world'))  # doctest: +SKIP
    'hello/world'
    )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