o
    Vh0                     @  s  U 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Zd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! erd dlm"Z" d dlm#Z# d dlm$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl)m+Z+ d dlm,Z, e-e.Z/e0dd dD Z1de2d< e3e4ej56e1Z7de2d< edxd#d$Z8edyd+d,Z9edzd.d,Z9d{d0d,Z9d|d}d4d5Z:d~d9d:Z;G d;d< d<e<Z=dd=d1d d>ddGdHZ>G dIdJ dJZ?	dddOdPZ@ddSdTZAd|ddWdXZBd|ddZd[ZCddd_d`ZDddbdcZEddddeZFddfdgZGddhdiZHdddldmZIddrdsZJddvdwZKdS )    )annotationsN)Mapping)contextmanager)suppress)cached_property)Path)TYPE_CHECKING)Any)overload)ChunkedEncodingError)ConnectionError)atomic_open)get_default_authenticator)REQUESTS_TIMEOUT)Callable)
Collection)Iterator)TracebackType)Package)Response)Session)Authenticatorc                 c  s    | ]
}|t jv r|V  qd S N)hashlibalgorithms_available).0t r   h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/poetry/utils/helpers.py	<genexpr>,   s    
r   )sha3_512sha3_384sha3_256sha3_224sha512sha384sha256sha224	shake_256	shake_128blake2sblake2bztuple[str, ...]prioritised_hash_typeszfrozenset[str]$non_prioritised_available_hash_typespathr   returnIterator[Path]c              	   c  s8    t  }zt|  | V  W t| d S t| w r   )r   cwdoschdir)r.   r1   r   r   r   	directoryC   s   
r4   funcCallable[[str], None]strexc_info	ExceptionNonec                 C     d S r   r   r5   r.   r8   r   r   r   _on_rm_errorN   s   r=   8tuple[type[BaseException], BaseException, TracebackType]c                 C  r;   r   r   r<   r   r   r   r=   U   s   r	   c                 C  s*   t j|sd S t |tj | | d S r   )r2   r.   existschmodstatS_IWRITEr<   r   r   r   r=   ]   s   Fforceboolc                 C  sJ   |   r	t| S i }|rtjdkrdnd}t||< tj| fi | dS )a  
    Helper function handle safe removal, and optionally forces stubborn file removal.
    This is particularly useful when dist files are read-only or git writes read-only
    files on Windows.

    Internally, all arguments are passed to `shutil.rmtree`.
    )      onexconerrorN)
is_symlinkr2   unlinksysversion_infor=   shutilrmtree)r.   rC   kwargsrG   r   r   r   remove_directorye   s   
rP   d1dict[str, Any]d2c                 C  sR   |D ]$}|| v r t | | tr t || tr t| | ||  q|| | |< qd S r   )
isinstancedictr   merge_dicts)rQ   rS   kr   r   r   rV   x   s
   $rV   c                   @  s   e Zd ZdZdS )HTTPRangeRequestSupportedErrorz5Raised when server unexpectedly supports byte ranges.N)__name__
__module____qualname____doc__r   r   r   r   rX      s    rX      )session
chunk_sizeraise_accepts_rangesmax_retriesurldestr^   Authenticator | Session | Noner_   intr`   ra   c                C  s   ddl m} t| |||d}|r|jrtd|  dd}| A}	|	d|   |j}
|
dkr8d}d}|
dk}||D ]}|rY|d	 |
 }||krY|}|	d|  d
|dd q=W d    d S 1 sew   Y  d S )Nr   )	Indicator)ra   zURL z supports range requests.FzDownloading i   d    3%)poetry.puzzle.providerrf   
Downloaderaccepts_rangesrX   context
total_sizedownload_with_progress)rb   rc   r^   r_   r`   ra   rf   
downloaderset_indicatorupdate_contextro   fetched_sizelast_percentpercentr   r   r   download_file   s*   	

