a „oeÅ ã @ sb d dl Z d dlZd dlZd dlmZ d dlmZ eedƒrBd dlZd dl Z d dl Z d dlZd dlZd dl Z d dlmZ zed7 ZW n ey˜ d ZY n0 G dd„ de jƒZG d d „ d eƒZdd„ Zd d„ Zdd„ Zdd„ ZdeiZedk�r^d dlT eed�Zedd d�gZedej eded�Z!e!ge_"d dl#m$Z$ e$dƒZ%e%j&dddd d!� e'ee%ed"� dS )#é N)Úisapicon)ÚSimpleExtensionZisapidllhandle)ÚInternalReloadExceptioné c @ s$ e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚReloadWatcherThreadc C s` d| _ t| _| j d¡s$| j d¡r4| jd d… | _t tj | j¡dt j ¡| _tj | ¡ d S )NFÚcÚoéÿÿÿÿ)Úchange_detectedÚ__file__ÚfilenameÚendswithÚ win32fileZFindFirstChangeNotificationÚosÚpathÚdirnameÚwin32conZFILE_NOTIFY_CHANGE_LAST_WRITEÚhandleÚ threadingÚThreadÚ__init__©Úself© r ú7C:\Program Files\Certbot\pkgs\isapi\samples\advanced.pyr N s ýzReloadWatcherThread.__init__c C s¦ t | j¡tj }z t | jtj¡}t | j¡ W n@ tj yr } z&|jtjkrR‚ W Y d }~q¢W Y d }~n d }~0 0 t | j¡tj }||krt dƒ d| _|}qd S )Nz+Detected file change - flagging for reload.T)r Ústatr ÚST_MTIMEÚ win32eventZWaitForSingleObjectr ZINFINITEr ZFindNextChangeNotificationÚerrorÚwinerrorZERROR_INVALID_HANDLEÚprintr )r Z last_timeÚrcZdetailsZ this_timer r r ÚrunZ s "zReloadWatcherThread.runc C s t | j¡ d S ©N)r ZFindCloseChangeNotificationr r r r r Ústopk s zReloadWatcherThread.stopN)Ú__name__Ú __module__Ú__qualname__r r" r$ r r r r r M s r c @ s( e Zd ZdZdd„ Zdd„ Zdd„ ZdS ) Ú Extensionz Python advanced sample Extensionc C s t ƒ | _| j ¡ d S r# )r Úreload_watcherÚstartr r r r r t s zExtension.__init__c C sÞ | j jrtdƒ t‚| d¡}| d¡r2| d¡ | ddd¡ td|d � | d ¡}|r¦| d¡}td|d � |D ]$}| |d ¡}td||f |d � qttd|d � td|d � tdt f |d � td|d � | ¡ tjS )NzDoing reloadZUNICODE_URLÚReportUnhealthyzI'm a little sickz200 OKzContent-Type: text/html r z
)ÚfileZQUERY_STRINGú&zz<no such variable>z%s=%rzzThis module has been importedz%d timesz) r) r r r ZGetServerVariabler r+ ZSendResponseHeadersÚsplitÚreload_counterÚcloser ZHSE_STATUS_SUCCESS)r ZecbÚurlÚqsZqueriesÚqÚvalr r r ÚHttpExtensionProcx s* zExtension.HttpExtensionProcc C s | j ¡ d S r# )r) r$ )r Ústatusr r r ÚTerminateExtension— s zExtension.TerminateExtensionN)r% r&