
    n%@er                         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e          Z
d Zdej        z   ej        z   ej        j        z   Zd	 Zd
 Z e            Ze j        d             ZdS )    N)suppress   )	Interfacec                   Z    e Zd ZddZd Zd ZddZddZdd	Zdd
Z	d Z
d Zd Zd ZdS )FileNc                    |s8t          j        d|          }t                              |           d| _        nd| _        || _        t          j                            |          s@t          t                    5  t          j
        |           d d d            n# 1 swxY w Y   t          j        |                     d                    | _        t          j        |            d S )Nz.partd)suffixdirFTz.lock)tempfilemkdtempcleanup_filesappend_explicitly_given_pathpathosexistsr   OSErrormakedirslocket	lock_filefilenamelockr   __init__)selfr   r
   s      *lib/python3.11/site-packages/partd/file.pyr   zFile.__init__   s    	/#8===D  &&&*/D''*.D'	w~~d## 	"'"" " "D!!!" " " " " " " " " " " " " " "$T]]7%;%;<<	4     s   <BB!$B!c                     d| j         iS Nr   )r   r   s    r   __getstate__zFile.__getstate__   s    	""    c                 r    t          j        | |           t                              | |d                    d S r   )r   __setstate__r   r   )r   states     r   r"   zFile.__setstate__   s3    tU+++dE&M*****r    TFc                    |r| j                                          	 |                                D ]\  }}|                     |          }t          j                            t          j                            |                    s1t	          j        t          j                            |                     t          |d          5 }|
                    |           |rt	          j        |           d d d            n# 1 swxY w Y   	 |r| j                                          d S d S # |r| j                                          w w xY w)Nab)r   acquireitemsr   r   r   r   dirnamer   openwritefsyncrelease)	r   datar   r+   kwargskvfnfs	            r   r   zFile.append"   sa   $""$$$
	)

 $ $1]]1%%w~~bgoob&9&9:: 5K 3 3444"d^^ $qGGAJJJ $$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ (TY&&(((((((t(TY&&(((((s0   B+D, ,D 4D,  D	D, D	D, ,E
c                     t          |t          t          t          f          sJ |r| j                                         	 g }|D ]}	 t          |                     |          d          5 }|                    |	                                           d d d            n# 1 swxY w Y   f# t          $ r |                    d           Y w xY w	 |r| j                                         n!# |r| j                                         w w xY w|S )Nrbr    )
isinstancelisttuplesetr   r&   r)   r   r   readr   r,   )r   keysr   r.   resultkeyr2   s          r   _getz	File._get0   sh   $uc 233333 	 I
	$F ' ''dmmC00$77 01affhh///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ' ' 'MM#&&&&&'	'  $	!!###  $	!!####$sT   C- #B++(BB+B#	#B+&B#	'B+*C- +C
C- CC- -Dc                 ^   |                      |          }t          j                            t          j                            |                    s1t          j        t          j                            |                     |r| j                                         	 t          |                      |          d          5 }|	                    |           ddd           n# 1 swxY w Y   |r| j        
                                 dS dS # |r| j        
                                 w w xY w)z Idempotent set wbN)r   r   r   r   r(   r   r   r&   r)   r*   r,   )r   r<   valuer   r1   r2   s         r   _isetz
File._isetA   sH   ]]3w~~bgoob1122 	-K++,,, 	 I	$dmmC(($// 1                $	!!#####$ $t $	!!####$s0   #D C$D $C((D +C(,D D,c                 V   |r| j                                          	 |D ]J}t          | j        |          }t          j                            |          rt	          j        |           K	 |r| j                                          d S d S # |r| j                                          w w xY wN)r   r&   r   r   r   r   remover,   )r   r:   r   r<   r   s        r   _deletezFile._deleteO   s     	 I	$ $ $	3//7>>$'' $IdOOO$
  $	!!#####$ $t $	!!####$s   AB
 
B(c                     t           j                            | j                  rt          j        | j                   | j                                         t          j        | j                   d S rC   )r   r   r   shutilrmtree
_iset_seenclearmkdirr   s    r   dropz	File.drop[   sX    7>>$)$$ 	%M$)$$$
r    c                 ,    t          | j        |          S rC   )r   r   )r   r<   s     r   r   zFile.filenamea   s    	3'''r    c                 `    |                                   t          j        | j                   d S rC   )rL   r   rmdirr   )r   argss     r   __exit__zFile.__exit__d   s'    		
r    c                 r    | j         s/|                                  t          j        | j                   d S d S rC   )r   rL   r   rO   r   r   s    r   __del__zFile.__del__h   s<    * 	 IIKKKHTY	  	 r    )NN)TF)T)__name__
__module____qualname__r   r   r"   r   r=   rA   rE   rL   r   rQ   rS    r    r   r   r      s        ! ! ! !# # #+ + +) ) ) )   "$ $ $ $
$ 
$ 
$ 
$  ( ( (           r    r   c                 v    t           j                            | t          t	          |                              S rC   )r   r   joinescape_filenametoken)r   r<   s     r   r   r   n   s&    7<<oeCjj99:::r    z-_.() c                 \    d                     t          t          j        |                     S )zc Escape text so that it is a valid filename

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

     )rY   filtervalid_chars__contains__r1   s    r   rZ   rZ   v   s#     776+2B77888r    c                     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'
    )r5   strr7   r   r   rY   mapr[   )r<   s    r   r[   r[      sO     #s 
	C		 w|S__--3xxr    c                      t           D ]5} t          j                            |           rt	          j        |            6d S rC   )r   r   r   r   rG   rH   ra   s    r   cleanuprf      sB      7>>" 	M" r    )atexit
contextlibr   r   rG   stringr   corer   r   r   r   ascii_lettersdigitsr   sepr_   rZ   r[   r6   r   registerrf   rW   r    r   <module>ro      s          				          _  _  _  _  _ 9 _  _  _ D; ; ;
 --=K9 9 9        r    