
    c3(                     v    d dl Z  G d d          Z G d d          Z G d d          Z G d d	          ZdS )
    Nc                   :    e Zd ZdZ	 d	dZd Zd Zd Zd Zd Z	dS )
ResourceObserveraO  Provides the interface for observing resources

    `ResourceObserver` can be registered using `Project.
    add_observer()`.  But most of the time `FilteredResourceObserver`
    should be used.  `ResourceObserver` report all changes passed
    to them and they don't report changes to all resources.  For
    example if a folder is removed, it only calls `removed()` for that
    folder and not its contents.  You can use
    `FilteredResourceObserver` if you are interested in changes only
    to a list of resources.  And you want changes to be reported on
    individual resources.

    Nc                 L    || _         || _        || _        || _        || _        d S N)changedmovedcreatedremoved	_validate)selfr   r   r	   r
   validates         :lib/python3.11/site-packages/rope/base/resourceobserver.py__init__zResourceObserver.__init__   s+     
!    c                 B    | j         |                      |           dS dS )z&It is called when the resource changesN)r   r   resources     r   resource_changedz!ResourceObserver.resource_changed   .    < 	#LL"""""	# 	#r   c                 D    | j         |                      ||           dS dS )z%It is called when a resource is movedN)r   r   r   new_resources      r   resource_movedzResourceObserver.resource_moved!   s0    : 	/JJx.....	/ 	/r   c                 B    | j         |                      |           dS dS )z(Is called when a new resource is createdN)r	   r   s     r   resource_createdz!ResourceObserver.resource_created&   r   r   c                 B    | j         |                      |           dS dS )z(Is called when a new resource is removedN)r
   r   s     r   resource_removedz!ResourceObserver.resource_removed+   r   r   c                 B    | j         |                      |           dS dS )zValidate the existence of this resource and its children.

        This function is called when rope need to update its resource
        cache about the files that might have been changed or removed
        by other processes.

        N)r   r   s     r   r   zResourceObserver.validate0   s0     > 	%NN8$$$$$	% 	%r   )NNNNN)
__name__
__module____qualname____doc__r   r   r   r   r   r    r   r   r   r      s          NR" " " "# # #
/ / /
# # #
# # #
	% 	% 	% 	% 	%r   r   c                       e Zd ZdZddZd Zd Zd Zd Zd Z	dd	Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )FilteredResourceObservera  A useful decorator for `ResourceObserver`

    Most resource observers have a list of resources and are
    interested only in changes to those files.  This class satisfies
    this need.  It dispatches resource changed and removed messages.
    It performs these tasks:

    * Changes to files and folders are analyzed to check whether any
      of the interesting resources are changed or not.  If they are,
      it reports these changes to `resource_observer` passed to the
      constructor.
    * When a resource is removed it checks whether any of the
      interesting resources are contained in that folder and reports
      them to `resource_observer`.
    * When validating a folder it validates all of the interesting
      files in that folder.

    Since most resource observers are interested in a list of
    resources that change over time, `add_resource` and
    `remove_resource` might be useful.

    Nc                     || _         i | _        ||| _        nt                      | _        ||D ]}|                     |           d S d S r   )observer	resources
