o
    _c7                  	   @   s(  d 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ZddlZddlmZmZ ddlmZ eeZe Zejejdd	d
d eej eej ee eed ZdZejdeZe dZ ejdeZ!ejddZ"e"# dv rdZ"e$e!dkrdndZ%e  de! de  de! de  de! de% de  de! de% dd Z&ee! d! d" ee! d# d$ d% d& d' ee! e% d( ee! e% d( d Z'd)e(fd*d+Z)d)e(fd,d-Z*d.e(d)efd/d0Z+d1ed2ed)dfd3d4Z,d;d5d6Z-d)efd7d8Z.d)e/fd9d:Z0dS )<zChromium download module.    N)BytesIO)Path)ZipFile)__chromium_revision____pyppeteer_home__)tqdmz[{levelname}] {msg}{)fmtstyle)r	   zlocal-chromiumzhttps://storage.googleapis.comZPYPPETEER_DOWNLOAD_HOSTz/chromium-browser-snapshotsZPYPPETEER_CHROMIUM_REVISIONZPYPPETEER_NO_PROGRESS_BAR )1trueTiw	 z
chrome-winzchrome-win32z/Linux_x64/z/chrome-linux.zipz/Mac/z/chrome-mac.zipz/Win//z.zipz	/Win_x64/)linuxmacwin32win64zchrome-linuxZchromez
chrome-maczChromium.appZContentsMacOSZChromiumz
chrome.exereturnc                   C   sd   t jdrdS t jdrdS t jds"t jds"t jdr+t jdkr)dS d	S td
t j )z*Get current platform name by short string.r   darwinr   winZmsysZcygir   r   zUnsupported platform: )sysplatform
startswithmaxsizeOSError r   r   H/usr/local/lib/python3.10/dist-packages/pyppeteer/chromium_downloader.pycurrent_platform8   s   $
r   c                   C   
   t t  S )zGet chromium download url.)downloadURLsr   r   r   r   r   get_urlE      
r!   urlc                 C   s  t d tjdt dv}|jd| dd}|jdkr*td|  d	|j	
  d
t }tr=|dD ]}|| q4n?z	t|jd }W n tttfyT   d}Y nw t|ddd}|dD ]}|| |t| qa|  W d   |S W d   |S 1 sw   Y  |S )zDownload data from url.zStarting Chromium download.CERT_REQUIRED)	cert_reqsca_certsGETF)preload_contenti  z#Chromium downloadable not found at z: Received z.
i (  zcontent-lengthr   Tb)totalZ
unit_scaleunitN)loggerinfourllib3PoolManagercertifiwhererequeststatusr   datadecoder   NO_PROGRESS_BARstreamwriteintheadersKeyError
ValueErrorAttributeErrorr   updatelenclose)r#   httpr_datachunktotal_lengthZprocess_barr   r   r   download_zipJ   s6   





rF   r4   pathc           	      C   s|  t d t dkr}ddl}ddl}|d }| s |jdd |d}|| 	  W d   n1 s7w   Y  |
d	sItd
| d|jd	t|gt||j|jd}|jdkrot |j  td| dt  r|| r||  nt| }|t| W d   n1 sw   Y  t }| std|| jtjB tjB tjB  t d|  dS )zExtract zipped data to path.zBeginning extractionr   r   Nz
chrome.zipT)parentswbunzipz6Failed to automatically extract chromium.Please unzip z
 manually.)cwdstdoutstderrzFailed to unzip .zFailed to extract chromium.zChromium extracted to: )r,   r-   r   
subprocessshutilexistsmkdiropenr8   getvaluewhichr   runstrPIPESTDOUT
returncodeerrorrL   r5   chromium_executableunlinkr   
extractallIOErrorchmodstatst_modeS_IXOTHS_IXGRPS_IXUSR)	r4   rG   rO   rP   zip_pathfproczfZ	exec_pathr   r   r   extract_ziph   s:   




"rj   c                   C   s   t tt tt  dS )zDownload and extract chromium.N)rj   rF   r!   DOWNLOADS_FOLDERREVISIONr   r   r   r   download_chromium   s   rm   c                   C   r   )z$Get path of the chromium executable.)chromiumExecutabler   r   r   r   r   r\      r"   r\   c                   C   s
   t   S )z,Check if chromium is placed at correct path.)r\   rQ   r   r   r   r   check_chromium   r"   ro   )r   N)1__doc__loggingosra   r   ior   pathlibr   zipfiler   r0   r.   Z	pyppeteerr   r   r   	getLogger__name__r,   StreamHandlerhandlersetFormatter	FormattersetLevelINFO
addHandlerrk   ZDEFAULT_DOWNLOAD_HOSTenvirongetZDOWNLOAD_HOSTZBASE_URLrl   r6   lowerr9   ZwindowsArchiver    rn   rW   r   r!   rF   rj   rm   r\   boolro   r   r   r   r   <module>   sX   



!