Ë
    äÞËj0  ã                  ó’   — d dl mZ d dlZd dlmZmZmZm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)	é    )ÚannotationsN)ÚTYPE_CHECKINGÚListÚTupleÚUnion)ÚInotifyÚInotifyEvent)Ú
BaseThread)ÚDelayedQueuec                  óF   ‡ — e Zd ZdZdZd	ˆ fd„	Zd„ Zd„ Zd„ Zd„ Z	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      à?c                ó¨   •— t         ‰| �  «        t        t           | j                  «      | _        t        |||«      | _        | j                  «        y ©N)	ÚsuperÚ__init__r   r	   ÚdelayÚ_queuer   Ú_inotifyÚstart)ÚselfÚpathÚ	recursiveÚ
event_maskÚ	__class__s       €ú^/var/www/photos/backend/venv/lib/python3.12/site-packages/watchdog/observers/inotify_buffer.pyr   zInotifyBuffer.__init__"   s<   ø€ Ü‰ÑÔÜ"¤<Ñ0°·±Ó<ˆŒÜ  i°Ó<ˆŒØ�
‰
�ó    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 r   )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.close3   s   € Ø�	‰	ŒØ�	‰	�r   c                ó²  ‡— g }|D ]Î  Št         j                  d‰«       ˆfd„}‰j                  r”t        |«      D ].  \  }} ||«      sŒt        rt        |t        «      rJ ‚|‰f||<    Œe | 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_event=   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)
ÚloggerÚdebugÚis_moved_toÚ	enumerater   r)   r*   r   ÚremoveÚappend)r   Ú
event_listÚgroupedr/   Úindexr-   Ú
from_eventr.   s          @r   Ú_group_eventszInotifyBuffer._group_events7   sÔ   ø€ àPRˆØ'ò 	.ˆMÜ�L‰L˜¨Ô6ôuð ×(Ò(ä$-¨gÓ$6ò 6‘L�E˜5Ù*¨5Õ1Ý(ä'1°%¼Ô'?Ð?Ð#?Ø*/°Ð)?˜ ™Ùð6ð "&§¡×!3Ñ!3Ð4GÓ!H�JØ!Ð-ØŸ™¨
°MÐ'BÕCäŸ™Ð%NÔOØŸ™ }Õ5à—‘˜}Õ-ð1	.ð2 ˆr   c                óD  — 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.
        FTN)Ú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.runU   sö   € ð
 ˆØ×&Ñ&Õ(²Ø!Ÿ]™]×6Ñ6Ó8ˆNØ!×/Ñ/°Ó?ˆNØ!/ò (�Ü! -´Ô7¸M×<TÒ<TØ$×-Ñ-°·±×1CÑ1CÒCð (,˜Øô ' }´eÓ<Ð<Ò\À×A\ÑA\�Ø—‘—‘ ¨uÔ5ô # =´%Õ8Ø%×4Ó4Ø%×.Ñ.°$·-±-×2DÑ2DÓDð $(‘Lð%(ð ×&Ñ&Ô(´Ð(°Ð(r   )FN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r    r#   r"   r:   rE   Ú__classcell__)r   s   @r   r   r      s-   ø„ ñð €Eõò!òòòö<(r   r   )Ú
__future__r   ÚloggingÚtypingr   r   r   r   Úwatchdog.observers.inotify_cr   r	   Úwatchdog.utilsr
   Úwatchdog.utils.delayed_queuer   Ú	getLoggerrF   r0   r   © r   r   ú<module>rS      s<   ðõ #ã ß 4Ó 4ç >Ý %Ý 5à	ˆ×	Ñ	˜8Ó	$€ôU(�Jõ U(r   