a
    zel                     @   s  g d Z ddlZddl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ddlZddlZddlZejZejejB ejB ZeedreejO ZeZeedreej O Zeedrej!Z!ndZ!dZ"e Z#d	d
 Z$dd Z%dd Z&G dd dZ'dd Z(dd Z)da*dd Z+dd Z,dd Z-dd Z.da/dd Z0dd  Z1d<d"d#Z2d=d$d%Z3d&e"dfd'd(Z4G d)d* d*Z5G d+d, d,Z6d>dd0d1d2Z7ej8d3ksej9d4kre7Z:need5a;d?dd0d6d7Z:G d8d9 d9Z<G d:d; d;e=Z>dS )@)NamedTemporaryFileTemporaryFileSpooledTemporaryFileTemporaryDirectorymkstempmkdtempmktempTMP_MAXgettempprefixtempdir
gettempdirgettempprefixbgettempdirb    N)Random
O_NOFOLLOWO_BINARYr   i'  tmpc                 C   s,   zt |  W n ty"   Y dS 0 dS d S )NFT)_oslstatOSError)fn r   /usr/lib/python3.9/tempfile.py_existsL   s
    r   c                  G   sr   d }| D ]X}|d u rqt |tjr,t|}t |trL|tu rFtdt}q|tu r\tdt}q|d u rntS |S )Nz1Can't mix bytes and non-bytes in path components.)
isinstancer   PathLikefspathbytesstr	TypeError)argsreturn_typeargr   r   r   _infer_return_typeU   s     

r#   c                 C   sd   t | ||}|d u r| }| d u r:|tu r0t} n
tt} |d u rX|tu rRt }nt }| |||fS N)r#   r   templater   fsencoder   r   )prefixsuffixdiroutput_typer   r   r   _sanitize_paramsn   s    
r+   c                   @   s,   e Zd ZdZedd Zdd Zdd ZdS )	_RandomNameSequence%abcdefghijklmnopqrstuvwxyz0123456789_c                 C   s,   t  }|t| dd kr&t | _|| _| jS )N_rng_pid)r   getpidgetattr_Random_rngr.   )selfcur_pidr   r   r   rng   s
    z_RandomNameSequence.rngc                 C   s   | S r$   r   r3   r   r   r   __iter__   s    z_RandomNameSequence.__iter__c                    s0   | j  | jj fddtdD }d|S )Nc                    s   g | ]} qS r   r   ).0dummycchooser   r   
<listcomp>       z0_RandomNameSequence.__next__.<locals>.<listcomp>    )
charactersr5   choicerangejoin)r3   lettersr   r:   r   __next__   s    z_RandomNameSequence.__next__N)__name__
__module____qualname__rA   propertyr5   r7   rF   r   r   r   r   r,      s
   
r,   c               	   C   s   g } dD ]}t |}|r| | qt jdkrX| t jdt jdddddg n| g d	 z| t   W n" t	t
fy   | t j Y n0 | S )
N)TMPDIRTEMPTMPntz~\AppData\Local\Tempz%SYSTEMROOT%\Tempzc:\tempzc:\tmpz\tempz\tmp)z/tmpz/var/tmpz/usr/tmp)r   getenvappendnameextendpath
expanduser
expandvarsgetcwdAttributeErrorr   curdir)dirlistenvnamedirnamer   r   r   _candidate_tempdir_list   s    


r\   c                  C   sh  t  } t }|D ]@}|tjkr,tj|}tdD ]}t| }tj||}zt	|t
d}zdzHtj	|ddd}|d W d    n1 s0    Y  W t| nt| 0 W t| nt| 0 |W     S  ty   Y q4 ty6   tjdkr,tj|r,t|tjr,Y q4Y  qY q4 tyN   Y  qY q40 q4qttjd| d S )	Nd     wbF)closefds   blatrN   z)No usable temporary directory found in %s)r,   r\   r   rX   rS   abspathrC   nextrD   open_bin_openflags_iowritecloseunlinkFileExistsErrorPermissionErrorrQ   isdiraccessW_OKr   FileNotFoundError_errnoENOENT)namerrY   r)   seqrQ   filenamefdfpr   r   r   _get_default_tempdir   s@    	

