§
    xÅjR  ã                  ó‚   — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
  ej        e¦  «        Z G d„ de¦  «        ZdS )	uÈ   :module: watchdog.observers.inotify_buffer
:synopsis: A wrapper for ``Inotify``.
:author: thomas.amland@gmail.com (Thomas Amland)
:author: contact@tiger-222.fr (MickaÃ«l Schoentgen)
:platforms: linux
é    )ÚannotationsN)ÚInotifyÚInotifyEvent)Ú
BaseThread)ÚDelayedQueuec                  óX   ‡ — e Zd ZdZdZdddœdˆ fd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
ˆ xZS )ÚInotifyBufferzŠA wrapper for `Inotify` that holds events for `delay` seconds. During
    this time, IN_MOVED_FROM and IN_MOVED_TO events are paired.
    g      à?FN©Ú	recursiveÚ
event_maskÚpathÚbytesr   Úboolr   ú
int | NoneÚreturnÚNonec               óÜ   •— t          ¦   «                              ¦   «          t          d         | j        ¦  «        | _        t          |||¬¦  «        | _        |                      ¦   «          d S )Nú0InotifyEvent | tuple[InotifyEvent, InotifyEvent]r
   )ÚsuperÚ__init__r   ÚdelayÚ_queuer   Ú_inotifyÚstart)Úselfr   r   r   Ú	__class__s       €úRC:\Projects\Historical\venv\Lib\site-packages\watchdog/observers/inotify_buffer.pyr   zInotifyBuffer.__init__   sY   ø€ Ý‰Œ×ÒÑÔÐå"Ð#UÔVÐW[ÔWaÑbÔbˆŒÝ °	ÀjÐQÑQÔQˆŒØ�
Š
‰Œˆˆˆó    ú7InotifyEvent | tuple[InotifyEvent, InotifyEvent] | Nonec                ó4   — | j                              ¦   «         S )z¥Returns a single event or a tuple of from/to events in case of a
        paired move event. If this buffer has been closed, immediately return
        None.
        )r   Úget©r   s    r   Ú
read_eventzInotifyBuffer.read_event!   s   € ð
 Œ{�ŠÑ Ô Ð r   c                ój   — | j                              ¦   «          | j                             ¦   «          d S ©N)r   Úcloser   r"   s    r   Úon_thread_stopzInotifyBuffer.on_thread_stop(   s0   € ØŒ×ÒÑÔÐØŒ×ÒÑÔÐÐÐr   c                óV   — |                       ¦   «          |                      ¦   «          d S r%   )ÚstopÚjoinr"   s    r   r&   zInotifyBuffer.close,   s    € Ø�	Š	‰ŒˆØ�	Š	‰Œˆˆˆr   Ú
event_listúlist[InotifyEvent]ú6list[InotifyEvent | tuple[InotifyEvent, InotifyEvent]]c                óª  ‡— g }|D ]ÌŠt                                d‰¦  «         d	ˆfd„}‰j        r�t          |¦  «        D ]\  }} ||¦  «        r	|‰f||<    ndŒ| j                             |¦  «        }|�|                     |‰f¦  «         Œ‡t                                d¦  «         |                     ‰¦  «         Œ·|                     ‰¦  «         ŒÍ|S )
zGroup any matching move eventszin-event %sÚeventr   r   r   c                ó^   •— t          | t          ¦  «         o| j        o| j        ‰j        k    S r%   )Ú
isinstanceÚtupleÚis_moved_fromÚcookie)r/   Úinotify_events    €r   Úmatching_from_eventz8InotifyBuffer._group_events.<locals>.matching_from_event6   s0   ø€ Ý% e­UÑ3Ô3Ð3Ðt¸Ô8KÐtÐPUÔP\Ð`mÔ`tÒPtÐtr   Nz'could not find matching move_from event)r/   r   r   r   )ÚloggerÚdebugÚis_moved_toÚ	enumerater   ÚremoveÚappend)r   r+   Úgroupedr6   Úindexr/   Ú
from_eventr5   s          @r   Ú_group_eventszInotifyBuffer._group_events0   s  ø€ àJLˆØ'ð 	.ð 	.ˆMÝ�LŠL˜¨Ñ6Ô6Ð6ðuð uð uð uð uð uð Ô(ð .å$-¨gÑ$6Ô$6ð 6ð 6‘L�E˜5Ø*Ð*¨5Ñ1Ô1ð Ø*/°Ð)?˜ ™Ø˜ðð
 "&¤×!3Ò!3Ð4GÑ!HÔ!H�JØ!Ð-ØŸš¨
°MÐ'BÑCÔCÐCÐCåŸšÐ%NÑOÔOÐOØŸš }Ñ5Ô5Ð5øà—’˜}Ñ-Ô-Ð-Ð-Øˆr   c                ó  — d}|                       ¦   «         rí|sí| j                             ¦   «         }|                      |¦  «        }|D ]¢}t	          |t
          ¦  «        s|j        r|j        | j        j        k    rd}Œ6t	          |t
          ¦  «         o|j	        }| j
                             ||¬¦  «         t	          |t
          ¦  «        s|j        r|j        | j        j        k    rd}Œ£|                       ¦   «         r|¯édS dS dS dS )zÍRead event from `inotify` and add them to `queue`. When reading a
        IN_MOVE_TO event, remove the previous added matching IN_MOVE_FROM event
        and add them back to the queue as a tuple.
        FT)r   N)Úshould_keep_runningr   Úread_eventsr@   r1   r2   Ú
is_ignoredÚsrc_pathr   r3   r   ÚputÚis_delete_self)r   Údeleted_selfÚinotify_eventsÚgrouped_eventsr5   r   s         r   ÚrunzInotifyBuffer.runK   sG  € ð
 ˆØ×&Ò&Ñ(Ô(ð 	(°ð 	(Ø!œ]×6Ò6Ñ8Ô8ˆNØ!×/Ò/°Ñ?Ô?ˆNØ!/ð (ð (�Ý! -µÑ7Ô7ð ¸MÔ<Tð Ø$Ô-°´Ô1CÒCÐCð (,˜Øõ ' }µeÑ<Ô<Ð<Ð\ÀÔA\�Ø”—’ °U�Ñ;Ô;Ð;õ # =µ%Ñ8Ô8ð(à%Ô4ð(ð &Ô.°$´-Ô2DÒDÐDð $(�Løð+ ×&Ò&Ñ(Ô(ð 	(°ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(r   )r   r   r   r   r   r   r   r   )r   r   )r   r   )r+   r,   r   r-   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r'   r&   r@   rK   Ú__classcell__)r   s   @r   r	   r	      sÂ   ø€ € € € € ðð ð €Eà9>ÐY]ð ð ð ð ð ð ð ð ð!ð !ð !ð !ðð ð ð ðð ð ð ðð ð ð ð6(ð (ð (ð (ð (ð (ð (ð (r   r	   )rO   Ú
__future__r   ÚloggingÚwatchdog.observers.inotify_cr   r   Úwatchdog.utilsr   Úwatchdog.utils.delayed_queuer   Ú	getLoggerrL   r7   r	   © r   r   ú<module>rX      s¸   ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€à >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø %Ð %Ð %Ð %Ð %Ð %Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à	ˆÔ	˜8Ñ	$Ô	$€ðS(ð S(ð S(ð S(ð S(�Jñ S(ô S(ð S(ð S(ð S(r   