"rw   c                   @  sZ   e Zd Z		dd ddZed!ddZed"ddZd#d$ddZd%ddZd&d'ddZ	dS )(rl   Nr   rb   r7   rc   r   r^   rd   ra   re   c                 C  s,   || _ || _|p
t | _|| _|  | _d S r   )_dest_max_retriesr   _session_url_get	_response)selfrb   rc   r^   ra   r   r   r   __init__   s
   zDownloader.__init__r/   rD   c                 C  s   | j jddkS )NzAccept-Rangesbytes)r}   headersget)r~   r   r   r   rm      s   zDownloader.accepts_rangesc                 C  sN   d}d| j jv r%tt t| j jd }W d    |S 1 s w   Y  |S )Nr   zContent-Length)r}   r   r   
ValueErrorre   )r~   ro   r   r   r   ro      s   

zDownloader.total_sizestartr   c                 C  s^   ddi}|dkrd| d|d< | j j| jd|td}z|  |W S  ty.   |   w )	NzAccept-EncodingIdentityr   zbytes=-RangeT)streamr   timeout)rz   r   r{   r   raise_for_statusBaseExceptionclose)r~   r   r   responser   r   r   r|      s   
zDownloader._getr_   Iterator[bytes]c              	   c  s    d}d}	 z,| j  | j j|dD ]}|V  |t|7 }qW d    n1 s(w   Y  W d S W d S  ttfyT   || jk rS| jrS|dkrS|d7 }| || _ Y q w )Nr   Tr_      )r}   iter_contentlenr   r   ry   rm   r|   )r~   r_   rt   retrieschunkr   r   r   _iter_content_with_resume   s0   
z$Downloader._iter_content_with_resumer]   Iterator[int]c                 c  sh    d}t | j"}| j|dD ]}|r!|| |t|7 }|V  qW d    d S 1 s-w   Y  d S )Nr   r   )r   rx   r   writer   )r~   r_   rt   fr   r   r   r   rp      s   
"z!Downloader.download_with_progress)Nr   )rb   r7   rc   r   r^   rd   ra   re   )r/   rD   )r/   re   )r   )r   re   r/   r   )r_   re   r/   r   )r]   )r_   re   r/   r   )
rY   rZ   r[   r   r   rm   ro   r|   r   rp   r   r   r   r   rl      s    
rl   packager   rootPath | Nonec                 C  sN   | j dv r"|r"| jd usJ ttj| j| }| j d| S | j}|S )N)filer4   rh   )	source_type
source_urlr   r2   r.   relpathas_posixversionfull_pretty_version)r   r   r.   pretty_versionr   r   r   "get_package_version_display_string   s   r   paths
list[Path]c                 C  s   d dd | D S )Nz, c                 s  s    | ]	}d |d V  qdS )"Nr   )r   cr   r   r   r     s    zpaths_csv.<locals>.<genexpr>)join)r   r   r   r   	paths_csv  s   r   
str | Pathis_directoryc                 C  sH   t | tr	t| } |  r|  |kr| S td|  d|rdnd d)NzSpecified path 'z' is not a valid r4   r   .)rT   r7   r   r?   is_dirr   )r.   r   r   r   r   ensure_path  s   
r   createc                 C  sp   z-|   s|s
W dS | jddd tjt| d
 W d    W dS 1 s&w   Y  W dS  ty7   Y dS w )NFT)parentsexist_ok)dir)r?   mkdirtempfileTemporaryFiler7   OSError)r.   r   r   r   r   is_dir_writable  s   r    countwordc                 C  s   | dkr|S |d S )Nr   sr   )r   r   r   r   r   	pluralize   s   r   
