a
    |ӓh%                     @   sp  d 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ZddlZddl	m
Z
 ddlmZmZmZmZ ddlmZ ddlmZ erddlmZmZmZmZmZ dd	lmZ eeZee ZzddlZee7 ZW n e y   e!d
 Y n0 zddl"Z"ee7 ZW n e y   e!d Y n0 dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dddZ)dd Z*d ddZ+dS )!zUtilities related archives.
    )absolute_importN)InstallationError)BZ2_EXTENSIONSTAR_EXTENSIONSXZ_EXTENSIONSZIP_EXTENSIONS)
ensure_dir)MYPY_CHECK_RUNNING)IterableListOptionalTextUnion)ZipInfozbz2 module is not availablezlzma module is not availablec                  C   s   t d} t |  | S )zBGet the current umask which involves having to set it temporarily.r   )osumask)mask r   K/var/www/auris/lib/python3.9/site-packages/pip/_internal/utils/unpacking.pycurrent_umask/   s    

r   c                 C   sh   |  d d} d| v rHd| v r4| d| dk s<d| vrH| ddS d| v r\| ddS | dgS d S )N/\    )lstripfindsplitpathr   r   r   split_leading_dir7   s    r   c                 C   sD   d}| D ]6}t |\}}|s" dS |du r0|}q||kr dS qdS )zyReturns true if all the paths have the same leading path name
    (i.e., everything is in one subdirectory in an archive)NFT)r   )pathscommon_prefixr   prefixrestr   r   r   has_leading_dirG   s    r$   c                 C   s0   t j| }t j|}t j||g}||kS )zL
    Return true if the absolute path of target is within the directory
    )r   r   abspathcommonprefix)	directorytargetabs_directory
abs_targetr"   r   r   r   is_within_directoryW   s    r+   c                 C   s   t | dt  @ dB  dS )zx
    Make file present at path have execute for user/group/world
    (chmod +x) is no-op on windows per python docs
    i  I   N)r   chmodr   r   r   r   r   2set_extracted_file_to_default_mode_plus_executablec   s    r.   c                 C   s$   | j d? }t|o t|o |d@ S )N   r,   )external_attrboolstatS_ISREG)infomoder   r   r   zip_item_is_executablel   s    
r6   Tc              	   C   sR  t | t| d}z.tj|dd}t| o2|}| D ]}|j}|}|rZt|d }t	j
||}t	j
|}	t||sd}
t|
| |||ds|drt | q<t |	 ||}zTt|d}t|| W d	   n1 s0    Y  W |  t|r6t| q<|  t|r4t| 0 q<W |  n
|  0 d	S )
a  
    Unzip the file (with path `filename`) to the destination `location`.  All
    files are written based on system defaults and umask (i.e. permissions are
    not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written. Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    rbT)
allowZip64r   zQThe zip file ({}) has a file ({}) trying to install outside target directory ({})r   r   wbN)r   openzipfileZipFiler$   namelistinfolistfilenamer   r   r   joindirnamer+   r   formatendswithshutilcopyfileobjcloser6   r.   )r?   locationflattenzipfpzipleadingr4   namefndirmessagefpdestfpr   r   r   
unzip_filet   s<    




,


rR   c                 C   sT  t | |  ds$|  dr*d}nL|  tr>d}n8|  trRd}n$|  drfd}ntd|  d	}t| |}zt	d
d |
 D }|
 D ]}|j}|rt|d }tj||}t||sd}t|| ||| rt | q| rdz||| W nD ty` }	 z*td| |j|	 W Y d}	~	qW Y d}	~	n
d}	~	0 0 qz||}
W nH ttfy }	 z*td| |j|	 W Y d}	~	qW Y d}	~	n
d}	~	0 0 t tj| |
dusJ t|d}t|
| W d   n1 s0    Y  |
  ||| |jd@ rt | qW |  n
|  0 dS )a  
    Untar the file (with path `filename`) to the destination `location`.
    All files are written based on system defaults and umask (i.e. permissions
    are not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written.  Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    z.gzz.tgzzr:gzzr:bz2zr:xzz.tarrz-Cannot determine compression type for file %szr:*c                 S   s   g | ]
}|j qS r   )rL   ).0memberr   r   r   
<listcomp>   s   zuntar_file.<locals>.<listcomp>r   zQThe tar file ({}) has a file ({}) trying to install outside target directory ({})z/In the tar file %s the member %s is invalid: %sNr9   r,   )!r   lowerrC   r   r   loggerwarningtarfiler:   r$   
getmembersrL   r   r   r   r@   r+   r   rB   isdirissym_extract_member	ExceptionextractfileKeyErrorAttributeErrorrA   rD   rE   rF   utimer5   r.   )r?   rG   r5   tarrK   rU   rM   r   rO   excrP   rQ   r   r   r   
untar_file   sr    




$",
rf   c                 C   s   t j| } |dks,|  ts,t| rDt| || d d nR|dkslt	
| sl|  tt t rxt| | ntd| || td|d S )Nzapplication/zipz.whl)rH   zapplication/x-gzipzZCannot unpack file %s (downloaded from %s, content-type: %s); cannot detect archive formatz%Cannot determine archive format of {})r   r   realpathrW   rC   r   r;   
is_zipfilerR   rZ   
is_tarfiler   r   r   rf   rX   criticalr   rB   )r?   rG   content_typer   r   r   unpack_file   s8    

rl   )T)N),__doc__
__future__r   loggingr   rD   r2   rZ   r;   pip._internal.exceptionsr   pip._internal.utils.filetypesr   r   r   r   pip._internal.utils.miscr   pip._internal.utils.typingr	   typingr
   r   r   r   r   r   	getLogger__name__rX   SUPPORTED_EXTENSIONSbz2ImportErrordebuglzmar   r   r$   r+   r.   r6   rR   rf   rl   r   r   r   r   <module>   sH   
	
/V 