o
    hD                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZmZ ddlmZmZmZmZ ddlmZmZmZ erbdd	lmZ dd
lmZ ddl	mZ ddlmZm Z  G dd deZ!G dd deZ"G dd deZ#dS )uf  :module: watchdog.observers.polling
:synopsis: Polling emitter implementation.
:author: yesudeep@google.com (Yesudeep Mangalapilly)
:author: contact@tiger-222.fr (Mickaël Schoentgen)

Classes
-------
.. autoclass:: PollingObserver
   :members:
   :show-inheritance:

.. autoclass:: PollingObserverVFS
   :members:
   :show-inheritance:
   :special-members:
    )annotationsN)partial)TYPE_CHECKING)DirCreatedEventDirDeletedEventDirModifiedEventDirMovedEventFileCreatedEventFileDeletedEventFileModifiedEventFileMovedEvent)DEFAULT_EMITTER_TIMEOUTDEFAULT_OBSERVER_TIMEOUTBaseObserverEventEmitter)DirectorySnapshotDirectorySnapshotDiffEmptyDirectorySnapshot)Iterator)Callable)FileSystemEvent)
EventQueueObservedWatchc                      sF   e Zd ZdZedejejdd fddZdddZ	dddZ
  ZS )PollingEmitterz[Platform-independent emitter that polls a directory to detect file
    system changes.
    N)timeoutevent_filterstatlistdirevent_queuer   watchr   r   floatr   "list[type[FileSystemEvent]] | Noner   Callable[[str], os.stat_result]r   -Callable[[str | None], Iterator[os.DirEntry]]returnNonec                  s<   t  j||||d t _t _ fdd_d S )N)r   r   c                     s   t jjjj dS )N)	recursiver   r   )r   r   pathis_recursive r   selfr   r)   N/var/www/vscode/kcb/lib/python3.10/site-packages/watchdog/observers/polling.py<lambda>@   s    z)PollingEmitter.__init__.<locals>.<lambda>)super__init__r   	_snapshot	threadingLock_lock_take_snapshot)r+   r   r   r   r   r   r   	__class__r*   r,   r/   3   s   

zPollingEmitter.__init__c                 C  s   |   | _d S N)r4   r0   )r+   r)   r)   r,   on_thread_startG   s   zPollingEmitter.on_thread_startc              	   C  s  | j |rd S | j |  s	 W d    d S z|  }W n ty<   | t| jj	 | 
  Y W d    d S w t| j|}|| _|jD ]	}| t| qI|jD ]	}| t| qV|jD ]	}| t| qc|jD ]\}}| t|| qp|jD ]	}| t| q|jD ]	}| t| q|jD ]	}| t| q|jD ]\}}| t|| qW d    d S 1 sw   Y  d S r7   )stopped_eventwaitr3   should_keep_runningr4   OSErrorqueue_eventr   r   r'   stopr   r0   files_deletedr
   files_modifiedr   files_createdr	   files_movedr   dirs_deleteddirs_modifiedr   dirs_createdr   
dirs_movedr   )r+   r   new_snapshoteventssrc_path	dest_pathr)   r)   r,   queue_eventsJ   sD   





"zPollingEmitter.queue_events)r   r   r   r   r   r    r   r!   r   r"   r   r#   r$   r%   )r$   r%   r   r    r$   r%   )__name__
__module____qualname____doc__r   osr   scandirr/   r8   rK   __classcell__r)   r)   r5   r,   r   .   s    	
r   c                      s(   e Zd ZdZedd	 fddZ  ZS )
PollingObserverz\Platform-independent observer that polls a directory to detect file
    system changes.
    r   r   r    r$   r%   c                  s   t  jt|d d S )NrU   )r.   r/   r   )r+   r   r5   r)   r,   r/   z   s   zPollingObserver.__init__rL   )rM   rN   rO   rP   r   r/   rS   r)   r)   r5   r,   rT   u   s    rT   c                      s(   e Zd ZdZddd fddZ  ZS )PollingObserverVFSzJFile system independent observer that polls a directory to detect changes.   )polling_intervalr   r"   r   r#   rX   intr$   r%   c                  s"   t t||d}t j||d dS )a  :param stat: stat function. See ``os.stat`` for details.
        :param listdir: listdir function. See ``os.scandir`` for details.
        :type polling_interval: int
        :param polling_interval: interval in seconds between polling the file system.
        )r   r   rU   N)r   r   r.   r/   )r+   r   r   rX   emitter_clsr5   r)   r,   r/      s   zPollingObserverVFS.__init__)r   r"   r   r#   rX   rY   r$   r%   )rM   rN   rO   rP   r/   rS   r)   r)   r5   r,   rV   ~   s    rV   )$rP   
__future__r   rQ   r1   	functoolsr   typingr   watchdog.eventsr   r   r   r   r	   r
   r   r   watchdog.observers.apir   r   r   r   watchdog.utils.dirsnapshotr   r   r   collections.abcr   r   r   r   r   r   rT   rV   r)   r)   r)   r,   <module>   s"    (
G	