csidl_namec                 C  s\   t jdkr	tddd l}ddddd|  }||jd	}|||\}}t|ts,J |S )
Nwin32%Method can only be called on Windows.r   AppDatazCommon AppDatazLocal AppDatazProgram FilesCSIDL_APPDATACSIDL_COMMON_APPDATACSIDL_LOCAL_APPDATACSIDL_PROGRAM_FILESz@Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)	rK   platformRuntimeErrorwinregOpenKeyHKEY_CURRENT_USERQueryValueExrT   r7   )r   _winregshell_folder_namekeyr   typer   r   r   _get_win_folder_from_registry&  s"   
r   c                 C  s   t jdkr	tddd l}ddddd|  }|d	}|jjd |d d| d
}|D ]}t|dkr6d} nq*|rJ|d	}|jj	
|j|d	rJ|}|jS )Nr   r   r      #      &   r   r]   F   T)rK   r   r   ctypescreate_unicode_bufferwindllshell32SHGetFolderPathWordkernel32GetShortPathNameWvalue)r   r   csidl_constbufhas_high_charr   buf2r   r   r   _get_win_folder_with_ctypes=  s.   


r   c                 C  sJ   t jdkr!z
ddlm} t}W n ty   t}Y nw t|| S td)Nr   r   )r   r   )	rK   r   r   r   r   ImportErrorr   r   r   )r   r   _get_win_folderr   r   r   get_win_folder\  s   
r   c                 C  sR   t d}t d}tt| t|d t|d } |  | r'|  } | S )Nr   r   WindowsAppszMicrosoft/WindowsApps)r   r   r7   replacer   
startswithresolve)r.   program_fileslocal_appdatar   r   r   get_real_windows_pathj  s   

r   r&   	hash_namec                   sd   t |}| d t fdddD ]}|| qW d    | S 1 s)w   Y  | S )Nrbc                     s     tjS r   )readioDEFAULT_BUFFER_SIZEr   fpr   r   <lambda>~  s    zget_file_hash.<locals>.<lambda>    )r   newopeniterupdate	hexdigest)r.   r   hcontentr   r   r   get_file_hash{  s   

r   
hash_typesCollection[str]archive_name
str | Nonec                 C  sX   | sd S t D ]
}|| v r|  S qtd| d| d tD ]
}|| v r)|  S qd S )Nz"There are no known hash types for z) that are prioritised (known hash types: ))r,   loggerdebugr-   )r   r  prioritised_hash_typeavailable_hash_typer   r   r   get_highest_priority_hash_type  s    r	  sourcezipc                 C  s   |rt | }|| W d   dS 1 sw   Y  dS h d}t| ,}ttdr?tjdd |vr?|j|dd n|| W d   dS W d   dS 1 sWw   Y  dS )z5Extract all members from either a zip or tar archive.N>   rE   	      rE   
   rF   rE         data_filterrE   data)filter)zipfileZipFile
extractalltarfiler   hasattrrK   rL   )r
  rc   r  archivebroken_tarfile_filterr   r   r   r    s   ""r  )r.   r   r/   r0   )r5   r6   r.   r7   r8   r9   r/   r:   )r5   r6   r.   r7   r8   r>   r/   r:   )r5   r6   r.   r7   r8   r	   r/   r:   )F)r.   r   rC   rD   r/   r:   )rQ   rR   rS   rR   r/   r:   )rb   r7   rc   r   r^   rd   r_   re   r`   rD   ra   re   r/   r:   r   )r   r   r   r   r/   r7   )r   r   r/   r7   )r.   r   r   rD   r/   r   )r.   r   r   rD   r/   rD   )r   )r   re   r   r7   r/   r7   )r   r7   r/   r7   )r   r7   r/   r   )r.   r   r/   r   )r&   )r.   r   r   r7   r/   r7   )r   r  r  r7   r/   r  )r
  r   rc   r   r  rD   r/   r:   )L
__future__r   r   r   loggingr2   rM   rA   rK   r  r   r  collections.abcr   
contextlibr   r   	functoolsr   pathlibr   typingr   r	   r
   requests.exceptionsr   r   requests.utilsr   poetry.utils.authenticatorr   poetry.utils.constantsr   r   r   r   typesr   poetry.core.packages.packager   requestsr   r   r   	getLoggerrY   r  tupler,   __annotations__	frozensetsetr   
differencer-   r4   r=   rP   rV   r9   rX   rw   rl   r   r   r   r   r   r   r   r   r   r   r	  r  r   r   r   r   <module>   s    



%M





	