
    $gD                       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rdd	lmZ dd
lmZ ddl	mZ ddlmZm Z   G d de          Z! G d de          Z" G 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                  T     e Zd ZdZedej        ej        dd fdZddZ	ddZ
 x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                    t                                          ||||           t                       _        t	          j                     _         fd _        d S )N)r   r   c                 R    t          j        j        j        j                   S )N)	recursiver   r   )r   r!   pathis_recursive)r   selfr   s   Z/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/watchdog/observers/polling.py<lambda>z)PollingEmitter.__init__.<locals>.<lambda>@   s/    GXJOj-	H
 H
 H
     )super__init__r   	_snapshot	threadingLock_lock_take_snapshot)r-   r    r!   r   r   r   r   	__class__s   `    ``r.   r2   zPollingEmitter.__init__3   st     	eW<XXX,B,D,D^%%
@
 @
 @
 @
 @
 @
r0   c                8    |                                  | _        d S N)r7   r3   )r-   s    r.   on_thread_startzPollingEmitter.on_thread_startG   s    ,,..r0   c                   | j                             |          rd S | j        5  |                                 s	 d d d            d S 	 |                                 }n\# t
          $ rO |                     t          | j        j	                             | 
                                 Y d d d            d S w xY wt          | j        |          }|| _        |j        D ]$}|                     t          |                     %|j        D ]$}|                     t!          |                     %|j        D ]$}|                     t%          |                     %|j        D ](\  }}|                     t)          ||                     )|j        D ]$}|                     t          |                     %|j        D ]$}|                     t/          |                     %|j        D ]$}|                     t3          |                     %|j        D ](\  }}|                     t7          ||                     )	 d d d            d S # 1 swxY w Y   d S r:   )stopped_eventwaitr6   should_keep_runningr7   OSErrorqueue_eventr   r!   r+   stopr   r3   files_deletedr   files_modifiedr   files_createdr
   files_movedr   dirs_deleteddirs_modifiedr   dirs_createdr   
dirs_movedr	   )r-   r   new_snapshoteventssrc_path	dest_paths         r.   queue_eventszPollingEmitter.queue_eventsJ   s?    ""7++ 	FZ "	E "	E++-- "	E "	E "	E "	E "	E "	E "	E "	E#2244     !A!ABBB		"	E "	E "	E "	E "	E "	E "	E "	E
 +4><HHF)DN #0 = =  !1(!;!;<<<<"1 > >  !28!<!<===="0 = =  !1(!;!;<<<<'-'9 F F#)  )!D!DEEEE #/ < <  !:!:;;;;"0 = =  !1(!;!;<<<<"/ < <  !:!:;;;;'-'8 E E#)  x!C!CDDDDEC"	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	E "	Es7   IAIA
B6'I5B66FIII)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   scandirr2   r;   rO   __classcell__r8   s   @r.   r   r   .   s          1;?02AC
 
 
 
 
 
 
 
(/ / / /(E (E (E (E (E (E (E (Er0   r   c                  *     e Zd ZdZedd fdZ xZS )	PollingObserverz\Platform-independent observer that polls a directory to detect file
    system changes.
    r   r   r"   r&   r'   c               X    t                                          t          |           d S )Nr[   )r1   r2   r   )r-   r   r8   s     r.   r2   zPollingObserver.__init__z   s&    99999r0   rP   )rQ   rR   rS   rT   r   r2   rW   rX   s   @r.   rZ   rZ   u   sW          ,D : : : : : : : : : : : :r0   rZ   c                  *     e Zd ZdZddd fdZ xZS )PollingObserverVFSzJFile system independent observer that polls a directory to detect changes.   )polling_intervalr   r$   r   r%   r`   intr&   r'   c               |    t          t          ||          }t                                          ||           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   r[   N)r   r   r1   r2   )r-   r   r   r`   emitter_clsr8   s        r.   r2   zPollingObserverVFS.__init__   s=     n4III.>?????r0   )r   r$   r   r%   r`   ra   r&   r'   )rQ   rR   rS   rT   r2   rW   rX   s   @r.   r^   r^   ~   s^        TT !"@ @ @ @ @ @ @ @ @ @ @ @r0   r^   )$rT   
__future__r   rU   r4   	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   rZ   r^    r0   r.   <module>rl      s   " # " " " " " 				                      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 q p p p p p p p p p p p g g g g g g g g g g A((((((//////@@@@@@@@DE DE DE DE DE\ DE DE DEN: : : : :l : : :@ @ @ @ @ @ @ @ @ @r0   