
    gr                        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y)    N)suppress   )	Interfacec                   X    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y)FileNc                    |s4t        j                  d|      }t        j                  |       d| _        nd| _        || _        t        j
                  j                  |      s-t        t              5  t        j                  |       d d d        t        j                  | j                  d            | _        t        j                   |        y # 1 sw Y   HxY w)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.12/site-packages/partd/file.pyr   zFile.__init__   s    ##8=D  &*/D'*.D'	ww~~d#'"D! #$$T]]7%;<	4  #"s   3CCc                     d| j                   iS Nr   )r   r   s    r   __getstate__zFile.__getstate__   s    		""    c                 b    t        j                  | |       t        j                  | |d          y r   )r   __setstate__r   r   )r   states     r   r"   zFile.__setstate__   s$    tU+dE&M*r    c                 ~   |r| j                   j                          	 |j                         D ]  \  }}| j                  |      }t        j
                  j                  t        j
                  j                  |            s2t	        j                  t        j
                  j                  |             t        |d      5 }|j                  |       |rt	        j                  |       d d d         	 |r| j                   j                          y y # 1 sw Y   xY w# |r| j                   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"   s    ""$
	)

1]]1%ww~~bggoob&9:KK 34"d^qGGAJ $^	 % TYY&&(t $^
 TYY&&(ts$   B!D ?)D(
D D	D D<c                    t        |t        t        t        f      sJ |r| j                  j                          	 g }|D ]F  }	 t        | j                  |      d      5 }|j                  |j                                d d d        H 	 |r| j                  j                          |S # 1 sw Y   *xY w# t        $ r |j                  d       Y w xY w# |r| j                  j                          w w xY w)Nrbr    )
isinstancelisttuplesetr   r&   r)   r   r   readr   r,   )r   keysr   r.   resultkeyr2   s          r   _getz	File._get0   s    $uc 2333II
	$F'dmmC0$71affh/ 8  		!!# 87 'MM#&' 		!!# sG   C B3 B'>B3C 'B0	,B33CC CC C2c                 <   | j                  |      }t        j                  j                  t        j                  j	                  |            s2t        j
                  t        j                  j	                  |             |r| j                  j                          	 t        | j                  |      d      5 }|j                  |       ddd       |r| j                  j                          yy# 1 sw Y   'xY w# |r| j                  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   s    ]]3ww~~bggoob12KK+,II	$dmmC($/1 0 		!!#  0/ 		!!# s$   C< 8C0
C< 0C95C< <Dc                 b   |r| j                   j                          	 |D ]M  }t        | j                  |      }t        j                  j                  |      s9t	        j                  |       O 	 |r| j                   j                          y y # |r| j                   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    II	$		3/77>>$'IIdO 
 		!!# t		!!# s   :B B B.c                    t         j                  j                  | j                        rt        j                  | j                         | j
                  j                          t        j                  | j                         y rC   )r   r   r   shutilrmtree
_iset_seenclearmkdirr   s    r   dropz	File.drop[   sF    77>>$))$MM$))$
r    c                 .    t        | j                  |      S rC   )r   r   )r   r<   s     r   r   zFile.filenamea   s    		3''r    c                 b    | j                          t        j                  | j                         y rC   )rL   r   rmdirr   )r   argss     r   __exit__zFile.__exit__d   s    		
r    c                 |    | j                   s0| j                          t        j                  | j                         y y rC   )r   rL   r   rO   r   r   s    r   __del__zFile.__del__h   s)    **IIKHHTYY +r    )NN)TF)T)__name__
__module____qualname__r   r   r"   r   r=   rA   rE   rL   r   rQ   rS    r    r   r   r      s9    !#+)"$
$( r    r   c                 f    t         j                  j                  | t        t	        |                  S rC   )r   r   joinescape_filenametoken)r   r<   s     r   r   r   n   s     77<<oeCj9::r    z-_.() c                 T    dj                  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+22B7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[      s?     #s
	C	ww||S_--3xr    c                      t         D ]7  } t        j                  j                  |       s#t	        j
                  |        9 y rC   )r   r   r   r   rG   rH   ra   s    r   cleanuprf      s(    77>>"MM" 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   r    