o
    c.                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ dZdZ	G dd deZ
G dd	 d	ZG d
d deZG dd deZG dd deZdS )    N)Path)
BaseThread)SkipRepeatsQueue   c                   @   s   e Zd ZdS )
EventQueueN)__name__
__module____qualname__ r
   r
   ZG:\Development\the-witcher-3-mod-manager\.venv\lib\site-packages\watchdog\observers\api.pyr      s    r   c                   @   sZ   e Zd Z	 dd Zedd Zedd Zedd Zd	d
 Zdd Z	dd Z
dd ZdS )ObservedWatchc                 C   s&   t |trt|| _n|| _|| _d S N)
isinstancer   str_path_is_recursive)selfpath	recursiver
   r
   r   __init__0   s   

zObservedWatch.__init__c                 C      	 | j S r   )r   r   r
   r
   r   r   7      zObservedWatch.pathc                 C   r   r   )r   r   r
   r
   r   is_recursive<   r   zObservedWatch.is_recursivec                 C   s   | j | jfS r   )r   r   r   r
   r
   r   keyA   s   zObservedWatch.keyc                 C   s   | j |j kS r   r   r   watchr
   r
   r   __eq__E      zObservedWatch.__eq__c                 C   s   | j |j kS r   r   r   r
   r
   r   __ne__H   r   zObservedWatch.__ne__c                 C   s
   t | jS r   )hashr   r   r
   r
   r   __hash__K   s   
zObservedWatch.__hash__c                 C   s   dt | j| j| jf S )Nz<%s: path=%s, is_recursive=%s>)typer   r   r   r   r
   r
   r   __repr__N   s   zObservedWatch.__repr__N)r   r   r	   r   propertyr   r   r   r   r    r"   r$   r
   r
   r
   r   r   '   s    


r   c                       sR   e Zd Z	 ef fdd	Zedd Zedd Zdd Zd	d
 Z	dd Z
  ZS )EventEmitterc                    s    t    || _|| _|| _d S r   )superr   _event_queue_watch_timeout)r   event_queuer   timeout	__class__r
   r   r   g   s   

zEventEmitter.__init__c                 C   r   r   r*   r   r
   r
   r   r,   m      zEventEmitter.timeoutc                 C   r   r   )r)   r   r
   r
   r   r   t   r0   zEventEmitter.watchc                 C   s   	 | j || jf d S r   )r(   putr   )r   eventr
   r
   r   queue_event{   s   	zEventEmitter.queue_eventc                 C      d S r   r
   r   r,   r
   r
   r   queue_events      zEventEmitter.queue_eventsc                 C   s$   |   r| | j |   sd S d S r   )should_keep_runningr6   r,   r   r
   r
   r   run   s   zEventEmitter.run)r   r   r	   DEFAULT_EMITTER_TIMEOUTr   r%   r,   r   r3   r6   r9   __classcell__r
   r
   r-   r   r&   T   s    

r&   c                       sZ   e Zd Z	 e Z	 ef fdd	Zedd Zdd Z	edd Z
d	d
 Zdd Z  ZS )EventDispatcherc                    s   t    t | _|| _d S r   )r'   r   r   r(   r*   r5   r-   r
   r   r      s   

zEventDispatcher.__init__c                 C   r   r   r/   r   r
   r
   r   r,      r   zEventDispatcher.timeoutc                 C   s6   t |  z
| jtj W d S  tjy   Y d S w r   )r   stopr+   
put_nowaitr<   _stop_eventqueueFullr   r
   r
   r   r=      s   
zEventDispatcher.stopc                 C   r   r   )r(   r   r
   r
   r   r+      r0   zEventDispatcher.event_queuec                 C   r4   r   r
   )r   r+   r
   r
   r   dispatch_events   r7   zEventDispatcher.dispatch_eventsc                 C   s>   |   rz| | j W n
 tjy   Y q w |   sd S d S r   )r8   rB   r+   r@   Emptyr   r
   r
   r   r9      s   zEventDispatcher.run)r   r   r	   objectr?   DEFAULT_OBSERVER_TIMEOUTr   r%   r,   r=   r+   rB   r9   r;   r
   r
   r-   r   r<      s    

