a
    6RîhØ  ã                   @   s¸   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 zddlm
Z
 W n$ eyp   eeddœd	d
„Z
Y n0 edƒZdd„ Zedef eeedœdd„Zdefdd„Zdd„ ZdS )z2Convenience layer on top of stdlib's shutil and osé    N)ÚCallableÚTypeVaré   )Úpy311)Úlog)Úchmod)ÚargsÚkwargsÚreturnc                  O   s   d S ©N© )r   r	   r   r   úH/opt/python-3.9.24/usr/lib/python3.9/site-packages/setuptools/_shutil.pyr      s    r   Ú_Tc              
   C   sR   t  d| |¡ zt| |ƒ W n0 tyL } zt  d|¡ W Y d }~n
d }~0 0 d S )Nzchanging mode of %s to %ozchmod failed: %s)r   Údebugr   ÚOSError)ÚpathÚmodeÚer   r   r   Úattempt_chmod_verbose   s
    r   .)ÚfuncÚargÚexcr
   c                 C   s6   | t jt jfv r.t jdkr.t|tjƒ | |ƒS |‚dS )zIshutils onexc callback to automatically call chmod for certain functions.ÚntN)ÚosÚunlinkÚremoveÚnamer   ÚstatÚS_IWRITE)r   r   r   r   r   r   Ú_auto_chmod    s    r   Fc                 C   s   t  | ||¡S )zx
    Similar to ``shutil.rmtree`` but automatically executes ``chmod``
    for well know Windows failure scenarios.
    )r   Zshutil_rmtree)r   Úignore_errorsZonexcr   r   r   Úrmtree+   s    r!   c                 K   s    t j | ¡rt| fi |¤Ž d S r   )r   r   Úisdirr!   )r   Úoptsr   r   r   Úrmdir3   s    r$   )Ú__doc__r   r   Útypingr   r   Úcompatr   Ú	distutilsr   r   ÚImportErrorÚobjectr   r   ÚstrÚBaseExceptionr   r!   r$   r   r   r   r   Ú<module>   s    
þ