o
    ª›hq  ã                   @   sH  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 G dd„ de	jƒZdd	„ 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)ÚInternalReloadExceptionc                   @   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   úHc:\Users\shubh\Videos\agent\nova\Lib\site-packages\isapi/samples/test.pyr      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
)Né   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   Úrun)   s"   €üózReloadWatcherThread.runc                 C   s   t  | j¡ d S ©N)r   ZFindCloseChangeNotificationr   r   r   r   r   Ústop:   s   zReloadWatcherThread.stopN)Ú__name__Ú
__module__Ú__qualname__r   r%   r'   r   r   r   r   r      s    r   c                 C   s   t dƒ |  ¡  d S )NzTransmit complete!)r"   Úclose)ÚecbZhFileZcbIOZerrCoder   r   r   ÚTransmitFileCallback>   s   r-   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú	ExtensionzPython test Extensionc                 C   s   t ƒ | _| j ¡  d S r&   )r   Úreload_watcherÚstartr   r   r   r   r   H   s   zExtension.__init__c                 C   sÜ   | j jr
tdƒ t‚| d¡ d¡rJtjtjB }t	 
ttjdd tj|d ¡}tjtjB tjB }z| t|t|ƒdddd d |¡	 W tjS    | ¡  ‚ | ddd¡ td|d� td	| d
¡|d� td|d� | ¡  tjS )NzDoing reloadZUNICODE_URLztest.pyr   z200 OKzContent-Type: text/html

z<HTML><BODY>)ÚfilezThe root of this site is atú/z</BODY></HTML>)r/   r	   r"   r   ZGetServerVariabler   r   ZFILE_FLAG_SEQUENTIAL_SCANÚFILE_FLAG_OVERLAPPEDr   Ú
CreateFiler
   ÚGENERIC_READÚOPEN_EXISTINGr   ZHSE_IO_ASYNCZHSE_IO_DISCONNECT_AFTER_SENDZHSE_IO_SEND_HEADERSÚTransmitFiler-   ÚintÚCloseZSendResponseHeadersZMapURLToPathr+   ZHSE_STATUS_SUCCESS)r   r,   Z
file_flagsZhfileÚflagsr   r   r   ÚHttpExtensionProcL   sV   
ÿù
ÿþÿ÷õ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   r;   r=   r   r   r   r   r.   E   s
    6r.   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   ÿrE   c                 C   s   t ƒ  t dƒ t dƒ d S )NzThe sample has been installed.z"Point your browser to /PyISAPITest©r"   rB   r   r   r   ÚPostInstall•   s   rG   c                 C   s   t dƒ dS )zQuery the status of somethingzEverything seems to be fine!NrF   )rD   ÚlogÚargr   r   r   Ústatus_handlerœ   s   rJ   r<   Ú__main__)Ú*)rG   rL   )r.   ÚFlagsZPyISAPITestÚreplace)ÚNamerA   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   r   r   r-   r.   r?   rE   rG   rJ   rU   r(   Zisapi.installZISAPIParametersrC   ZScriptMapParamsÚsmZVirtualDirParametersr>   ZvdZVirtualDirsÚoptparserP   ÚparserÚ
add_optionZHandleCommandLiner   r   r   r   Ú<module>   sZ   
"B
úü
ÿâ