a
    ãze^  ã                   @   sÞ  d dl Z d dlZd dlZd dlZd dlZd dlZg d¢ZG dd„ deƒZe 	¡ Z
i Zdadad<ddœdd„Zd=d	d
„Zd>dd„Zdd„ Zdd„ Zddœdd„ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZeZG d$d%„ d%eƒZG d&d'„ d'eƒZG d(d)„ d)eƒZ G d*d+„ d+eƒZ!d,d-„ Z"d.d/„ Z#ej$dd0… d1kr–G d2d3„ d3eƒZ%ej$d4krÂG d5d6„ d6eƒZ&G d7d8„ d8eƒZ'd9d:„ Z(e)d;krÚe(ƒ  dS )?é    N)ÚErrorÚopenÚopen_newÚopen_new_tabÚgetÚregisterc                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú /usr/lib/python3.9/webbrowser.pyr      s   r   F©Ú	preferredc                C   sn   t V td u rtƒ  ||gt|  ¡ < |s4trB| tv rBt d| ¡ n
t | ¡ W d   ƒ n1 s`0    Y  d S )Nr   )Ú_lockÚ	_tryorderÚregister_standard_browsersÚ	_browsersÚlowerÚ_os_preferred_browserÚinsertÚappend)ÚnameÚklassÚinstancer   r   r   r   r      s    r   c              	   C   s  t d u r:t t d u rtƒ  W d   ƒ n1 s00    Y  | d urJ| g}nt }|D ]¢}d|v r–t |¡}|d dkrˆt|d d… ƒ  S t|ƒ  S qRzt| ¡  }W n t	yÀ   t
|ƒ}Y n0 |d d urÚ|d   S |d d urR|d ƒ   S qRtdƒ‚d S )Nú%séÿÿÿÿú&é   r   z!could not locate runnable browser)r   r   r   ÚshlexÚsplitÚBackgroundBrowserÚGenericBrowserr   r   ÚKeyErrorÚ_synthesizer   )ZusingZalternativesÚbrowserÚcommandr   r   r   r   %   s,    $
r   Tc                 C   sd   t d u r:t t d u rtƒ  W d   ƒ n1 s00    Y  t D ] }t|ƒ}| | ||¡r> dS q>dS )NTF)r   r   r   r   r   )ÚurlÚnewÚ	autoraiser   r$   r   r   r   r   G   s    	$r   c                 C   s
   t | dƒS ©Nr   ©r   ©r&   r   r   r   r   Z   s    r   c                 C   s
   t | dƒS ©Né   r*   r+   r   r   r   r   a   s    r   c                C   s¶   |   ¡ d }t |¡sd d gS tj |¡}zt| ¡  }W n tyT   d d g Y S 0 |d }|r®| ¡ |jkr®dd l	}| 	|¡}| |_
tj | ¡|_t| d ||d d |gS d d gS )Nr   r   )r   r   )r   ÚshutilÚwhichÚosÚpathÚbasenamer   r   r"   Úcopyr   r   )r$   r   Úcmdr   r%   Z
controllerr3   r   r   r   r#   i   s"    

r#   c                   @   s6   e Zd ZdgZddd„Zddd„Zd	d
„ Zdd„ ZdS )ÚBaseBrowserr   Ú c                 C   s   || _ || _d S ©N)r   r2   ©Úselfr   r   r   r   Ú__init__   s    zBaseBrowser.__init__r   Tc                 C   s   t ‚d S r7   )ÚNotImplementedError©r9   r&   r'   r(   r   r   r   r   ”   s    zBaseBrowser.openc                 C   s   |   |d¡S r)   r*   ©r9   r&   r   r   r   r   —   s    zBaseBrowser.open_newc                 C   s   |   |d¡S r,   r*   r=   r   r   r   r   š   s    zBaseBrowser.open_new_tabN)r6   )r   T)r   r	   r
   Úargsr:   r   r   r   r   r   r   r   r5   ‹   s
   

r5   c                   @   s   e Zd Zdd„ Zddd„ZdS )	r!   c                 C   sF   t |tƒr|| _dg| _n|d | _|dd … | _tj | j¡| _d S )Nr   r   r   )Ú
isinstanceÚstrr   r>   r0   r1   r2   r8   r   r   r   r:   ¢   s    


zGenericBrowser.__init__r   Tc                    sz   t  dˆ ¡ | jg‡ fdd„| jD ƒ }z8t jd d… dkrHt |¡}ntj|dd}| ¡  W S  tyt   Y dS 0 d S )	Núwebbrowser.openc                    s   g | ]}|  d ˆ ¡‘qS ©r   ©Úreplace©Ú.0Úargr+   r   r   Ú
<listcomp>®   s   ÿz'GenericBrowser.open.<locals>.<listcomp>é   ÚwinT)Ú	close_fdsF)	ÚsysÚauditr   r>   ÚplatformÚ
subprocessÚPopenÚwaitÚOSError©r9   r&   r'   r(   ÚcmdlineÚpr   r+   r   r   ¬   s    ÿzGenericBrowser.openN)r   T©r   r	   r
   r:   r   r   r   r   r   r!   ž   s   
r!   c                   @   s   e Zd Zddd„ZdS )r    r   Tc                    s~   | j g‡ fdd„| jD ƒ }t dˆ ¡ z<tjd d… dkrHt |¡}ntj|ddd}| ¡ d u W S  tyx   Y dS 0 d S )	Nc                    s   g | ]}|  d ˆ ¡‘qS rB   rC   rE   r+   r   r   rH   ¿   s   ÿz*BackgroundBrowser.open.<locals>.<listcomp>rA   rI   rJ   T)rK   Ústart_new_sessionF)	r   r>   rL   rM   rN   rO   rP   ÚpollrR   rS   r   r+   r   r   ¾   s    ÿÿzBackgroundBrowser.openN)r   T©r   r	   r
   r   r   r   r   r   r    º   s   r    c                   @   s@   e Zd ZdZdZdZddgZdZdZdZ	ddd„Z
dd	d
„ZdS )ÚUnixBrowserNFTú%actionr   c                 C   sÊ   g }|r*| j r*t|ƒ}| j | }|r*|g}| jg| | }|sD| jrLtj}nd }tj|d|| jrd|pfd |dd}	|r z|	 d¡}
|
 W S  tj	yœ   Y dS 0 n&| jr¼|	 
¡ d u r¶dS dS n
|	 ¡  S d S )NT©rK   ÚstdinÚstdoutÚstderrrW   é   F)Ú
raise_optsÚintr   Ú
backgroundrO   ÚDEVNULLrP   Úredirect_stdoutrQ   ÚTimeoutExpiredrX   )r9   r>   Zremoter(   r&   Z	raise_optÚoptrT   ZinoutrU   Úrcr   r   r   Ú_invokeÞ   s0    




þ

zUnixBrowser._invoker   c                    sÀ   t  dˆ¡ |dkr| j‰ nB|dkr,| j‰ n2|dkrN| jd u rF| j‰ q^| j‰ ntdd|  ƒ‚‡ ‡fdd„| jD ƒ}d	d„ |D ƒ}|  |d
|ˆ¡}|s¸‡fdd„| jD ƒ}|  |dd¡S d
S d S )NrA   r   r   r-   zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %sc                    s    g | ]}|  d ˆ¡  dˆ ¡‘qS )r   r[   rC   rE   ©Úactionr&   r   r   rH     s   ÿz$UnixBrowser.open.<locals>.<listcomp>c                 S   s   g | ]}|r|‘qS r   r   rE   r   r   r   rH     ó    Tc                    s   g | ]}|  d ˆ ¡‘qS rB   rC   rE   r+   r   r   rH     rl   F)	rL   rM   Úremote_actionÚremote_action_newwinÚremote_action_newtabr   Úremote_argsri   r>   )r9   r&   r'   r(   r>   Úsuccessr   rj   r   r     s*    
ÿÿzUnixBrowser.open)N)r   T)r   r	   r
   ra   rc   re   rp   rm   rn   ro   ri   r   r   r   r   r   rZ   Í   s   
#rZ   c                   @   s$   e Zd ZddgZdZdZdZdZdS )ÚMozillar[   r   r6   z-new-windowz-new-tabTN©r   r	   r
   rp   rm   rn   ro   rc   r   r   r   r   rr     s
   rr   c                   @   s,   e Zd ZddgZddgZdZdZdZdZd	S )
ÚNetscapeú-noraisez-raiseú-remoteúopenURL(%s%action)r6   ú,new-windowú,new-tabTN)	r   r	   r
   ra   rp   rm   rn   ro   rc   r   r   r   r   rt   &  s   rt   c                   @   s(   e Zd ZddgZddgZdZdZdZdS )	ÚGaleonru   r6   r[   r   ú-nz-wTN)r   r	   r
   ra   rp   rm   rn   rc   r   r   r   r   rz   1  s
   rz   c                   @   s$   e Zd ZddgZdZdZdZdZdS )ÚChromer[   r   r6   ú--new-windowTNrs   r   r   r   r   r|   ;  s
   r|   c                   @   s$   e Zd ZddgZdZdZdZdZdS )ÚOperar[   r   r6   r}   TNrs   r   r   r   r   r~   G  s
   r~   c                   @   s(   e Zd ZddgZdZdZdZdZdZdS )ÚElinksrv   rw   r6   rx   ry   FN)	r   r	   r
   rp   rm   rn   ro   rc   re   r   r   r   r   r   Q  s   r   c                   @   s   e Zd Zddd„ZdS )Ú	Konquerorr   Tc                 C   sì   t  d|¡ |dkrd}nd}tj}ztjd||gd|||d}W n tyT   Y n0 | ¡  dS z tjdd	|gd|||dd
}W n ty”   Y n0 | ¡ d u r¦dS z tjdd|gd|||dd
}W n tyÚ   Y dS 0 | ¡ d u S d S )NrA   r-   ZnewTabZopenURLÚ	kfmclientT)rK   r]   r^   r_   Ú	konquerorz--silentr\   Úkfmz-dF)rL   rM   rO   rd   rP   rR   rQ   rX   )r9   r&   r'   r(   rk   ÚdevnullrU   r   r   r   r   f  sB    þ
ý
ý
zKonqueror.openN)r   TrY   r   r   r   r   r€   _  s   r€   c                   @   s&   e Zd Zdd„ Zdd„ Zd
dd„Zd	S )ÚGrailc                 C   sÞ   dd l }dd l}dd l}dd l}tj | ¡ d¡}| t 	¡ ¡d }tj | 
|¡| 
|¡d ¡}|  |¡}|std S | |j|j¡}	|D ]P}
z|	 |
¡ W n4 tyÎ   zt |
¡ W n tyÈ   Y n0 Y qˆ0 |	  S qˆd S )Nr   z.grail-unixz-*)ÚglobÚpwdÚsocketÚtempfiler0   r1   ÚjoinÚ
gettempdirÚgetpwuidÚgetuidÚescapeÚAF_UNIXÚSOCK_STREAMÚconnectrR   Úunlink)r9   r†   r‡   rˆ   r‰   ÚtempdirÚuserÚfilenameZmaybesÚsÚfnr   r   r   Ú_find_grail_rc˜  s,    ÿ
zGrail._find_grail_rcc                 C   s&   |   ¡ }|sdS | |¡ | ¡  dS )Nr   r   )r˜   ÚsendÚclose)r9   rk   r–   r   r   r   Ú_remote²  s    
zGrail._remoter   Tc                 C   s2   t  d|¡ |r |  d| ¡}n|  d| ¡}|S )NrA   zLOADNEW zLOAD )rL   rM   r›   )r9   r&   r'   r(   Úokr   r   r   r   º  s
    z
Grail.openN)r   T)r   r	   r
   r˜   r›   r   r   r   r   r   r…   ”  s   r…   c                  C   sâ  t  d¡rtdd tdƒƒ dtjv r>t  d¡r>tdd tdƒƒ dtjv rbt  d¡rbtdd tdƒƒ dtjv r†t  d¡r†tdttdƒƒ t  d¡r tdd tdƒƒ dD ]} t  | ¡r¤t| d t| ƒƒ q¤d	D ]} t  | ¡rÈt| d t| ƒƒ qÈt  d
¡rtd
ttd
ƒƒ nt  d¡r"tdttdƒƒ dD ]"} t  | ¡r&t| d t	| ƒƒ q&t  d¡rftdd tdƒƒ dD ]"} t  | ¡rjt| d t
| ƒƒ qjt  d¡rªtdd tdƒƒ t  d¡rÆtdd tdƒƒ t  d¡rÞtdtd ƒ d S )Nzxdg-openZGNOME_DESKTOP_SESSION_IDz	gvfs-openz
gnome-openZKDE_FULL_SESSIONr   zx-www-browser)ÚfirefoxZ	iceweaselZiceapeÚ	seamonkey)zmozilla-firefoxzmozilla-firebirdÚfirebirdÚmozillaÚnetscaperƒ   r‚   )ZgaleonZepiphanyZ	skipstone)zgoogle-chromeÚchromeZchromiumzchromium-browserÚoperaZmosaicZgrail)r.   r/   r   r    r0   Úenvironr€   rr   rt   rz   r|   r~   r…   )r$   r   r   r   Úregister_X_browsersÊ  sD    



r¥   c                  C   s,  g a tjdkrNtdd tdƒƒ tdd tdƒƒ tdd tdƒƒ tdd tdƒƒ tjd d… dkr¸td	tƒ tj tj	 
d
d¡d¡} dddddd| fD ]}t |¡r”t|d t|ƒƒ q”ntj	 
d¡sÒtj	 
d¡r$z(d ¡ }tj|tjd}| ¡  ¡ }W n ttjttfy   Y n0 |atƒ  tj	 
d¡r¾t d¡rNtdd tdƒƒ t d¡rjtdd tdƒƒ t d¡r†tdd tdƒƒ t d¡r¢tdd tdƒƒ t d¡r¾tdd tdƒƒ dtj	v r(tj	d  tj¡}| ¡  |D ]>}|dkrèt|dd}|d  d u rèt|d t|ƒdd qèd S )!NÚdarwinÚMacOSXÚdefaultr¢   r   ZsafarirI   rJ   zwindows-defaultZPROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXErŸ   rž   r    r¡   r£   ZDISPLAYZWAYLAND_DISPLAYz$xdg-settings get default-web-browser)r_   ZTERMzwww-browserZlinksZelinksZlynxZw3mZBROWSERr6   Tr   r   )r   rL   rN   r   ÚMacOSXOSAScriptÚWindowsDefaultr0   r1   rŠ   r¤   r   r.   r/   r    r   rO   Úcheck_outputrd   ÚdecodeÚstripÚFileNotFoundErrorÚCalledProcessErrorÚPermissionErrorÚNotADirectoryErrorr   r¥   r!   r   ÚpathsepÚreverser#   )Ziexplorer$   r4   Z
raw_resultÚresultZuserchoicesrT   r   r   r   r     sX    

ÿÿ

r   rI   rJ   c                   @   s   e Zd Zddd„ZdS )rª   r   Tc                 C   s8   t  d|¡ zt |¡ W n ty.   Y dS 0 dS d S )NrA   FT)rL   rM   r0   Z	startfilerR   r<   r   r   r   r   X  s    zWindowsDefault.openN)r   TrY   r   r   r   r   rª   W  s   rª   r¦   c                   @   s   e Zd Zdd„ Zddd„ZdS )	r§   c                 C   s
   || _ d S r7   )r   r8   r   r   r   r:   s  s    zMacOSX.__init__r   Tc           	      C   s°   t  d|¡ d|vrd| }tt|ƒƒ}| jdkrDd| dd¡ }n<| jdkrTd	}nd
|d  }d| dd¡ }d| j||f }t dd¡}|d u r˜dS | |¡ | 	¡ }| S )NrA   ú:zfile:r¨   úopen location "%s"ú"ú%22ZOmniWebr6   ztoWindow %dr   zOpenURL "%s"z‰tell application "%s"
                                activate
                                %s %s
                            end tellÚ	osascriptÚwF)
rL   rM   rb   Úboolr   rD   r0   ÚpopenÚwriterš   )	r9   r&   r'   r(   ÚscriptZtoWindowr4   Úosapiperh   r   r   r   r   v  s&    


ý
zMacOSX.openN)r   TrV   r   r   r   r   r§   i  s   
r§   c                   @   s   e Zd Zdd„ Zddd„ZdS )	r©   c                 C   s
   || _ d S r7   )Ú_namer8   r   r   r   r:   ™  s    zMacOSXOSAScript.__init__r   Tc                 C   sb   | j dkrd| dd¡ }nd| j | dd¡f }t dd¡}|d u rJdS | |¡ | ¡ }| S )	Nr¨   r¶   r·   r¸   zž
                   tell application "%s"
                       activate
                       open location "%s"
                   end
                   r¹   rº   F)rÀ   rD   r0   r¼   r½   rš   )r9   r&   r'   r(   r¾   r¿   rh   r   r   r   r   œ  s    
û
zMacOSXOSAScript.openN)r   TrV   r   r   r   r   r©   ˜  s   r©   c            	   
   C   sð   dd l } dtjd  }z|   tjdd … d¡\}}W nL | jy€ } z2t|tjd t|tjd t d¡ W Y d }~n
d }~0 0 d}|D ]"\}}|dkr d}qŠ|dkrŠd}qŠt|ƒdkrÒt|tjd t d¡ |d }t||ƒ td	ƒ d S )
Nr   zDUsage: %s [-n | -t] url
    -n: open new window
    -t: open new tabr   Zntd)Úfiler{   z-tr-   ú)	ÚgetoptrL   ÚargvÚerrorÚprintr_   ÚexitÚlenr   )	rÃ   ÚusageZoptsr>   ÚmsgZnew_winÚoÚar&   r   r   r   Úmain°  s(    þ 

rÍ   Ú__main__)N)N)r   T)*r0   r   r.   rL   rO   Ú	threadingÚ__all__Ú	Exceptionr   ÚRLockr   r   r   r   r   r   r   r   r   r#   Úobjectr5   r!   r    rZ   rr   rt   rz   r|   ZChromiumr~   r   r€   r…   r¥   r   rN   rª   r§   r©   rÍ   r   r   r   r   r   Ú<module>   sP   
"
"O

	
56AK/
