Ë
    êmxiR  ã                  ó~   — 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y)	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_maskc               ó¢   •— t         ‰| �  «        t        d   | j                  «      | _        t        |||¬«      | _        | j                  «        y )Nú0InotifyEvent | tuple[InotifyEvent, InotifyEvent]r
   )ÚsuperÚ__init__r   ÚdelayÚ_queuer   Ú_inotifyÚstart)ÚselfÚpathr   r   Ú	__class__s       €úX/home/htdocs/ttos/venv/lib/python3.12/site-packages/watchdog/observers/inotify_buffer.pyr   zInotifyBuffer.__init__   s@   ø€ Ü‰ÑÔä"Ð#UÑVÐW[×WaÑWaÓbˆŒÜ °	ÀjÔQˆŒØ�
‰
�ó    c                ó6   — | j                   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                ól   — | j                   j                  «        | j                  j                  «        y ©N)r   Úcloser   r   s    r   Úon_thread_stopzInotifyBuffer.on_thread_stop(   s"   € Ø�‰×ÑÔØ�‰×ÑÕr   c                óD   — | j                  «        | j                  «        y r   )ÚstopÚjoinr   s    r   r    zInotifyBuffer.close,   s   € Ø�	‰	ŒØ�	‰	�r   c                ó„  ‡— g }|D ]·  Št         j                  d‰«       dˆfd„}‰j                  r|t        |«      D ]  \  }} ||«      sŒ|‰f||<    ŒN | j                  j                  |«      }|�|j                  |‰f«       Œ€t         j                  d«       |j                  ‰«       Œ§|j                  ‰«       Œ¹ |S )zGroup any matching move eventszin-event %sc                óx   •— t        | t        «       xr' | j                  xr | j                  ‰j                  k(  S r   )Ú
isinstanceÚtupleÚis_moved_fromÚcookie)ÚeventÚinotify_events    €r   Úmatching_from_eventz8InotifyBuffer._group_events.<locals>.matching_from_event6   s6   ø€ Ü% e¬UÓ3Ð3Òt¸×8KÑ8KÒtÐPU×P\ÑP\Ð`m×`tÑ`tÑPtÐtr   z'could not find matching move_from event)r+   r   ÚreturnÚbool)ÚloggerÚdebugÚis_moved_toÚ	enumerater   ÚremoveÚappend)r   Ú
event_listÚgroupedr-   Úindexr+   Ú
from_eventr,   s          @r   Ú_group_eventszInotifyBuffer._group_events0   sÁ   ø€ àJLˆØ'ò 	.ˆMÜ�L‰L˜¨Ô6õuð ×(Ò(ä$-¨gÓ$6ò 6‘L�E˜5Ù*¨5Õ1Ø*/°Ð)?˜ ™Ùð6ð "&§¡×!3Ñ!3Ð4GÓ!H�JØ!Ð-ØŸ™¨
°MÐ'BÕCäŸ™Ð%NÔOØŸ™ }Õ5à—‘˜}Õ-ð+	.ð, ˆr   c                óF  — d}| j                  «       �r|�s
| j                  j                  «       }| j                  |«      }|D ]Ä  }t	        |t
        «      s2|j                  r&|j                  | j                  j                  k(  rd}ŒEt	        |t
        «       xr |j                  }| j                  j                  ||¬«       t	        |t
        «      rŒ’|j                  sŒŸ|j                  | j                  j                  k(  sŒÃd}ŒÆ | j                  «       r|s�Œyyyy)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:   r'   r(   Ú
is_ignoredÚsrc_pathr   r)   r   ÚputÚis_delete_self)r   Údeleted_selfÚinotify_eventsÚgrouped_eventsr,   r   s         r   ÚrunzInotifyBuffer.runK   sø   € ð
 ˆØ×&Ñ&Õ(²Ø!Ÿ]™]×6Ñ6Ó8ˆNØ!×/Ñ/°Ó?ˆNØ!/ò (�Ü! -´Ô7¸M×<TÒ<TØ$×-Ñ-°·±×1CÑ1CÒCð (,˜Øô ' }´eÓ<Ð<Ò\À×A\ÑA\�Ø—‘—‘ °U�Ô;ô # =´%Õ8Ø%×4Ó4Ø%×.Ñ.°$·-±-×2DÑ2DÓDð $(‘Lð%(ð ×&Ñ&Ô(´Ð(°Ð(r   )r   Úbytesr   r/   r   z
int | Noner.   ÚNone)r.   z7InotifyEvent | tuple[InotifyEvent, InotifyEvent] | None)r.   rG   )r6   zlist[InotifyEvent]r.   z6list[InotifyEvent | tuple[InotifyEvent, InotifyEvent]])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r!   r    r:   rE   Ú__classcell__)r   s   @r   r	   r	      s3   ø„ ñð €Eà9>ÐY]÷ ó!óóó÷6(r   r	   )rK   Ú
__future__r   ÚloggingÚwatchdog.observers.inotify_cr   r   Úwatchdog.utilsr   Úwatchdog.utils.delayed_queuer   Ú	getLoggerrH   r0   r	   © r   r   ú<module>rT      s;   ðñõ #ã ç >Ý %Ý 5à	ˆ×	Ñ	˜8Ó	$€ôS(�Jõ S(r   