*
rv   c                   C   s:   t d u r6t  zt d u r t a W t  n
t  0 t S r$   )_name_sequence
_once_lockacquirer,   releaser   r   r   r   _get_candidate_names   s    r{   c           
   	   C   s   t  }|tu rttj|}ttD ]}t|}tj	| || | }t
d| zt||d}	W nR tyx   Y q"Y n> ty   tjdkrtj| rt| tjrY q"n Y n0 |	tj|f  S ttjdd S )Nztempfile.mkstempr^   rN   z#No usable temporary file name found)r{   r   mapr   r&   rC   r   rb   rS   rD   _sysauditrc   ri   rj   rQ   rk   rl   rm   ra   ro   EEXIST)
r)   presufflagsr*   namesrr   rQ   filert   r   r   r   _mkstemp_inner   s*    r   c                   C   s   t S r$   )r%   r   r   r   r   r	     s    r	   c                   C   s   t t S r$   )r   r&   r	   r   r   r   r   r     s    r   c                   C   s:   t d u r6t  zt d u r t a W t  n
t  0 t S r$   )r
   rx   ry   rv   rz   r   r   r   r   r     s    r   c                   C   s   t t S r$   )r   r&   r   r   r   r   r   r   (  s    r   Fc                 C   s2   t || |\}} }}|rt}nt}t||| ||S r$   )r+   _text_openflagsrd   r   )r(   r'   r)   textr*   r   r   r   r   r   ,  s
    r   c              	   C   s   t || |\}} }}t }|tu r.ttj|}ttD ]}t|}tj	
||| |  }td| zt|d W nR ty   Y q6Y n> ty   tjdkrtj	|rt|tjrY q6n Y n0 |  S ttjdd S )Nztempfile.mkdtemp  rN   z(No usable temporary directory name found)r+   r{   r   r|   r   r&   rC   r   rb   rS   rD   r}   r~   mkdirri   rj   rQ   rk   rl   rm   ro   r   )r(   r'   r)   r*   r   rr   rQ   r   r   r   r   r   S  s,    r   r@   c                 C   s`   |d u rt  }t }ttD ]2}t|}tj||| |  }t|s|  S qt	t
jdd S )Nz"No usable temporary filename found)r   r{   rC   r   rb   r   rS   rD   r   ri   ro   r   )r(   r'   r)   r   rr   rQ   r   r   r   r   r   {  s    
r   c                   @   sH   e Zd ZdZdZdddZejdkr<ejfddZ	d	d
 Z
ndd Z	dS )_TemporaryFileCloserNFTc                 C   s   || _ || _|| _d S r$   )r   rQ   deleter3   r   rQ   r   r   r   r   __init__  s    z_TemporaryFileCloser.__init__rN   c                 C   sL   | j sH| jd urHd| _ z| j  W | jrH|| j n| jrF|| j 0 d S NT)close_calledr   rg   r   rQ   )r3   rh   r   r   r   rg     s    z_TemporaryFileCloser.closec                 C   s   |    d S r$   )rg   r6   r   r   r   __del__  s    z_TemporaryFileCloser.__del__c                 C   s   | j sd| _ | j  d S r   )r   r   rg   r6   r   r   r   rg     s    )T)rG   rH   rI   r   r   r   r   rQ   rh   rg   r   r   r   r   r   r     s   



r   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )_TemporaryFileWrapperTc                 C   s$   || _ || _|| _t|||| _d S r$   )r   rQ   r   r   _closerr   r   r   r   r     s    z_TemporaryFileWrapper.__init__c                    s^   | j d }t||}t|drD| t  fdd}| j|_|}t|tsZt| || |S )Nr   __call__c                     s    | i |S r$   r   )r    kwargsfuncr   r   func_wrapper  s    z7_TemporaryFileWrapper.__getattr__.<locals>.func_wrapper)	__dict__r0   hasattr
_functoolswrapsr   r   intsetattr)r3   rQ   r   ar   r   r   r   __getattr__  s    



