o
    ª›h¼  ã                   @   sd  d dl Z d dlZd dlZd dlmZ d dlmZ eedƒ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mZ zed7 ZW n eyL   d ZY nw G dd„ de	jƒZG d	d
„ d
eƒZdd„ Zdd„ Zdd„ Zdd„ ZdeiZedkr°d dlT eed�Zedd d�gZedej eded�Z!e!ge_"d dl#m$Z$ e$dƒZ%e%j&dddd d!� e'ee%ed"� dS dS )#é    N)Úisapicon)ÚSimpleExtensionZisapidllhandle)ÚInternalReloadExceptioné   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚReloadWatcherThreadc                 C   s`   d| _ t| _| j d¡s| j d¡r| jd d… | _t tj | j¡dt	j
¡| _tj | ¡ d S )NFÚcÚoéÿÿÿÿ)Úchange_detectedÚ__file__ÚfilenameÚendswithÚ	win32fileZFindFirstChangeNotificationÚosÚpathÚdirnameÚwin32conZFILE_NOTIFY_CHANGE_LAST_WRITEÚhandleÚ	threadingÚThreadÚ__init__©Úself© r   úLc:\Users\shubh\Videos\agent\nova\Lib\site-packages\isapi/samples/advanced.pyr   N   s   ýzReloadWatcherThread.__init__c              
   C   sš   t  | j¡tj }	 zt | jtj¡}t 	| j¡ W n tj
y5 } z|jtjkr*‚ W Y d }~d S d }~ww t  | j¡tj }||krLtdƒ d| _|}q
)Nr   z+Detected file change - flagging for reload.T)r   Ústatr   ÚST_MTIMEÚ
win32eventÚWaitForSingleObjectr   ÚINFINITEr   ZFindNextChangeNotificationÚerrorÚwinerrorZERROR_INVALID_HANDLEÚprintr
   )r   Z	last_timeÚrcÚdetailsZ	this_timer   r   r   ÚrunZ   s"   €üózReloadWatcherThread.runc                 C   s   t  | j¡ d S ©N)r   ZFindCloseChangeNotificationr   r   r   r   r   Ústopk   s   zReloadWatcherThread.stopN)Ú__name__Ú
__module__Ú__qualname__r   r%   r'   r   r   r   r   r   M   s    r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú	Extensionz Python advanced sample Extensionc                 C   s   t ƒ | _| j ¡  d S r&   )r   Úreload_watcherÚstartr   r   r   r   r   t   s   zExtension.__init__c                 C   sà   | j jr
tdƒ t‚| d¡}| d¡r| d¡ | ddd¡ td|d	� | d
¡}|rT| d¡}td|d	� |D ]}| |d¡}t|› d|›�|d	� q:td|d	� td|d	� tdt	f |d	� td|d	� | 
¡  tjS )NzDoing reloadZUNICODE_URLÚReportUnhealthyzI'm a little sickz200 OKzContent-Type: text/html

r   z<HTML><BODY>)ÚfileZQUERY_STRINGú&z<PRE>z&lt;no such variable&gt;ú=z
</PRE><P/>zThis module has been importedz%d timesz</BODY></HTML>)r,   r
   r"   r   ZGetServerVariabler   r.   ZSendResponseHeadersÚsplitÚreload_counterÚcloser   ZHSE_STATUS_SUCCESS)r   ZecbÚurlÚqsZqueriesÚqÚvalr   r   r   ÚHttpExtensionProcx   s*   




zExtension.HttpExtensionProcc                 C   s   | j  ¡  d S r&   )r,   r'   )r   Ústatusr   r   r   ÚTerminateExtension—   s   zExtension.TerminateExtensionN)r(   r)   r*   Ú__doc__r   r9   r;   r   r   r   r   r+   q   s
    r+   c                   C   s   t ƒ S r&   )r+   r   r   r   r   Ú__ExtensionFactory__œ   s   r=   c                 C   s   |j r	|j | _d S d S r&   )ÚdescriptionÚDescription©ÚparamsÚoptionsr   r   r   ÚPreInstallDirectory¢   s   ÿrC   c                 C   s*   t ƒ  t dƒ t dƒ t dƒ t dƒ d S )NzThe sample has been installed.z+Point your browser to /AdvancedPythonSamplez2If you modify the source file and reload the page,z+you should see the reload counter increment©r"   r@   r   r   r   ÚPostInstallª   s
   rE   c                 C   s   t dƒ dS )zQuery the status of somethingzEverything seems to be fine!NrD   )rB   ÚlogÚargr   r   r   Ústatus_handler³   s   rH   r:   Ú__main__)Ú*)rE   rJ   )r+   ÚFlagsZAdvancedPythonSampleÚreplace)ÚNamer?   Z
ScriptMapsZScriptMapUpdateZ
PreInstall)ÚOptionParserÚ z--descriptionÚstorez3custom description to use for the virtual directory)ÚactionÚhelp)Z
opt_parserÚcustom_arg_handlers)(r   r   ÚsysZisapir   Zisapi.simpler   ÚhasattrZwin32traceutilr   r   r   r   r!   r   r3   Ú	NameErrorr   r   r+   r=   rC   rE   rH   rS   r(   Zisapi.installZISAPIParametersrA   ZScriptMapParamsÚsmZVirtualDirParametersr<   ZvdZVirtualDirsÚoptparserN   ÚparserÚ
add_optionZHandleCommandLiner   r   r   r   Ú<module>   sb   
$ÿ$+	
úü
ÿâ