timekeeperChangeIndicatoradd_resource)r   resource_observerinitial_resourcesr)   r   s        r   r   z!FilteredResourceObserver.__init__T   sp    ) 	0(DOO-//DO 	,- , ,!!(++++	, 	,, ,r   c                     |                                 r$| j                            |          | j        |<   dS d| j        |<   dS z3Add a resource to the list of interesting resourcesN)existsr)   get_indicatorr(   r   s     r   r+   z%FilteredResourceObserver.add_resource_   sH    ?? 	,'+'D'DX'N'NDN8$$$'+DN8$$$r   c                 ,    || j         v r
| j         |= dS dS r/   )r(   r   s     r   remove_resourcez(FilteredResourceObserver.remove_resourcef   s+    t~% 	)x(((	) 	)r   c                 8    | j                                          dS )z Removes all registered resourcesN)r(   clearr   s    r   clear_resourcesz(FilteredResourceObserver.clear_resourcesk   s    r   c                 x    t                      }|                     ||           |                     |           d S r   )_Changes!_update_changes_caused_by_changed_perform_changesr   r   changess      r   r   z)FilteredResourceObserver.resource_changedo   ;    **..wAAAg&&&&&r   c                     || j         v r|                    |           |                     |          r|                    |j                   d S d S r   )r(   add_changed_is_parent_changedparent)r   r=   r   s      r   r:   z:FilteredResourceObserver._update_changes_caused_by_changedt   sa    dn$ 	)(((""7++ 	0/////	0 	0r   c                 "   || j         v r|                    ||           || j         v r|                    |           |                                rYt	          | j                   D ]D}|                    |          r-|                     |||          }|                    ||           E|                     |          r|                    |j	                   |1|                     |          r|                    |j	                   d S d S d S r   )
r(   add_removedadd_created	is_folderlistcontains_calculate_new_resourcerA   r@   rB   )r   r=   r   r   filenew_files         r   _update_changes_caused_by_movedz8FilteredResourceObserver._update_changes_caused_by_movedz   s=   t~% 	8,7774>) 	.--- 	8T^,, 8 8$$T** 8#;; ,   H ''h777""8,, 	1000 	9&&|44 9##L$788888	9 	99 9r   c                     |j         | j        v S r   )rB   r(   )r   childs     r   rA   z+FilteredResourceObserver._is_parent_changed   s    |t~--r   c                 z    t                      }|                     |||           |                     |           d S r   r9   rL   r;   )r   r   r   r=   s       r   r   z'FilteredResourceObserver.resource_moved   s=    **,,WhMMMg&&&&&r   c                 x    t                      }|                     ||           |                     |           d S r   )r9   !_update_changes_caused_by_createdr;   r<   s      r   r   z)FilteredResourceObserver.resource_created   r>   r   c                     || j         v r|                    |           |                     |          r|                    |j                   d S d S r   )r(   rE   rA   r@   rB   )r   r=   r   s      r   rR   z:FilteredResourceObserver._update_changes_caused_by_created   sa    t~% 	*)))""8,, 	100000	1 	1r   c                 x    t                      }|                     ||           |                     |           d S r   rP   r<   s      r   r   z)FilteredResourceObserver.resource_removed   s;    **,,Wh???g&&&&&r   c                    |j         D ]>}| j                            |           | j                            |          | j        |<   ?|j                                        D ]G\  }}d | j        |<   || j                            ||           -| j        	                    |           H|j
        D ]>}| j                            |           | j                            |          | j        |<   ?d S r   )r=   r'   r   r)   r1   r(   movesitemsr   r   	creationsr   )r   r=   r   r   s       r   r;   z)FilteredResourceObserver._perform_changes   s	    	O 	OHM**8444'+'D'DX'N'NDN8$$&-m&9&9&;&; 	9 	9"Hl'+DN8$ 9,,X|DDDD..x8888) 	O 	OHM**8444'+'D'DX'N'NDN8$$	O 	Or   c                    t                      }|                     |          D ]!}|| j        v r|                     ||           "|                     |          D ]!}|| j        v r|                     ||           "|                     |          D ] }|| j        v r|                    |           !|                     |           d S r   )	r9   _search_resource_movesr(   rL   _search_resource_changesr:   _search_resource_creationsrE   r;   )r   r   r=   rJ   s       r   r   z!FilteredResourceObserver.validate   s    **//99 	D 	DDt~% D44WdCCC11(;; 	F 	FDt~% F66wEEE33H== 	* 	*Dt~% *##D)))g&&&&&r   c                 r   t                      }|| j        v r6|                                r"| j        |         |                    |           |                                rU| j        D ]M}|                                r7|                    |          r"| j        |         |                    |           N|S r   )setr(   r0   addrF   rH   )r   r   rX   rJ   s       r   r\   z3FilteredResourceObserver._search_resource_creations   s    EE	&	$!!	$ x(	$
 MM(### 	( ( (KKMM( ))$//( t,(
 MM$'''r   c                    t                      }|| j        v r)|                                s|                    |           |                                rH| j        D ]@}|                    |          r)|                                s|                    |           At          |          }d |D             D ]B}||v r<t          |          D ],}|                    |          r|                    |           -C|S )Nc                 :    g | ]}|                                 |S r#   )rF   ).0rJ   s     r   
<listcomp>zCFilteredResourceObserver._search_resource_moves.<locals>.<listcomp>   s'    FFFT^^5E5EFtFFFr   )r^   r(   r0   r_   rF   rH   rG   remove)r   r   	all_movedrJ   r   folders         r   rZ   z/FilteredResourceObserver._search_resource_moves   s   EE	t~% 	$hoo.?.? 	$MM(### 	, , ,$$T** ,;;== ,!d+++IFF	FFF 	+ 	+F + KK + +Dt,, +T***r   c                 j   t                      }|| j        v r*|                     |          r|                    |           |                                r]| j        D ]U}|                                r?|                    |          r*|                     |          r|                    |           V|S r   )r^   r(   _is_changedr_   rF   r0   rH   )r   r   r   rJ   s       r   r[   z1FilteredResourceObserver._search_resource_changes   s    %%t~% 	"$*:*:8*D*D 	"KK!!! 	* * *;;== *X%6%6t%<%< *''-- *D)))r   c                 r    | j         |         dS | j         |         | j                            |          k    S )NF)r(   r)   r1   r   s     r   rh   z$FilteredResourceObserver._is_changed   s8    >(# 	5~h'4?+H+H+R+RRRr   c                     |d S |j         t          |j                   d          }|j                            |j         |z             S r   )pathlenprojectget_resource)r   mainnew_mainr   diffs        r   rI   z0FilteredResourceObserver._calculate_new_resource   sG     	4}S^^--.,,X]T-ABBBr   )NNr   )r   r    r!   r"   r   r+   r3   r7   r   r:   rL   rA   r   r   rR   r   r;   r   r\   rZ   r[   rh   rI   r#   r   r   r%   r%   <   sP        .	, 	, 	, 	,, , ,) ) )
  ' ' '
0 0 09 9 9 9$. . .' ' '
' ' '
1 1 1' ' '
O O O' ' '  $  "	 	 	S S S
C C C C Cr   r%   c                       e Zd Zd ZdS )r*   c                    |j         }t          j        dk    r}t          j                            |          r^t          j                            |          t          t          j        |                    t          j                            |          fS t          j                            |          t          j                            |          fS )z6Return the modification time and size of a `Resource`.posix)		real_pathosnamerk   isdirgetmtimerl   listdirgetsize)r   r   rk   s      r   r1   zChangeIndicator.get_indicator   s    !7g 	"'--"5"5 	  &&BJt$$%%%% 
   &&(=(=>>r   N)r   r    r!   r1   r#   r   r   r*   r*      s#        
? 
? 
? 
? 
?r   r*   c                   (    e Zd Zd Zd ZddZd ZdS )r9   c                 `    t                      | _        t                      | _        i | _        d S r   )r^   r=   rX   rV   r6   s    r   r   z_Changes.__init__  s#    uu


r   c                 :    | j                             |           d S r   )r=   r_   r   s     r   r@   z_Changes.add_changed  s    """""r   Nc                     || j         |<   d S r   )rV   r   s      r   rD   z_Changes.add_removed  s    +
8r   c                 :    | j                             |           d S r   )rX   r_   r   s     r   rE   z_Changes.add_created  s    8$$$$$r   r   )r   r    r!   r   r@   rD   rE   r#   r   r   r9   r9     sU          
# # #, , , ,% % % % %r   r9   )rv   r   r%   r*   r9   r#   r   r   <module>r      s    				5% 5% 5% 5% 5% 5% 5% 5%pzC zC zC zC zC zC zC zCz? ? ? ? ? ? ? ?% % % % % % % % % %r   