
    ʆh?                    .   S r SSKJr  SSKrSSKrSSKrSSKJrJ	r	  SSK
Jr  SSKJr  \(       a  SSKJr  SrS	rS
rSrSrSrSr\" SS9 " S S5      5       r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S \5      r " S! S"\5      r " S# S$\5      r  " S% S&\5      r! " S' S(\5      r" " S) S*\5      r# " S+ S,5      r$ " S- S.\$5      r% " S/ S0\$5      r& " S1 S2\$5      r'      S5S3 jr(S6S4 jr)g)7u  :module: watchdog.events
:synopsis: File system events and event handlers.
:author: yesudeep@google.com (Yesudeep Mangalapilly)
:author: contact@tiger-222.fr (Mickaël Schoentgen)

Event Classes
-------------
.. autoclass:: FileSystemEvent
   :members:
   :show-inheritance:
   :inherited-members:

.. autoclass:: FileSystemMovedEvent
   :members:
   :show-inheritance:

.. autoclass:: FileMovedEvent
   :members:
   :show-inheritance:

.. autoclass:: DirMovedEvent
   :members:
   :show-inheritance:

.. autoclass:: FileModifiedEvent
   :members:
   :show-inheritance:

.. autoclass:: DirModifiedEvent
   :members:
   :show-inheritance:

.. autoclass:: FileCreatedEvent
   :members:
   :show-inheritance:

.. autoclass:: FileClosedEvent
   :members:
   :show-inheritance:

.. autoclass:: FileClosedNoWriteEvent
   :members:
   :show-inheritance:

.. autoclass:: FileOpenedEvent
   :members:
   :show-inheritance:

.. autoclass:: DirCreatedEvent
   :members:
   :show-inheritance:

.. autoclass:: FileDeletedEvent
   :members:
   :show-inheritance:

.. autoclass:: DirDeletedEvent
   :members:
   :show-inheritance:


Event Handler Classes
---------------------
.. autoclass:: FileSystemEventHandler
   :members:
   :show-inheritance:

.. autoclass:: PatternMatchingEventHandler
   :members:
   :show-inheritance:

.. autoclass:: RegexMatchingEventHandler
   :members:
   :show-inheritance:

.. autoclass:: LoggingEventHandler
   :members:
   :show-inheritance:

    )annotationsN)	dataclassfield)TYPE_CHECKING)match_any_paths)	Generatormoveddeletedcreatedmodifiedclosedclosed_no_writeopenedT)unsafe_hashc                  z    \ rS rSr% SrS\S'   SrS\S'   \" SSS9rS	\S
'   \" SSS9r	S\S'    \" SS9r
S\S'   Srg)FileSystemEventh   zImmutable type that represents a file system event that is triggered
when a change occurs on the monitored file system.