z!_TemporaryFileWrapper.__getattr__c                 C   s   | j   | S r$   )r   	__enter__r6   r   r   r   r     s    
z_TemporaryFileWrapper.__enter__c                 C   s   | j |||}|   |S r$   )r   __exit__rg   )r3   excvaluetbresultr   r   r   r     s    z_TemporaryFileWrapper.__exit__c                 C   s   | j   d S r$   )r   rg   r6   r   r   r   rg     s    z_TemporaryFileWrapper.closec                 c   s   | j D ]
}|V  qd S r$   )r   )r3   liner   r   r   r7     s    
z_TemporaryFileWrapper.__iter__N)T)	rG   rH   rI   r   r   r   r   rg   r7   r   r   r   r   r     s   
r   w+bTerrorsc                C   s   t |||\}}}}	t}
tjdkr0|r0|
tjO }
t||||
|	\}}z$tj|| ||||d}t|||W S  t	y   t
| t|  Y n0 d S )NrN   	bufferingnewlineencodingr   )r+   rd   r   rQ   O_TEMPORARYr   re   rc   r   BaseExceptionrh   rg   )moder   r   r   r(   r'   r)   r   r   r*   r   rt   rQ   r   r   r   r   r     s    



r   posixcygwin	O_TMPFILEc                C   s   t |||\}}}}t}	trz$|	tjB tj @ }
t||
d}W n& tyV   daY nD tyf   Y n40 zt	j|| ||||dW S    t
|  Y n0 t||||	|\}}z"t| t	j|| ||||dW S    t
|  Y n0 d S )Nr^   Fr   )r+   rd   _O_TMPFILE_WORKSr   r   O_CREATrc   IsADirectoryErrorr   re   rg   r   rh   )r   r   r   r   r(   r'   r)   r   r*   r   flags2rt   rQ   r   r   r   r   7  s6    




r   c                   @   s   e Zd ZdZd7ddddZeejZd	d
 Z	dd Z
dd Zdd Zdd Zdd Zedd Zedd Zedd Zdd Zdd Zdd  Zed!d" Zed#d$ Zed%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd8d1d2Zd3d4 Zd5d6 Z dS )9r   Fr   r   r   Nr   c	          
   	   C   sT   d|v rt  | _nt jt  ||	|d| _|| _d| _||||||||	d| _d S )Nb)r   r   r   F)r   r   r(   r'   r   r   r)   r   )re   BytesIO_fileTextIOWrapper	_max_size_rolled_TemporaryFileArgs)
r3   max_sizer   r   r   r   r(   r'   r)   r   r   r   r   r   z  s    
zSpooledTemporaryFile.__init__c                 C   s,   | j r
d S | j}|r(| |kr(|   d S r$   )r   r   tellrollover)r3   r   r   r   r   r   _check  s    
zSpooledTemporaryFile._checkc                 C   sv   | j r
d S | j}tf i | j }| _| `| }t|drR|j| 	  n||	  |
|d d| _ d S )Nbufferr   T)r   r   r   r   r   r   r   rf   detachgetvalueseek)r3   r   newfileposr   r   r   r     s    

zSpooledTemporaryFile.rolloverc                 C   s   | j jrtd| S )Nz%Cannot enter context with closed file)r   closed
ValueErrorr6   r   r   r   r     s    zSpooledTemporaryFile.__enter__c                 C   s   | j   d S r$   r   rg   r3   r   r   r   r   r   r   r     s    zSpooledTemporaryFile.__exit__c                 C   s
   | j  S r$   )r   r7   r6   r   r   r   r7     s    zSpooledTemporaryFile.__iter__c                 C   s   | j   d S r$   r   r6   r   r   r   rg     s    zSpooledTemporaryFile.closec                 C   s   | j jS r$   )r   r   r6   r   r   r   r     s    zSpooledTemporaryFile.closedc                 C   s   | j jS r$   )r   r   r6   r   r   r   r     s    zSpooledTemporaryFile.encodingc                 C   s   | j jS r$   )r   r   r6   r   r   r   r     s    zSpooledTemporaryFile.errorsc                 C   s   |    | j S r$   )r   r   filenor6   r   r   r   r     s    zSpooledTemporaryFile.filenoc                 C   s   | j   d S r$   )r   flushr6   r   r   r   r     s    zSpooledTemporaryFile.flushc                 C   s
   | j  S r$   )r   isattyr6   r   r   r   r     s    zSpooledTemporaryFile.isattyc                 C   s,   z
| j jW S  ty&   | jd  Y S 0 d S )Nr   )r   r   rW   r   r6   r   r   r   r     s    
zSpooledTemporaryFile.modec                 C   s$   z
| j jW S  ty   Y d S 0 d S r$   )r   rQ   rW   r6   r   r   r   rQ     s    
zSpooledTemporaryFile.namec                 C   s   | j jS r$   )r   newlinesr6   r   r   r   r     s    zSpooledTemporaryFile.newlinesc                 G   s   | j j| S r$   )r   readr3   r    r   r   r   r     s    zSpooledTemporaryFile.readc                 G   s   | j j| S r$   )r   readliner   r   r   r   r     s    zSpooledTemporaryFile.readlinec                 G   s   | j j| S r$   )r   	readlinesr   r   r   r   r     s    zSpooledTemporaryFile.readlinesc                 G   s   | j j| S r$   )r   r   r   r   r   r   r     s    zSpooledTemporaryFile.seekc                 C   s
   | j  S r$   )r   r   r6   r   r   r   r     s    zSpooledTemporaryFile.tellc                 C   s6   |d u r| j   n|| jkr&|   | j | d S r$   )r   truncater   r   )r3   sizer   r   r   r     s
    
zSpooledTemporaryFile.truncatec                 C   s   | j }||}| | |S r$   )r   rf   r   )r3   sr   rvr   r   r   rf     s    

zSpooledTemporaryFile.writec                 C   s   | j }||}| | |S r$   )r   
writelinesr   )r3   iterabler   r   r   r   r   r     s    

zSpooledTemporaryFile.writelines)r   r   r   NNNNN)N)!rG   rH   rI   r   r   classmethod_typesGenericAlias__class_getitem__r   r   r   r   r7   rg   rJ   r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   r   rf   r   r   r   r   r   r   s  sJ      







r   c                   @   sX   e Zd ZdddZedd Zedd Zdd	 Zd
d Zdd Z	dd Z
eejZdS )r   Nc                 C   s0   t |||| _tj| | j| jd| d| _d S )NzImplicitly cleaning up {!r})warn_message)r   rQ   _weakreffinalize_cleanupformat
_finalizer)r3   r(   r'   r)   r   r   r   r     s
    
zTemporaryDirectory.__init__c                    s     fdd}t j|d d S )Nc              	      s   t |d trdd }zT|kr0|tj| || zt| W n  ttfyf    | Y n0 W q ty|   Y q0 nt |d trn d S )Nr   c                 S   s4   zt | d W n ty"   Y n0 t | d d S )Nr   r   )r   chflagsrW   chmod)rS   r   r   r   
resetperms  s
    z?TemporaryDirectory._rmtree.<locals>.onerror.<locals>.resetperms)	
issubclassrj   r   rS   r[   rh   r   _rmtreern   )r   rS   exc_infor   clsrQ   r   r   onerror  s    z+TemporaryDirectory._rmtree.<locals>.onerror)r   )_shutilrmtree)r   rQ   r   r   r   r   r     s    zTemporaryDirectory._rmtreec                 C   s   |  | t|t d S r$   )r   	_warningswarnResourceWarning)r   rQ   r   r   r   r   r   2  s    
zTemporaryDirectory._cleanupc                 C   s   d | jj| jS )Nz	<{} {!r}>)r   	__class__rG   rQ   r6   r   r   r   __repr__7  s    zTemporaryDirectory.__repr__c                 C   s   | j S r$   )rQ   r6   r   r   r   r   :  s    zTemporaryDirectory.__enter__c                 C   s   |    d S r$   )cleanupr   r   r   r   r   =  s    zTemporaryDirectory.__exit__c                 C   s   | j  r| | j d S r$   )r   r   r   rQ   r6   r   r   r   r   @  s    
zTemporaryDirectory.cleanup)NNN)rG   rH   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   


r   )NNNF)NNN)r   r   NNNNNT)r   r   NNNNN)?__all__	functoolsr   warningsr   iore   osr   shutilr   errnoro   randomr   r1   sysr}   typesr   weakrefr   _threadallocate_lock_allocate_lockO_RDWRr   O_EXCLr   r   r   rd   r   r   r%   rx   r   r#   r+   r,   r\   rv   rw   r{   r   r	   r   r
   r   r   r   r   r   r   r   r   rQ   platformr   r   r   objectr   r   r   r   r   <module>   sx   




	-
'
( +?   '
   < 