B
    `                 @   sD   d dl Z d dlZd dlZddlmZ G dd dejeZdd ZdS )    N   )IFileMonitorc                   sB   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Z  Z	S )PollingFileMonitoraA  
    An :class:`hupper.interfaces.IFileMonitor` that stats the files
    at periodic intervals.

    ``callback`` is a callable that accepts a path to a changed file.

    ``interval`` is a value in seconds between scans of the files on disk.
    Do not set this too low or it will eat your CPU and kill your drive.

    r   c                s<   t t|   || _|| _t | _i | _t	 | _
d| _d S )NT)superr   __init__callbackpoll_intervalsetpathsmtimes	threadingLocklockenabled)selfr   intervalkw)	__class__ V/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/hupper/polling.pyr      s    
zPollingFileMonitor.__init__c          	   C   s"   | j  | j| W d Q R X d S )N)r   r
   add)r   pathr   r   r   add_path   s    zPollingFileMonitor.add_pathc          	   C   sB   x<| j r<| j t| j}W d Q R X | | t| j qW d S )N)r   r   listr
   check_reloadtimesleepr   )r   r
   r   r   r   run!   s
    
zPollingFileMonitor.runc             C   s
   d| _ d S )NF)r   )r   r   r   r   stop(   s    zPollingFileMonitor.stopc             C   st   t  }xL|D ]D}t|}|| jkr.|| j|< q| j| |k r|| j|< || qW xt|D ]}| | q^W d S )N)r	   	get_mtimer   r   sortedr   )r   r
   changesr   mtimer   r   r   r   +   s    


zPollingFileMonitor.check_reload)r   )
__name__
__module____qualname____doc__r   r   r   r   r   __classcell__r   r   )r   r   r      s   
	r   c          	   C   s6   yt | }|r|jS W n ttfk
r0   Y nX dS )Nr   )osstatst_mtimeOSErrorIOError)r   r)   r   r   r   r   8   s    

r   )r(   r   r   Z
interfacesr   Threadr   r   r   r   r   r   <module>   s
   0