All FileSystemEvent objects are required to be immutable and hence
can be used as keys in dictionaries or be added to sets.
bytes | strsrc_path 	dest_pathF)defaultinitstr
event_typeboolis_directory)r   is_synthetic N)__name__
__module____qualname____firstlineno____doc____annotations__r   r   r   r   r   __static_attributes__r       G/opt/services/DDDS/venv/lib/python3.13/site-packages/watchdog/events.pyr   r   h   sQ     I{BU3J3u59L$9
 u-L$-r'   r   c                      \ rS rSrSr\rSrg)FileSystemMovedEvent~   z@File system event representing any kind of file system movement.r   N)r    r!   r"   r#   r$   EVENT_TYPE_MOVEDr   r&   r   r'   r(   r*   r*   ~   s
    J!Jr'   r*   c                      \ rS rSrSr\rSrg)FileDeletedEvent   z@File system event representing file deletion on the file system.r   N)r    r!   r"   r#   r$   EVENT_TYPE_DELETEDr   r&   r   r'   r(   r.   r.      
    J#Jr'   r.   c                      \ rS rSrSr\rSrg)FileModifiedEvent   zDFile system event representing file modification on the file system.r   N)r    r!   r"   r#   r$   EVENT_TYPE_MODIFIEDr   r&   r   r'   r(   r3   r3      s
    N$Jr'   r3   c                      \ rS rSrSr\rSrg)FileCreatedEvent   z@File system event representing file creation on the file system.r   N)r    r!   r"   r#   r$   EVENT_TYPE_CREATEDr   r&   r   r'   r(   r7   r7      r1   r'   r7   c                      \ rS rSrSrSrg)FileMovedEvent   z@File system event representing file movement on the file system.r   N)r    r!   r"   r#   r$   r&   r   r'   r(   r;   r;      s    Jr'   r;   c                      \ rS rSrSr\rSrg)FileClosedEvent   =File system event representing file close on the file system.r   N)r    r!   r"   r#   r$   EVENT_TYPE_CLOSEDr   r&   r   r'   r(   r>   r>      
    G"Jr'   r>   c                      \ rS rSrSr\rSrg)FileClosedNoWriteEvent   zKFile system event representing an unmodified file close on the file system.r   N)r    r!   r"   r#   r$   EVENT_TYPE_CLOSED_NO_WRITEr   r&   r   r'   r(   rD   rD      s
    U+Jr'   rD   c                      \ rS rSrSr\rSrg)FileOpenedEvent   r@   r   N)r    r!   r"   r#   r$   EVENT_TYPE_OPENEDr   r&   r   r'   r(   rH   rH      rB   r'   rH   c                       \ rS rSrSr\rSrSrg)DirDeletedEvent   zEFile system event representing directory deletion on the file system.Tr   N)	r    r!   r"   r#   r$   r0   r   r   r&   r   r'   r(   rL   rL          O#JLr'   rL   c                       \ rS rSrSr\rSrSrg)DirModifiedEvent   zIFile system event representing directory modification on the file system.Tr   N)	r    r!   r"   r#   r$   r5   r   r   r&   r   r'   r(   rP   rP      s    S$JLr'   rP   c                       \ rS rSrSr\rSrSrg)DirCreatedEvent   zEFile system event representing directory creation on the file system.Tr   N)	r    r!   r"   r#   r$   r9   r   r   r&   r   r'   r(   rS   rS      rN   r'   rS   c                      \ rS rSrSrSrSrg)DirMovedEvent   zEFile system event representing directory movement on the file system.Tr   N)r    r!   r"   r#   r$   r   r&   r   r'   r(   rV   rV      s
    OLr'   rV   c                  r    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrg)FileSystemEventHandler   zBBase file system event handler that you can override methods from.c                d    U R                  U5        [        U SUR                   35      " U5        g)Dispatches events to the appropriate methods.

:param event:
    The event object representing the file system event.
:type event:
    :class:`FileSystemEvent`
on_N)on_any_eventgetattrr   selfevents     r(   dispatchFileSystemEventHandler.dispatch   s/     	% E,,-./6r'   c                    g)zCatch-all event handler.

:param event:
    The event object representing the file system event.
:type event:
    :class:`FileSystemEvent`
Nr   r`   s     r(   r^   #FileSystemEventHandler.on_any_event       r'   c                    g)zCalled when a file or a directory is moved or renamed.

:param event:
    Event representing file/directory movement.
:type event:
    :class:`DirMovedEvent` or :class:`FileMovedEvent`
Nr   r`   s     r(   on_movedFileSystemEventHandler.on_moved   rg   r'   c                    g)zCalled when a file or directory is created.

:param event:
    Event representing file/directory creation.
:type event:
    :class:`DirCreatedEvent` or :class:`FileCreatedEvent`
Nr   r`   s     r(   
on_created!FileSystemEventHandler.on_created   rg   r'   c                    g)zCalled when a file or directory is deleted.

:param event:
    Event representing file/directory deletion.
:type event:
    :class:`DirDeletedEvent` or :class:`FileDeletedEvent`
Nr   r`   s     r(   
on_deleted!FileSystemEventHandler.on_deleted   rg   r'   c                    g)zCalled when a file or directory is modified.

:param event:
    Event representing file/directory modification.
:type event:
    :class:`DirModifiedEvent` or :class:`FileModifiedEvent`
Nr   r`   s     r(   on_modified"FileSystemEventHandler.on_modified   rg   r'   c                    g)zCalled when a file opened for writing is closed.

:param event:
    Event representing file closing.
:type event:
    :class:`FileClosedEvent`
Nr   r`   s     r(   	on_closed FileSystemEventHandler.on_closed  rg   r'   c                    g)zCalled when a file opened for reading is closed.

:param event:
    Event representing file closing.
:type event:
    :class:`FileClosedNoWriteEvent`
Nr   r`   s     r(   on_closed_no_write)FileSystemEventHandler.on_closed_no_write  rg   r'   c                    g)z|Called when a file is opened.

:param event:
    Event representing file opening.
:type event:
    :class:`FileOpenedEvent`
Nr   r`   s     r(   	on_opened FileSystemEventHandler.on_opened  rg   r'   r   Nrb   r   returnNonerb   zDirMovedEvent | FileMovedEventr~   r   rb   z"DirCreatedEvent | FileCreatedEventr~   r   rb   z"DirDeletedEvent | FileDeletedEventr~   r   rb   z$DirModifiedEvent | FileModifiedEventr~   r   rb   r>   r~   r   rb   rD   r~   r   rb   rH   r~   r   )r    r!   r"   r#   r$   rc   r^   ri   rl   ro   rr   ru   rx   r{   r&   r   r'   r(   rY   rY      s2    L	7r'   rY   c                     ^  \ rS rSrSrSSSSS.       SU 4S jjjr\SS j5       r\SS j5       r\SS	 j5       r	\SS
 j5       r
SU 4S jjrSrU =r$ )PatternMatchingEventHandleri$  zMatches given patterns with file paths associated with occurring events.
Uses pathlib's `PurePath.match()` method. `patterns` and `ignore_patterns`
are expected to be a list of strings.
NF)patternsignore_patternsignore_directoriescase_sensitivec               R   > [         TU ]  5         Xl        X l        X0l        X@l        g N)super__init__	_patterns_ignore_patterns_ignore_directories_case_sensitive)ra   r   r   r   r   	__class__s        r(   r   $PatternMatchingEventHandler.__init__*  s'     	! /#5 -r'   c                    U R                   $ )z4(Read-only)
Patterns to allow matching event paths.
)r   ra   s    r(   r   $PatternMatchingEventHandler.patterns9  s    
 ~~r'   c                    U R                   $ )z5(Read-only)
Patterns to ignore matching event paths.
)r   r   s    r(   r   +PatternMatchingEventHandler.ignore_patterns@  s    
 $$$r'   c                    U R                   $ zL(Read-only)
``True`` if directories should be ignored; ``False`` otherwise.
r   r   s    r(   r   .PatternMatchingEventHandler.ignore_directoriesG      
 '''r'   c                    U R                   $ z](Read-only)
``True`` if path names should be matched sensitive to case; ``False``
otherwise.
r   r   s    r(   r   *PatternMatchingEventHandler.case_sensitiveN       ###r'   c                  > U R                   (       a  UR                  (       a  g/ n[        US5      (       a/  UR                  [        R
                  " UR                  5      5        UR                  (       a/  UR                  [        R
                  " UR                  5      5        [        UU R                  U R                  U R                  S9(       a  [        TU ]5  U5        gg)r\   Nr   )included_patternsexcluded_patternsr   )r   r   hasattrappendosfsdecoder   r   r   r   r   r   r   rc   ra   rb   pathsr   s      r(   rc   $PatternMatchingEventHandler.dispatchV  s     ""u'9'95+&&LLU__56>>LLU^^45"mm"22..	
 GU#
r'   )r   r   r   r   )r   list[str] | Noner   r   r   r   r   r   )r~   r   r~   r   r}   )r    r!   r"   r#   r$   r   propertyr   r   r   r   rc   r&   __classcell__r   s   @r(   r   r   $  s     &*,0#($. #. *	.
 !. . .   % % ( ( $ $$ $r'   r   c                     ^  \ rS rSrSrSSSSS.       SU 4S jjjr\SS j5       r\SS j5       r\SS	 j5       r	\SS
 j5       r
SU 4S jjrSrU =r$ )RegexMatchingEventHandlerip  z^Matches given regexes with file paths associated with occurring events.
Uses the `re` module.
NF)regexesignore_regexesr   r   c               V  > [         TU ]  5         Uc  S/nO[        U[        5      (       a  U/nUc  / nU(       aY  U Vs/ s H  n[        R
                  " U5      PM     snU l        U Vs/ s H  n[        R
                  " U5      PM     snU l        OvU Vs/ s H(  n[        R
                  " U[        R                  5      PM*     snU l        U Vs/ s H(  n[        R
                  " U[        R                  5      PM*     snU l        X0l	        X@l
        g s  snf s  snf s  snf s  snf )Nz.*)r   r   
isinstancer   recompile_regexes_ignore_regexes
IGNORECASEr   r   )ra   r   r   r   r   rr   s         r(   r   "RegexMatchingEventHandler.__init__u  s     	?gG%%iG!N4;<GqRZZ]G<DM;I#J>aBJJqM>#JD CJK7aRZZ2==97KDMJX#Y.QBJJq"--$@.#YD #5 - =#JK#Ys    D+ D/D!/D&c                    U R                   $ )z3(Read-only)
Regexes to allow matching event paths.
)r   r   s    r(   r   !RegexMatchingEventHandler.regexes  s    
 }}r'   c                    U R                   $ )z4(Read-only)
Regexes to ignore matching event paths.
)r   r   s    r(   r   (RegexMatchingEventHandler.ignore_regexes  s    
 ###r'   c                    U R                   $ r   r   r   s    r(   r   ,RegexMatchingEventHandler.ignore_directories  r   r'   c                    U R                   $ r   r   r   s    r(   r   (RegexMatchingEventHandler.case_sensitive  r   r'   c                  >^ U R                   (       a  UR                  (       a  g/ m[        US5      (       a/  TR                  [        R
                  " UR                  5      5        UR                  (       a/  TR                  [        R
                  " UR                  5      5        [        U4S jU R                   5       5      (       a  g[        U4S jU R                   5       5      (       a  [        TU ]1  U5        gg)r\   Nr   c              3  X   >#    U  H  nT  H  o!R                  U5      v   M     M!     g 7fr   match.0r   pr   s      r(   	<genexpr>5RegexMatchingEventHandler.dispatch.<locals>.<genexpr>  s#     F#6a1wwqzzz#6   '*c              3  X   >#    U  H  nT  H  o!R                  U5      v   M     M!     g 7fr   r   r   s      r(   r   r     s!     ?<aAwwqzzz<r   )r   r   r   r   r   r   r   r   anyr   r   r   rc   r   s     @r(   rc   "RegexMatchingEventHandler.dispatch  s     ""u'9'95+&&LLU__56>>LLU^^45F4#6#6FFF?4<<???GU# @r'   )r   r   r   r   )r   r   r   r   r   r   r   r   )r~   zlist[re.Pattern[str]]r   r}   )r    r!   r"   r#   r$   r   r   r   r   r   r   rc   r&   r   r   s   @r(   r   r   p  s     %)+/#($. ". )	.
 !. . .2   $ $ ( ( $ $$ $r'   r   c                     ^  \ rS rSrSrSS.SU 4S jjjrSU 4S jjrSU 4S jjrSU 4S jjrSU 4S	 jjr	SU 4S
 jjr
SU 4S jjrSU 4S jjrSrU =r$ )LoggingEventHandleri  zLogs all the events captured.N)loggerc               ^   > [         TU ]  5         U=(       d    [        R                  U l        g r   )r   r   loggingrootr   )ra   r   r   s     r(   r   LoggingEventHandler.__init__  s    ,r'   c                   > [         TU ]  U5        UR                  (       a  SOSnU R                  R	                  SX!R
                  UR                  5        g )N	directoryfilezMoved %s: from %s to %s)r   ri   r   r   infor   r   ra   rb   whatr   s      r(   ri   LoggingEventHandler.on_moved  s>    #00{f2D..%//Zr'   c                   > [         TU ]  U5        UR                  (       a  SOSnU R                  R	                  SX!R
                  5        g )Nr   r   zCreated %s: %s)r   rl   r   r   r   r   r   s      r(   rl   LoggingEventHandler.on_created  8    5!#00{f)4@r'   c                   > [         TU ]  U5        UR                  (       a  SOSnU R                  R	                  SX!R
                  5        g )Nr   r   zDeleted %s: %s)r   ro   r   r   r   r   r   s      r(   ro   LoggingEventHandler.on_deleted  r   r'   c                   > [         TU ]  U5        UR                  (       a  SOSnU R                  R	                  SX!R
                  5        g )Nr   r   zModified %s: %s)r   rr   r   r   r   r   r   s      r(   rr   LoggingEventHandler.on_modified  s8    E"#00{f*D..Ar'   c                p   > [         TU ]  U5        U R                  R                  SUR                  5        g )NzClosed modified file: %s)r   ru   r   r   r   ra   rb   r   s     r(   ru   LoggingEventHandler.on_closed  s)    % 3U^^Dr'   c                p   > [         TU ]  U5        U R                  R                  SUR                  5        g )NzClosed read file: %s)r   rx   r   r   r   r   s     r(   rx   &LoggingEventHandler.on_closed_no_write  s)    "5)/@r'   c                p   > [         TU ]  U5        U R                  R                  SUR                  5        g )NzOpened file: %s)r   r{   r   r   r   r   s     r(   r{   LoggingEventHandler.on_opened  s)    % *ENN;r'   )r   zlogging.Logger | Noner~   r   r   r   r   r   r   r   r   )r    r!   r"   r#   r$   r   ri   rl   ro   rr   ru   rx   r{   r&   r   r   s   @r(   r   r     sA    ':> - -[AABE
A
< <r'   r   c              #    #    [         R                  " U5       H  u  p#nU HH  n[         R                  R                  X%5      nU (       a  UR	                  X5      OSn[        XvSS9v   MJ     U HH  n[         R                  R                  X(5      nU (       a  UR	                  X5      OSn[        XvSS9v   MJ     M     g7f)a  Generates an event list of :class:`DirMovedEvent` and
:class:`FileMovedEvent` objects for all the files and directories within
the given moved directory that were moved along with the directory.

:param src_dir_path:
    The source path of the moved directory.
:param dest_dir_path:
    The destination path of the moved directory.
:returns:
    An iterable of file system events of type :class:`DirMovedEvent` and
    :class:`FileMovedEvent`.
r   Tr   N)r   walkpathjoinreplacerV   r;   )	src_dir_pathdest_dir_pathr   directories	filenamesr   	full_pathrenamed_pathfilenames	            r(   generate_sub_moved_eventsr     s       )+(>$9$IT5IMY9,,]I_aLdKK % "HT4IMY9,,]I_aL tLL " )?s   B>C c              #    #    [         R                  " U 5       Hn  u  pnU H.  n[         R                  R                  X5      n[	        USS9v   M0     U H.  n[         R                  R                  X5      n[        USS9v   M0     Mp     g7f)a  Generates an event list of :class:`DirCreatedEvent` and
:class:`FileCreatedEvent` objects for all the files and directories within
the given moved directory that were moved along with the directory.

:param src_dir_path:
    The source path of the created directory.
:returns:
    An iterable of file system events of type :class:`DirCreatedEvent` and
    :class:`FileCreatedEvent`.
Tr   N)r   r   r   r   rS   r7   )r   r   r   r   r   r   r   s          r(   generate_sub_created_eventsr    ss      )+(=$9$IT5I!)$?? % "HT4I"94@@ "	 )>s   B
B)r   r   r   r   r~   z)Generator[DirMovedEvent | FileMovedEvent])r   r   r~   z-Generator[DirCreatedEvent | FileCreatedEvent])*r$   
__future__r   r   os.pathr   r   dataclassesr   r   typingr   watchdog.utils.patternsr   collections.abcr   r,   r0   r9   r5   rA   rF   rJ   r   r*   r.   r3   r7   r;   r>   rD   rH   rL   rP   rS   rV   rY   r   r   r   r   r  r   r'   r(   <module>r	     si  Ob #   	 (   3)      .   t. . .*"? "$ $% %$ $K) K#o #,_ ,#o #o  o ( T TnI$"8 I$XP$ 6 P$f,<0 ,<^MMM /M6Ar'   