o
    h$                     @  s  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 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-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4 erdd	l
m5Z5 dd
l0m6Z6m7Z7 e8e9Z:dZ;ej<e;e=dd e:>e; G dd de	Z?G dd dZ@G dd de4ZAG dd de3ZBdS )u   :module: watchdog.observers.fsevents2
:synopsis: FSEvents based emitter implementation.
:author: thomas.amland@gmail.com (Thomas Amland)
:author: contact@tiger-222.fr (Mickaël Schoentgen)
:platforms: macOS
    )annotationsN)Thread)TYPE_CHECKING)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EventEmitter)Callable)
EventQueueObservedWatchzSwatchdog.observers.fsevents2 is deprecated and will be removed in a future release.   )category
stacklevelc                   @  sB   e Zd ZdZdddZddd	Zdd
dZdddZdddZdS ) FSEventsQueuezLow level FSEvents client.pathbytes | strreturnNonec              	   C  s~   t |  t | _d | _t|trt	|}t
d|| _d }d}tt| j|| jgt|ttB | _| jd u r=d}t|d S )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)selfr1   contextlatencyerror rI   P/var/www/vscode/kcb/lib/python3.10/site-packages/watchdog/observers/fsevents2.pyr6   K   s*   




	zFSEventsQueue.__init__c                 C  s   t j  }t | _t| j| jt t	| js(t
| j t| j d}t|t  t| j t
| j t| j ~| jd  d S )Nz!FSEvents. Could not start stream.)AppKitNSAutoreleasePoolallocinitr   r:   r   rC   r   r   r	   r
   rD   r   r   r9   put)rE   poolrH   rI   rI   rJ   runc   s   





zFSEventsQueue.runc                 C  s   | j d urt| j  d S d S N)r:   r   rE   rI   rI   rJ   stopu   s   
zFSEventsQueue.stop
stream_refintclient_callback_infor*   
num_eventsevent_pathslist[bytes]event_flags	list[int]	event_idsc           	      C  sF   dd t |||D }td| |D ]}t| q| j| d S )Nc                 S  s   g | ]\}}}t |||qS rI   )NativeEvent).0r1   flags_idrI   rI   rJ   
<listcomp>   s    z+FSEventsQueue._callback.<locals>.<listcomp>z!FSEvents callback. Got %d events:)ziploggerdebugr9   rO   )	rE   rU   rW   rX   rY   r[   r]   eventserI   rI   rJ   rB   y   s
   	zFSEventsQueue._callbacklist[NativeEvent] | Nonec                 C  s   |   r	| j S dS )zfReturns a list or one or more events, or None if there are no more
        events to be read.
        N)is_aliver9   getrS   rI   rI   rJ   read_events   s   zFSEventsQueue.read_eventsN)r1   r2   r3   r4   r3   r4   )rU   rV   rW   r*   rX   rV   rY   rZ   r[   r\   r]   r\   r3   r4   )r3   rh   )	__name__
__module____qualname____doc__r6   rQ   rT   rB   rk   rI   rI   rI   rJ   r0   H   s    



r0   c                   @  s.   e Zd Zddd	ZedddZdddZdS )r^   r1   r<   r`   rV   event_idr3   r4   c                 C  s   || _ || _|| _t|t@ | _t|t@ | _t|t@ | _	t|t
@ | _t|t@ | _t|t@ | _t|t@ | _t|t@ | _t|t@ | _t|t@ | _d S rR   )r1   r`   rq   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)rE   r1   r`   rq   rI   rI   rJ   r6      s   zNativeEvent.__init__strc                 C  s@   | j rdS | jr
dS | jrdS | jrdS | jrdS | jrdS dS )NCreatedRemovedRenamedModifiedInodeMetaModXattrModUnknown)rs   rt   ru   rv   rx   rz   rS   rI   rI   rJ   _event_type   s   zNativeEvent._event_typec                 C  s>   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=>)typerm   r1   r   r|   hexr`   rq   rS   rI   rI   rJ   __repr__   s   zNativeEvent.__repr__N)r1   r<   r`   rV   rq   rV   r3   r4   )r3   r}   )rm   rn   ro   r6   propertyr   r   rI   rI   rI   rJ   r^      s
    
r^   c                      s>   e Zd ZdZeddd fddZdddZdddZ  ZS )FSEventsEmitterzBFSEvents based event emitter. Handles conversion of native events.Ntimeoutevent_filterevent_queuer+   watchr,   r   floatr   "list[type[FileSystemEvent]] | Nonec                  s.   t  j||||d t|j| _| j  d S )Nr   )superr6   r0   r1   	_fseventsstart)rE   r   r   r   r   	__class__rI   rJ   r6      s   zFSEventsEmitter.__init__r3   r4   c                 C  s   | j   d S rR   )r   rT   rS   rI   rI   rJ   on_thread_stop   s   zFSEventsEmitter.on_thread_stopc                 C  s   | j  }|d u rd S d}|t|k r|| }|jr|d t|k rl||d  jrl||d  j|jd krl|jr;tnt}| ||j	||d  j	 | t
tj	|j	 | t
tj	||d  j	 |d7 }ntj	|j	r|jrxtnt}| ||j	 | t
tj	|j	 ns|jrtnt}| ||j	 | t
tj	|j	 nW|js|js|jr|jrt
nt}| ||j	 n>|jr|jrtnt}| ||j	 | t
tj	|j	 n|jr|jrtnt}| ||j	 | t
tj	|j	 |d7 }|t|k sd S d S )Nr   r-   )r   rk   lenru   rq   r|   r    r$   queue_eventr1   r   r=   dirnameexistsr   r!   r   r"   rv   rx   rz   r#   rs   rt   )rE   r   rf   ieventclsrI   rI   rJ   queue_events   sB   
6 
zFSEventsEmitter.queue_events)r   r+   r   r,   r   r   r   r   rl   r   r   r3   r4   )	rm   rn   ro   rp   r&   r6   r   r   __classcell__rI   rI   r   rJ   r      s    
r   c                      s$   e Zd Zedd fddZ  ZS )	FSEventsObserver2r   r   r   r3   r4   c                  s   t  jt|d d S )Nr   )r   r6   r   )rE   r   r   rI   rJ   r6      s   zFSEventsObserver2.__init__r   )rm   rn   ro   r'   r6   r   rI   rI   r   rJ   r      s    r   )Crp   
__future__r   loggingr=   r7   r?   warnings	threadingr   typingr   rK   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)   r*   r+   r,   	getLoggerrm   rd   messagewarnDeprecationWarningwarningr0   r^   r   r   rI   rI   rI   rJ   <module>   s0    h,

G'E