a oe @ sb d dl Z d dlZd dlZd dlmZ d dlmZ eedrBd dlZd dl Z d dl Z d dlZd dlZd dl Z d dlmZ zed7 ZW n ey d ZY n0 G dd de jZG d d d eZdd Zd d Zdd Zdd ZdeiZedkr^d dlT eedZedd dgZedej ededZ!e!ge_"d dl#m$Z$ e$dZ%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| _| jds$| jdr4| jd d | _ttj| jdt j | _tj | d S )NFco)change_detected__file__filenameendswith win32fileZFindFirstChangeNotificationospathdirnamewin32conZFILE_NOTIFY_CHANGE_LAST_WRITEhandle threadingThread__init__self r 7C:\Program Files\Certbot\pkgs\isapi\samples\advanced.pyr N s zReloadWatcherThread.__init__c C s t | jtj }z t| jtj}t | j W n@ tj yr } z&|jtjkrR W Y d }~qW Y d }~n d }~0 0 t | jtj }||krt d d| _|}qd S )Nz+Detected file change - flagging for reload.T)r statr ST_MTIME win32eventZWaitForSingleObjectr ZINFINITEr ZFindNextChangeNotificationerrorwinerrorZERROR_INVALID_HANDLEprintr )r Z last_timercZdetailsZ 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_watcherstartr r r r r t s zExtension.__init__c C s | j jrtd t|d}|dr2|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_URLReportUnhealthyzI'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+ ZSendResponseHeaderssplitreload_countercloser ZHSE_STATUS_SUCCESS)r ZecburlqsZqueriesqvalr r r HttpExtensionProcx s* zExtension.HttpExtensionProcc C s | j d S r# )r) r$ )r statusr r r TerminateExtension s zExtension.TerminateExtensionN)r% r&