
    "dz%                       d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZmZ ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ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,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6  ejn                  e8      Z9d	Z: ejv                  e:e<       e9j{                  e:        G d
 de	      Z> G d d      Z? G d de6      Z@ G d de5      ZAy)zk
:module: watchdog.observers.fsevents2
:synopsis: FSEvents based emitter implementation.
:platforms: macOS
    )annotationsN)Thread)ListOptionalType)CFRunLoopGetCurrentCFRunLoopRunCFRunLoopStopFSEventStreamCreateFSEventStreamInvalidateFSEventStreamRelease FSEventStreamScheduleWithRunLoopFSEventStreamStartFSEventStreamStopkCFAllocatorDefaultkCFRunLoopDefaultMode"kFSEventStreamCreateFlagFileEventskFSEventStreamCreateFlagNoDefer&kFSEventStreamEventFlagItemChangeOwner"kFSEventStreamEventFlagItemCreated(kFSEventStreamEventFlagItemFinderInfoMod'kFSEventStreamEventFlagItemInodeMetaMod kFSEventStreamEventFlagItemIsDir$kFSEventStreamEventFlagItemIsSymlink#kFSEventStreamEventFlagItemModified"kFSEventStreamEventFlagItemRemoved"kFSEventStreamEventFlagItemRenamed#kFSEventStreamEventFlagItemXattrModkFSEventStreamEventIdSinceNow)	DirCreatedEventDirDeletedEventDirModifiedEventDirMovedEventFileCreatedEventFileDeletedEventFileModifiedEventFileMovedEventFileSystemEvent)DEFAULT_EMITTER_TIMEOUTDEFAULT_OBSERVER_TIMEOUTBaseObserverEventEmitterzSwatchdog.observers.fsevents2 is deprecated and will be removed in a future release.c                  .    e Zd ZdZd Zd Zd Zd Zd Zy)FSEventsQueuezLow level FSEvents client.c           
        t        j                  |        t        j                         | _        d | _        t        |t              rt        j                  |      }t        j                  d|      | _        d }d}t        t        | j                  || j                  gt         |t"        t$        z        | _        | j&                  t)        d      y )NNFCg      ?z"FSEvents. Could not create stream.)r   __init__queueQueue_queue	_run_loop
isinstancebytesosfsdecodeunicodedata	normalize_pathr   r   	_callbackr   r   r   _stream_refOSError)selfpathcontextlatencys       >/usr/lib/python3/dist-packages/watchdog/observers/fsevents2.pyr1   zFSEventsQueue.__init__S   s    @EdE";;t$D **5$7
.NNZZL)+.PP
 #>?? $    c                "   t         j                  j                         j                         }t	               | _        t        | j                  | j
                  t               t        | j                        s5t        | j                         t        | j                         t        d      t                t        | j                         t        | j                         t        | j                         ~| j                  j!                  d        y )Nz!FSEvents. Could not start stream.)AppKitNSAutoreleasePoolallocinitr   r5   r   r>   r   r   r   r   r?   r	   r   r4   put)r@   pools     rD   runzFSEventsQueue.runj   s    ''--/446,.(dnn.C	
 "$"2"23#D$4$45 !1!12=>>$**+ 0 01T--.rE   c                H    | j                   t        | j                          y y N)r5   r
   r@   s    rD   stopzFSEventsQueue.stop}   s    >>%$..) &rE   c           
        t        |||      D 	cg c]  \  }}}	t        |||	       }
}}}	t        j                  d| d       |
D ]  }t        j                  |        | j                  j                  |
       y c c}	}}w )NzFSEvents callback. Got z events:)zipNativeEventloggerdebugr4   rK   )r@   	streamRefclientCallBackInfo	numEvents
eventPaths
eventFlagseventIDsrA   flags_ideventses               rD   r=   zFSEventsQueue._callback   s    
 %(
J$I
 
 eS eS)
 
 	.ykBC 	ALLO	
s   A?c                X    | j                         sy| j                  j                         S )zo
        Returns a list or one or more events, or None if there are no more
        events to be read.
        N)is_aliver4   getrP   s    rD   read_eventszFSEventsQueue.read_events   s!    
 }}{{  rE   N)	__name__
__module____qualname____doc__r1   rM   rQ   r=   rd    rE   rD   r.   r.   P   s    $@.&*
 !rE   r.   c                  (    e Zd Zd Zed        Zd Zy)rT   c                   || _         || _        || _        t        |t        z        | _        t        |t        z        | _        t        |t        z        | _	        t        |t        z        | _        t        |t        z        | _        t        |t        z        | _        t        |t         z        | _        t        |t$        z        | _        t        |t(        z        | _        t        |t,        z        | _        y rO   )rA   r]   event_idboolr   
