a „oe®ã@sFddlZddlZddlZddlmZddlmZeedƒrBddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZGdd„de jƒZdd „ZGd d „d eƒZd d „Zdd„Zdd„Zdd„ZdeiZedk�rBddlTeed�Zeddd�gZedejeded�Z e ge_!ddl"m#Z#e#dƒZ$e$j%ddd d!d"�e&ee$ed#�dS)$éN)Úisapicon)ÚSimpleExtensionZisapidllhandle)ÚInternalReloadExceptionc@s$eZdZdd„Zdd„Zdd„ZdS)ÚReloadWatcherThreadcCs`d|_t|_|j d¡s$|j d¡r4|jdd…|_t tj |j¡dt j ¡|_ t j  |¡dS)NFÚcÚoéÿÿÿÿ)Úchange_detectedÚ__file__ÚfilenameÚendswithÚ win32fileZFindFirstChangeNotificationÚosÚpathÚdirnameÚwin32conZFILE_NOTIFY_CHANGE_LAST_WRITEÚhandleÚ threadingÚThreadÚ__init__©Úself©rú3C:\Program Files\Certbot\pkgs\isapi\samples\test.pyrs ýzReloadWatcherThread.__init__c Cs¦t |j¡tj}z t |jtj¡}t  |j¡Wn@tj yr}z&|j t j krR‚WYd}~q¢WYd}~n d}~00t |j¡tj}||krt dƒd|_|}qdS)Nz+Detected file change - flagging for reload.T)rÚstatr ÚST_MTIMEÚ win32eventZWaitForSingleObjectrZINFINITEr ZFindNextChangeNotificationÚerrorÚwinerrorZERROR_INVALID_HANDLEÚprintr )rZ last_timeÚrcZdetailsZ this_timerrrÚrun)s "zReloadWatcherThread.runcCst |j¡dS©N)r ZFindCloseChangeNotificationrrrrrÚstop:szReloadWatcherThread.stopN)Ú__name__Ú __module__Ú __qualname__rr!r#rrrrrs rcCstdƒ| ¡dS)NzTransmit complete!)rÚclose)ÚecbZhFileZcbIOZerrCoderrrÚTransmitFileCallback>sr)c@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú ExtensionzPython test ExtensioncCstƒ|_|j ¡dSr")rÚreload_watcherÚstartrrrrrHszExtension.__init__c Csà|jjrtdƒt‚| d¡ d¡r˜tjtjB}t   t tj ddtj |d¡}tjtjBtjB}z"| t|t|ƒddddd|¡ WqÚ| ¡‚YqÚ0nB| ddd¡td|d�td | d ¡|d�td |d�| ¡tjS) Nz Doing reloadZ UNICODE_URLztest.pyrz200 OKzContent-Type: text/html z )ÚfilezThe root of this site is atú/z)r+r rrZGetServerVariabler rZFILE_FLAG_SEQUENTIAL_SCANZFILE_FLAG_OVERLAPPEDr Z CreateFiler Z GENERIC_READZ OPEN_EXISTINGrZ HSE_IO_ASYNCZHSE_IO_DISCONNECT_AFTER_SENDZHSE_IO_SEND_HEADERSZ TransmitFiler)ÚintÚCloseZSendResponseHeadersZ MapURLToPathr'ZHSE_STATUS_SUCCESS)rr(Z file_flagsZhfileÚflagsrrrÚHttpExtensionProcLsT ÿù ÿþÿ÷    zExtension.HttpExtensionProccCs|j ¡dSr")r+r#)rÚstatusrrrÚTerminateExtension‚szExtension.TerminateExtensionN)r$r%r&Ú__doc__rr2r4rrrrr*Es6r*cCstƒSr")r*rrrrÚ__ExtensionFactory__‡sr6cCs|jr|j|_dSr")Ú descriptionÚ Description©ÚparamsÚoptionsrrrÚPreInstallDirectory�sr<cCstƒtdƒtdƒdS)NzThe sample has been installed.z"Point your browser to /PyISAPITest©rr9rrrÚ PostInstall•sr>cCs tdƒdS)zQuery the status of somethingzEverything seems to be fine!Nr=)r;ÚlogÚargrrrÚstatus_handlerœsrAr3Ú__main__)Ú*)r>rC)r*ZFlagsZ PyISAPITestÚreplace)ÚNamer8Z ScriptMapsZScriptMapUpdateZ PreInstall)Ú OptionParserÚz --descriptionÚstorez3custom description to use for the virtual directory)ÚactionÚhelp)Z opt_parserÚcustom_arg_handlers)'rrÚsysZisapirZ isapi.simplerÚhasattrZwin32traceutilrrrr rrrrr)r*r6r<r>rArKr$Z isapi.installZISAPIParametersr:ZScriptMapParamsZsmZVirtualDirParametersr5ZvdZ VirtualDirsZoptparserFÚparserZ add_optionZHandleCommandLinerrrrÚsV    "B  ú üÿ