r<   c                       s   e Zd Z	 ef fdd	Zdd Zdd Zdd Zd	d
 Zdd Z	e
dd Z fddZd ddZdd Zdd Zdd Zdd Zdd Zdd Z  ZS )!BaseObserverc                    s@   t  | || _t | _t | _t | _	t | _
t | _d S r   )r'   r   _emitter_class	threadingRLock_lockset_watchesdict	_handlers	_emitters_emitter_for_watch)r   emitter_classr,   r-   r
   r   r      s   
zBaseObserver.__init__c                 C   s   || j |j< | j| d S r   )rP   r   rO   addr   emitterr
   r
   r   _add_emitter   s   zBaseObserver._add_emitterc                 C   sB   | j |j= | j| |  z|  W d S  ty    Y d S w r   )rP   r   rO   remover=   joinRuntimeErrorrS   r
   r
   r   _remove_emitter   s   
zBaseObserver._remove_emitterc              	   C   sV   | j D ]}|  q| j D ]}z|  W q ty   Y qw | j   | j  d S r   )rO   r=   rW   rX   clearrP   rS   r
   r
   r   _clear_emitters   s   



zBaseObserver._clear_emittersc                 C   s*   || j vrt | j |< | j | | d S r   )rN   rK   rR   r   event_handlerr   r
   r
   r   _add_handler_for_watch   s   
z#BaseObserver._add_handler_for_watchc                 C   s   | j |= d S r   )rN   r   r
   r
   r   _remove_handlers_for_watch   r   z'BaseObserver._remove_handlers_for_watchc                 C   r   r   )rO   r   r
   r
   r   emitters   r   zBaseObserver.emittersc              	      sD   | j  D ]}z|  W q ty   | |  w t   d S r   )rO   copystart	ExceptionrY   r'   rS   r-   r
   r   rb     s   
zBaseObserver.startFc                 C   s   	 | j 9 t||}| || | j|d u r/| j| j|| jd}|  r*|	  | 
| | j| W d    |S 1 s@w   Y  |S )N)r+   r   r,   )rJ   r   r^   rP   getrG   r+   r,   is_aliverb   rU   rL   rR   )r   r]   r   r   r   rT   r
   r
   r   schedule  s"   


zBaseObserver.schedulec                 C   s:   	 | j  | || W d    d S 1 sw   Y  d S r   )rJ   r^   r\   r
   r
   r   add_handler_for_watch3  s   "z"BaseObserver.add_handler_for_watchc                 C   s>   	 | j  | j| | W d    d S 1 sw   Y  d S r   )rJ   rN   rV   r\   r
   r
   r   remove_handler_for_watchE  s   "z%BaseObserver.remove_handler_for_watchc                 C   sV   	 | j  | j| }| j|= | | | j| W d    d S 1 s$w   Y  d S r   )rJ   rP   rN   rY   rL   rV   )r   r   rT   r
   r
   r   
unscheduleW  s   

"zBaseObserver.unschedulec                 C   sJ   	 | j  | j  |   | j  W d    d S 1 sw   Y  d S r   )rJ   rN   rZ   r[   rL   r   r
   r
   r   unschedule_allf  s   
"zBaseObserver.unschedule_allc                 C   s   |    d S r   )rj   r   r
   r
   r   on_thread_stopn  r   zBaseObserver.on_thread_stopc                 C   s   |j dd}|tju rd S |\}}| j" t| j |g D ]}|| j |g v r.|| qW d    n1 s9w   Y  |  d S )NT)block)rd   r<   r?   rJ   listrN   dispatch	task_done)r   r+   entryr2   r   handlerr
   r
   r   rB   q  s   

zBaseObserver.dispatch_events)F)r   r   r	   rE   r   rU   rY   r[   r^   r_   r%   r`   rb   rf   rg   rh   ri   rj   rk   rB   r;   r
   r
   r-   r   rF      s$    		

	'rF   )r@   rH   pathlibr   watchdog.utilsr   watchdog.utils.bricksr   r:   rE   r   r   r&   r<   rF   r
   r
   r
   r   <module>   s   	-C;