is_createdr   
is_removedr   
is_renamedr   is_modifiedr   is_change_ownerr   is_inode_meta_modr   is_finder_info_modr   is_xattr_modr   
is_symlinkr   is_directory)r@   rA   r]   rl   s       rD   r1   zNativeEvent.__init__   s    	
 u'IIJu'IIJu'IIJ(K KL#E,R$RS!%e.U&U!V"&u/W'W"X )L!LMu'KKL )I!IJrE   c                    | j                   ry| j                  ry| j                  ry| j                  ry| j                  ry| j
                  ryy)NCreatedRemovedRenamedModifiedInodeMetaModXattrModUnknown)rn   ro   rp   rq   rs   ru   rP   s    rD   _event_typezNativeEvent._event_type   sG    ??????!!!rE   c                    dt        |       j                   d| j                  d| j                   d| j                   dt        | j                         d| j                   dS )N<z: path=z, type=z	, is_dir=z, flags=z, id=>)typere   rA   r   rw   hexr]   rl   rP   s    rD   __repr__zNativeEvent.__repr__   sd    T
##$GDII=@P@P?Q R(()#djj/1B%VWY	
rE   N)re   rf   rg   r1   propertyr   r   ri   rE   rD   rT   rT      s!    K  
rE   rT   c                  2     e Zd ZdZef fd	Zd Zd Z xZS )FSEventsEmitterzL
    FSEvents based event emitter. Handles conversion of native events.
    c                    t         |   |||       t        |j                        | _        | j                  j                          y rO   )superr1   r.   rA   	_fseventsstart)r@   event_queuewatchtimeout	__class__s       rD   r1   zFSEventsEmitter.__init__   s4    eW5&uzz2rE   c                8    | j                   j                          y rO   )r   rQ   rP   s    rD   on_thread_stopzFSEventsEmitter.on_thread_stop   s    rE   c           	        | j                   j                         }|y d}|t        |      k  r||   }|j                  r@|dz   t        |      k  r||dz      j                  r||dz      j                  |j                  dz   k(  r|j
                  rt        nt        }| j                   ||j                  ||dz      j                               | j                  t        t        j                  j                  |j                                     | j                  t        t        j                  j                  ||dz      j                                     |dz  }nt        j                  j                  |j                        r||j
                  rt        nt        }| j                   ||j                               | j                  t        t        j                  j                  |j                                     n|j
                  rt         nt"        }| j                   ||j                               | j                  t        t        j                  j                  |j                                     nl|j$                  s|j&                  s|j(                  r;|j
                  rt        nt*        }| j                   ||j                               n|j,                  r{|j
                  rt        nt        }| j                   ||j                               | j                  t        t        j                  j                  |j                                     n|j.                  rz|j
                  rt         nt"        }| j                   ||j                               | j                  t        t        j                  j                  |j                                     |dz  }|t        |      k  ry y )Nr      )r   rd   lenrp   rl   rw   r#   r'   queue_eventrA   r"   r8   dirnameexistsr    r$   r!   r%   rq   rs   ru   r&   rn   ro   )r@   r   r_   ieventclss         rD   queue_eventszFSEventsEmitter.queue_events   s   ++->#f+o1IE  ECK'q1u00q1u..%..12DD+0+=+=->C$$SVAE]5G5G%HI$$%5bggooejj6Q%RS$$(A9K9K)LM FAWW^^EJJ/-2-?-?/EUC$$S_5$$%5bggooejj6Q%RS-2-?-?/EUC$$S_5$$%5bggooejj6Q%RS ""e&=&=ASAS*/*<*<&BS  UZZ1!!).););oAQ  UZZ1  !1"''//%**2M!NO!!).););oAQ  UZZ1  !1"''//%**2M!NOFAc #f+orE   )	re   rf   rg   rh   r)   r1   r   r   __classcell__r   s   @rD   r   r      s     4K 
6rE   r   c                  "     e Zd Zef fd	Z xZS )FSEventsObserver2c                0    t         |   t        |       y )N)emitter_classr   )r   r1   r   )r@   r   r   s     rD   r1   zFSEventsObserver2.__init__  s    HrE   )re   rf   rg   r*   r1   r   r   s   @rD   r   r     s    7 I IrE   r   )Brh   
__future__r   loggingr8   r2   r:   warnings	threadingr   typingr   r   r   rG   FSEventsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   watchdog.eventsr    r!   r"   r#   r$   r%   r&   r'   r(   watchdog.observers.apir)   r*   r+   r,   	getLoggerre   rU   messagewarnDeprecationWarningwarningr.   rT   r   r   ri   rE   rD   <module>r      s    #  	     ' '       6
 
 
 q p			8	$
_ g) * w D!F D!N$
 $
NCl CLI IrE   