o
    c^                     @   sj  	 d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dlZd dl	m
Z
mZmZmZ d dlm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 dZdZe rZeZ nej!ej"B Z ej#Z$ej%ej&B ej'B Z(ej)ej*B ej+B ej,B ej-B ej.B ej/B Z0d	d
 Z1dd Z2dd Z3dd Z4dd Z5G dd dZ6G dd dZ7G dd deZ8G dd de
Z9dS )    )platformN)S_ISDIR)BaseObserverEventEmitterDEFAULT_OBSERVER_TIMEOUTDEFAULT_EMITTER_TIMEOUT)DirectorySnapshot)DirMovedEventDirDeletedEventDirCreatedEventDirModifiedEventFileMovedEventFileDeletedEventFileCreatedEventFileModifiedEventEVENT_TYPE_MOVEDEVENT_TYPE_DELETEDEVENT_TYPE_CREATEDgenerate_sub_moved_eventsi   i   c                 C   s   t jt j| S N)ospathabspathnormpath)r    r   ]G:\Development\the-witcher-3-mod-manager\.venv\lib\site-packages\watchdog\observers\kqueue.pyabsolute_path      r   c                 C      	 | j tj@ S r   )fflagsselectKQ_NOTE_DELETEkevr   r   r   
is_deleted      r$   c                 C   s   	 | j }|tj@ p|tj@ S r   )r   r    KQ_NOTE_EXTENDKQ_NOTE_WRITE)r#   r   r   r   r   is_modified   s   r(   c                 C   r   r   )r   r    KQ_NOTE_ATTRIBr"   r   r   r   is_attrib_modified   r%   r*   c                 C   r   r   )r   r    KQ_NOTE_RENAMEr"   r   r   r   
is_renamed   r%   r,   c                   @   s~   e Zd Z	 dd Zedd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )KeventDescriptorSetc                 C   s.   t  | _t | _t | _t | _t | _	d S r   )
set_descriptorsdict_descriptor_for_path_descriptor_for_fdlist_kevents	threadingLock_lockselfr   r   r   __init__   s
   zKeventDescriptorSet.__init__c                 C   s2   	 | j  | jW  d    S 1 sw   Y  d S r   )r7   r4   r8   r   r   r   kevents   s   $zKeventDescriptorSet.keventsc                 C   s:   	 | j  t| j W  d    S 1 sw   Y  d S r   )r7   r3   r1   keysr8   r   r   r   paths   s   $zKeventDescriptorSet.pathsc                 C   s6   	 | j  | j| W  d    S 1 sw   Y  d S r   )r7   r2   )r9   fdr   r   r   
get_for_fd   s   $zKeventDescriptorSet.get_for_fdc                 C   >   	 | j  t|}| |W  d    S 1 sw   Y  d S r   )r7   r   _getr9   r   r   r   r   get   s
   $zKeventDescriptorSet.getc                 C   r@   r   )r7   r   	_has_pathrB   r   r   r   __contains__   s
   $z KeventDescriptorSet.__contains__c                 C   s`   	 | j " t|}| |s| t|| W d    d S W d    d S 1 s)w   Y  d S r   )r7   r   rD   _add_descriptorKeventDescriptorr9   r   is_directoryr   r   r   add   s   
"zKeventDescriptorSet.addc                 C   s`   	 | j " t|}| |r| | | W d    d S W d    d S 1 s)w   Y  d S r   )r7   r   rD   _remove_descriptorrA   rB   r   r   r   remove   s   
"zKeventDescriptorSet.removec                 C   sf   	 | j % | jD ]}|  q| j  | j  | j  g | _W d    d S 1 s,w   Y  d S r   )r7   r/   closeclearr2   r1   r4   r9   
descriptorr   r   r   rN     s   




