
    Yf.                     R   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Zd dlZd dlZd dlmZmZ d dlmZmZ dedededefdZd	eddfd
ZdZdZ ej                         ada G d dej6                  j8                        Zd!dZdeddfdZdede ddfdZ!de de"fdZ# ede      Z$ ede       Z%de$de$ddfdZ&dede ddfdZ'e(dk(  rPd dlZ e)ejT                        dkD  r.ejT                  d   Z+ e ejT                  d         Z, e'e+e,       y e-d        yy)"    N)EnvironmentFileSystemLoader)AnyNewType	directorysubdirectoryfilenamereturnc                     t         j                  j                  | ||      }t        j                  |      j                         S N)ospathjoinpathlibPath	read_text)r   r   r	   	file_paths       U/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/scalene/launchbrowser.pyread_file_contentr      s0    Yh?I<<	",,..    urlc                    t        j                         dk(  rd}n3t        j                         dk(  rd}nt        j                         dk(  rd}t        j                         5 } d| d}t	        j
                  d	d t	        j                  |      d
       t	        j                  |      j                  |        d d d        y # 1 sw Y   y xY w)NWindowsz;C:\Program Files (x86)\Google\Chrome\Application\chrome.exeLinuxz/usr/bin/google-chromeDarwinz>/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chromez, %s --disable-web-security --user-data-dir=""chrome_with_flagsT)	preferred)	platformsystemtempfileTemporaryDirectory
webbrowserregisterChromegetopen)r   chrome_pathtemp_dir
chrome_cmds       r   launch_browser_insecurer+      s    I%X		g	%.		h	&X 
	$	$	& 	-(#}$PQYPZZ[\
 	/&--j9T	K 	z"'',	- 	- 	-s   "ACC	localhostFTc                       e Zd ZdefdZy)CustomHandlerr
   c                     | j                   dk(  r6t        j                         a| j                  d       | j	                          y t
        j                  j                  j                  |       S )Nz
/heartbeat   )	r   timelast_heartbeatsend_responseend_headershttpserverSimpleHTTPRequestHandlerdo_GET)selfs    r   r8   zCustomHandler.do_GET2   sQ    99$!YY[Ns#;;77>>tDDr   N)__name__
__module____qualname__r   r8    r   r   r.   r.   1   s    E Er   r.   c                      t         r]t        j                         t        z
  dkD  r"t        d       da t	        j
                  d       t        j                  d       t         r\y y )N<   z.No heartbeat received, shutting down server...Fr      )server_runningr1   r2   printr   _exitsleepr=   r   r   monitor_heartbeatrE   <   sC    
99;'",BC"NHHQK

1 .r   httpdc                 @    t         r| j                          t         ry y r   )rA   handle_request)rF   s    r   serve_foreverrI   E   s    
 .r   hostportc                     t        j                  | |ft              5 }t        d|  d|        t	        |       d d d        y # 1 sw Y   y xY w)NzServing at http://:)socketserver	TCPServerr.   rB   rI   )rJ   rK   rF   s      r   
run_serverrP   I   sK    			tm	< "4&$01e  s   AAc                     t        j                   t         j                  t         j                        5 }	 |j                  d| f       	 ddd       y# t         j                  $ r Y ddd       yw xY w# 1 sw Y   yxY w)z
    Check if a given TCP port is available to start a server on the local machine.

    :param port: Port number as an integer.
    :return: True if the port is available, False otherwise.
    r,   NTF)socketAF_INETSOCK_STREAMbinderror)rK   ss     r   is_port_availablerX   N   ss     
v~~v'9'9	: a	FFK&'  || 	 		 s(   A3AA0%A3/A00A33A<Filename
LineNumberprofile_fnameoutput_fnamec           
         	 t        j                  |       }|j                         }t        j
                  j                  t              }t        |dd      t        |dd      t        |dd      t        |dd      t        |dd      d	}t        t        t        j
                  j                  |d            
      }|j                  d      }	 ddl}|j                  ||d   |d   |d   |d   |d   |j                   |j"                        }		 t%        |dd      5 }
|
j'                  |	       ddd       y# t        $ r | dk(  sJ d}Y &w xY w#  ddlm} Y xY w# 1 sw Y   yxY w# t(        $ r Y yw xY w)zRApply a template to generate a single HTML payload containing the current profile.demoz{}zscalene-guizscalene-gui.jsz	prism.csszprism.jsztablesort.jsztablesort.number.js)scalene_gui_js_textprism_css_textprism_js_texttablesort_js_texttablesort_number_js_text)loaderzindex.html.templater   Nr_   r`   ra   rb   rc   )profilegui_js	prism_cssprism_jstablesort_jstablesort_number_jsscalene_versionscalene_datewzutf-8)encoding)r   r   r   FileNotFoundErrorr   r   dirname__file__r   r   r   r   get_templatescalene_configscalene.scalene_configrenderrk   rl   r'   writeOSError)r[   r\   profile_filere   scalene_dirfile_contentsenvironmenttemplaters   rendered_contentfs              r   generate_htmlr   _   s   ||M2((* ''//(+K  1mM]^+KT*;zR.{M>Z$5k=Rg$hM [- HIK ''(=>H8  23 01/"#67)*DE&66#00 ' 	,g6 	&!GG$%	& 	&M  &&&.87	& 	& sM   %D8 E E* E/E* 8EEEE'#E* 'E* *	E65E6c                    t        |      s|dz  }t        |      st        j                         }| dk(  r t        t	        d      t	        d             d} t        j                  | t        j                  j                  t        j                         d             t        j                  t        j                                t        j                  t        t        |g      }|j!                          t        j                  t"              j!                          t%        j&                  dt         d| d	       |j                          t        j                  |       t)        j*                  d       t        j,                  d
       y )Nr@   r^   z	demo.htmlz
index.html)targetargs)r   zhttp://rM   /r   )rX   r   getcwdr   rY   shutilcopyr   r   r!   
gettempdirchdir	threadingThreadrP   HOSTstartrE   r#   open_newr1   rD   rC   )r	   rK   cwdserver_threads       r   r   r      s   %	  % ))+C6hv&(=>
KK"'',,x':':'<lKLHHX  "#$$JdD\JM-.446'$qa01HHSM 	JJqMHHQKr   __main__   r@   z+Need to supply filename and port arguments.)r
   N).http.serverr5   r   r   r   rR   rN   
subprocesssysr!   r   r1   r#   r   jinja2r   r   typingr   r   strr   r+   r   shutdown_requestedr2   rA   r6   r7   r.   rE   rI   intrP   boolrX   rY   rZ   r   r   r:   lenargvr	   rK   rB   r=   r   r   <module>r      s    	      
      0 / /C /3 /3 /
- - -*  	EDKK88 	E  S   
C D  :s#\3'
0 0 0d 0fC s t . z
388}q88A;388A;h;< r   