
    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#y)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                       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listdirc                    t            ||||       t                _        t	        j
                          _         fd _        y )N)r   r   c                 r    t        j                  j                  j                  j                         S )N)	recursiver   r   )r   watchpathis_recursive)r   selfr   s   O/var/www/openai/venv/lib/python3.12/site-packages/watchdog/observers/polling.py<lambda>z)PollingEmitter.__init__.<locals>.<lambda>@   s*    GXJJOOjj--	H
    )super__init__r   	_snapshot	threadingLock_lock_take_snapshot)r&   event_queuer#   r   r   r   r   	__class__s   `    ``r'   r+   zPollingEmitter.__init__3   s>     	eW<X,B,D^^%
@
r)   c                .    | j                         | _        y N)r0   r,   )r&   s    r'   on_thread_startzPollingEmitter.on_thread_startG   s    ,,.r)   c                z   | j                   j                  |      ry | j                  5  | j                         s
	 d d d        y 	 | j	                         }t        | j                  |      }|| _        |j                  D ]  }| j                  t        |              |j                  D ]  }| j                  t!        |              |j"                  D ]  }| j                  t%        |              |j&                  D ]   \  }}| j                  t)        ||             " |j*                  D ]  }| j                  t        |              |j,                  D ]  }| j                  t/        |              |j0                  D ]  }| j                  t3        |              |j4                  D ]   \  }}| j                  t7        ||             " 	 d d d        y # t
        $ rI | j                  t        | j                  j                               | j                          Y d d d        y w xY w# 1 sw Y   y xY wr4   )stopped_eventwaitr/   should_keep_runningr0   OSErrorqueue_eventr   r#   r$   stopr   r,   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+ZZ++- Z#224 +4>><HF)DN #00  !1(!;< 1"11  !28!<= 2"00  !1(!;< 1'-'9'9#)  )!DE (: #//  !:; 0"00  !1(!;< 1"//  !:; 0'-'8'8#)  x!CD (9C Z    !AB		 Z Zs1   H1GE=H1AH.#H1-H..H11H:)r1   r   r#   r   r   floatr   z"list[type[FileSystemEvent]] | Noner   Callable[[str], os.stat_result]r   -Callable[[str | None], Iterator[os.DirEntry]]returnNone)rM   rN   r   rJ   rM   rN   )__name__
__module____qualname____doc__r   osr   scandirr+   r5   rI   __classcell__r2   s   @r'   r   r   .   sr     1;?02AC

 

 
 9
 .
 ?
 

(/(Er)   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   c               0    t         |   t        |       y )NrZ   )r*   r+   r   )r&   r   r2   s     r'   r+   zPollingObserver.__init__z   s    9r)   rO   )rP   rQ   rR   rS   r   r+   rV   rW   s   @r'   rY   rY   u   s     ,D : :r)   rY   c                  8     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_intervalc               L    t        t        ||      }t        |   ||       y)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   rZ   N)r   r   r*   r+   )r&   r   r   r_   emitter_clsr2   s        r'   r+   zPollingObserverVFS.__init__   s&     n4I.>?r)   )r   rK   r   rL   r_   intrM   rN   )rP   rQ   rR   rS   r+   rV   rW   s   @r'   r]   r]   ~   sA    T !"@-@ ?@
 @ 
@ @r)   r]   )$rS   
__future__r   rT   r-   	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   rY   r]    r)   r'   <module>rk      ss   " # 	    	 	 	 q p g g(/@DE\ DEN:l :@ @r)   