"zKeventDescriptorSet.clearc                 C   s   	 | j | S r   r1   rB   r   r   r   rA     s   
zKeventDescriptorSet._getc                 C   s   	 || j v S r   rQ   rB   r   r   r   rD     s   
zKeventDescriptorSet._has_pathc                 C   s8   	 | j | | j|j || j|j< || j|j< d S r   )	r/   rJ   r4   appendkeventr1   r   r2   r>   rO   r   r   r   rF     s
   z#KeventDescriptorSet._add_descriptorc                 C   s<   	 | j | | j|j= | j|j= | j|j |  d S r   )	r/   rL   r2   r>   r1   r   r4   rS   rM   rO   r   r   r   rK   '  s   

z&KeventDescriptorSet._remove_descriptorN)__name__
__module____qualname__r:   propertyr;   r=   r?   rC   rE   rJ   rL   rN   rA   rD   rF   rK   r   r   r   r   r-      s"    

r-   c                   @   sz   e Zd Z	 dd Zedd Zedd Zedd Zed	d
 Zdd Z	edd Z
dd Zdd Zdd Zdd ZdS )rG   c                 C   s8   t || _|| _t|t| _tj| jt	t
td| _d S )N)filterflagsr   )r   _path_is_directoryr   openWATCHDOG_OS_OPEN_FLAGS_fdr    rS   WATCHDOG_KQ_FILTERWATCHDOG_KQ_EV_FLAGSWATCHDOG_KQ_FFLAGS_kevrH   r   r   r   r:   G  s   
zKeventDescriptor.__init__c                 C      	 | j S r   )r^   r8   r   r   r   r>   P     zKeventDescriptor.fdc                 C   rc   r   )rZ   r8   r   r   r   r   U  rd   zKeventDescriptor.pathc                 C   rc   r   )rb   r8   r   r   r   rS   Z  rd   zKeventDescriptor.keventc                 C   rc   r   )r[   r8   r   r   r   rI   _  s   zKeventDescriptor.is_directoryc                 C   s*   	 z	t | j W d S  ty   Y d S w r   )r   rM   r>   OSErrorr8   r   r   r   rM   h  s   zKeventDescriptor.closec                 C   s   | j | jfS r   )r   rI   r8   r   r   r   keyq  s   zKeventDescriptor.keyc                 C   s   | j |j kS r   rf   rO   r   r   r   __eq__u     zKeventDescriptor.__eq__c                 C   s   | j |j kS r   rg   rO   r   r   r   __ne__x  ri   zKeventDescriptor.__ne__c                 C   s
   t | jS r   )hashrf   r8   r   r   r   __hash__{  s   
zKeventDescriptor.__hash__c                 C   s   dt | j| j| jf S )Nz<%s: path=%s, is_directory=%s>)typerT   r   rI   r8   r   r   r   __repr__~  s   zKeventDescriptor.__repr__N)rT   rU   rV   r:   rW   r>   r   rS   rI   rM   rf   rh   rj   rl   rn   r   r   r   r   rG   5  s$    	



	
rG   c                       sp   e Zd Z	 eejf fdd	Zdd Zdd Zdd Z	d	d
 Z
dd Zdd ZdddZdd Zdd Z  ZS )KqueueEmitterc                    sT   t  ||| t | _t | _t | _	| f fdd	}t
|j|j|d| _d S )Nc                    s    | }| | t|j |S r   )_register_keventr   st_mode)r   r9   	stat_infostatr   r   custom_stat  s   z+KqueueEmitter.__init__.<locals>.custom_stat)	recursivert   )superr:   r    kqueue_kqr5   RLockr7   r-   r/   r   r   is_recursive	_snapshot)r9   event_queuewatchtimeoutrt   ru   	__class__rs   r   r:     s   

zKqueueEmitter.__init__c              
   C   sj   	 z
| j || W d S  ty4 } z|jtjkrn|jtjkr!n W Y d }~d S W Y d }~d S d }~ww r   )r/   rJ   re   errnoENOENT
EOPNOTSUPP)r9   r   rI   er   r   r   rp     s   
zKqueueEmitter._register_keventc                 C   s   	 | j | d S r   )r/   rL   rB   r   r   r   _unregister_kevent  s   z KqueueEmitter._unregister_keventc                 C   st   	 t | | |jtkr| |j|j d S |jtkr+| |j | |j	|j d S |jt
kr8| |j d S d S r   )r   queue_event
event_typer   rp   src_pathrI   r   r   	dest_pathr   )r9   eventr   r   r   r     s   


zKqueueEmitter.queue_eventc                 c   s    	 | j |j}|j}t|r!| ||j||D ]}|V  qd S t|r6|jr/t|V  d S t	|V  d S t
|rW|jrP| jjsG| jj|krNt|V  d S d S t	|V  d S t|rl|jret|V  d S t|V  d S d S r   )r/   r?   identr   r,   _gen_renamed_eventsrI   r*   r   r   r(   r~   r{   r$   r
   r   )r9   r#   ref_snapshotnew_snapshotrP   r   r   r   r   r   _gen_kqueue_events  s6   
z KqueueEmitter._gen_kqueue_eventsc                 C   s   	 t tj|S r   )r   r   r   dirname)r9   r   r   r   r   _parent_dir_modified=  s   z"KqueueEmitter._parent_dir_modifiedc           	      c   s   	 z| |}W n# ty,   |rt|V  t|V  Y d S t|V  t|V  Y d S w ||}|d urnt|}|rEt||}|V  nt	||V  | 
|V  | 
|V  |rh| jjrjt||D ]	}|V  qbd S d S d S |rvt|V  nt|V  | 
|V  d S r   )inodeKeyErrorr   r
   r   r   r   r   r	   r   r   r~   r{   r   )	r9   r   rI   r   r   Zf_inoder   r   	sub_eventr   r   r   r   C  sB   






z!KqueueEmitter._gen_renamed_eventsNc                 C   s   	 | j | jjt|S r   )ry   controlr/   r;   
MAX_EVENTSr9   r   r   r   r   _read_events{  s
   	zKqueueEmitter._read_eventsc                 C   s$  	 | j  zY| |}|  t| jj| jj}| j}|| _|| }|jD ]	}| 	t
| q%|jD ]	}| 	t| q2|jD ]	}| 	t| q?|D ]}	| |	||D ]}
| 	|
 qTqKW n tyw } z|jtjkrm W Y d }~nd }~ww W d    d S W d    d S 1 sw   Y  d S r   )r7   r   reverser   r~   r   r{   r|   dirs_createdr   r   files_createdr   files_modifiedr   r   re   r   EBADF)r9   r   
event_listr   r   Zdiff_eventsZdirectory_createdZfile_createdZfile_modifiedr#   r   r   r   r   r   queue_events  sF   	



"zKqueueEmitter.queue_eventsc                 C   s@   | j  | j  | j  W d    d S 1 sw   Y  d S r   )r7   r/   rN   ry   rM   r8   r   r   r   on_thread_stop  s   
"zKqueueEmitter.on_thread_stopr   )rT   rU   rV   r   r   rt   r:   rp   r   r   r   r   r   r   r   r   __classcell__r   r   r   r   ro     s    ,+
/
8*ro   c                       s"   e Zd Z	 ef fdd	Z  ZS )KqueueObserverc                    s   t  jt|d d S )N)emitter_classr   )rw   r:   ro   r   r   r   r   r:     r   zKqueueObserver.__init__)rT   rU   rV   r   r:   r   r   r   r   r   r     s    r   ):watchdog.utilsr   r5   r   rt   r   r   os.pathr    watchdog.observers.apir   r   r   r   watchdog.utils.dirsnapshotr   watchdog.eventsr	   r
   r   r   r   r   r   r   r   r   r   r   r   	O_EVTONLY	is_darwinr]   O_RDONLYZ
O_NONBLOCKZKQ_FILTER_VNODEr_   	KQ_EV_ADDZKQ_EV_ENABLEZKQ_EV_CLEARr`   r!   r'   r&   r)   ZKQ_NOTE_LINKr+   ZKQ_NOTE_REVOKEra   r   r$   r(   r*   r,   r-   rG   ro   r   r   r   r   r   <module>   sX   48 N  9