
    c!                         d dl Z d dlmZmZ d dlmZmZmZ  G d d          Z G d d          Z	 G d d	          Z
dS )
    N)
exceptionsresourceobserver)memorydbobjectdb	transformc                       e Z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dZd Zd ZddZd Zd Zd ZdS )ObjectInfoManagerzlStores object information

    It uses an instance of `objectdb.ObjectDB` for storing
    information.

    c                 4   || _         t          j        |          | _        t          j        |          | _        t          j        |          | _        |                                  |j	        
                    dd          r|                                  d S d S )Nvalidate_objectdbF)projectr   PyObjectToTextual
to_textualTextualToPyObjectto_pyobjectDOITextualToPyObjectdoi_to_pyobject_init_objectdbprefsget_init_validation)selfr   s     7lib/python3.11/site-packages/rope/base/oi/objectinfo.py__init__zObjectInfoManager.__init__   s    #5g>>$6w??(=gFF=0%88 	$!!#####	$ 	$    c                 j   | j                                                             dd           }d }|.t          j        dt
                     |dk    r| j         j        d}t          | j                  | _	        t          j        | j         |          }t          j        || j	                  | _        d S )Nobjectdb_typez"objectdb_type" project config is deprecated;
Use "save_objectdb" instead in your project config file.
(".ropeproject/config.py" by default)
memoryT)persist)r   	get_prefsr   warningswarnDeprecationWarning
ropefolderTextualValidationr   
validationr   MemoryDBr   ObjectDB)r   dbtyper   dbs       r   r   z ObjectInfoManager._init_objectdb   s    ''))--otDD 	MH #	   ! dl&= +D,<==t|W=== )"do>>r   c                    | j                                          t          j        | j        | j        | j                  }g }| j                                         D ]C}| j                            |          }|%|j	        | j	        k    r|
                    |           Dt          j        ||          | _        | j                             t          |                      | j	                            | j                   d S )N)changedmovedremoved)r   validate_filesr   ResourceObserver_resource_changed_resource_moved	get_filesr   path_to_resourcer   appendFilteredResourceObserverobserveradd_file_list_observer_FileListObserveradd_observer)r   r6   filespathresources        r   r   z"ObjectInfoManager._init_validation(   s    $$&&&#4*&(
 
 

 M++-- 	' 	'D'88>>H '(8DL(H 'X&&&(A(ERR,,->t-D-DEEE!!$-00000r   c                     	 | j                             | j                            |                     d S # t          j        $ r Y d S w xY wN)r   validate_filer   resource_to_pathr   ModuleSyntaxError)r   r<   s     r   r0   z#ObjectInfoManager._resource_changed8   sX    	M''(H(H(R(RSSSSS+ 	 	 	DD	s   26 A	A	Nc                    | j                             |           |k| j                            |          }| j                            |          }| j                            ||           | j                             |           d S d S r>   )r6   remove_resourcer   r@   r   
file_movedadd_resource)r   r<   new_resourceoldnews        r   r1   z!ObjectInfoManager._resource_moved>   s    %%h/// 	5/228<<C/22<@@CM$$S#...M&&|44444		5 	5r   c                 ,   |                      ||          }||S |                     |          \  }}|d S | j                            ||          D ]*}|                                }|r|d         dvr|} n||}+||                     |          S d S )Nr   unknownnone)get_exact_returned
_get_scoper   get_callinfosget_returnedr   )r   pyobjectargsresultr;   key	call_inforeturneds           r   rP   zObjectInfoManager.get_returnedF   s    ((488 	MOOH--	c 	444T3?? 	" 	"I --//H HQK/BB ! "! 	,##F+++	, 	,r   c                     |                      |          \  }}|G| j                            |||                     ||                    }||                     |          S d S d S r>   )rN   r   rP   _args_to_textualr   )r   rQ   rR   r;   rT   rV   s         r   rM   z$ObjectInfoManager.get_exact_returnedW   s    OOH--	c 	2}11c4004@@ H  2''111	2 	22 2r   c                      t          |                    d                    }|                    |          d t          |                   }t	           fd|D                       }|S )NFspecial_argsc              3   B   K   | ]}                     |          V  d S r>   r   ).0argr   s     r   	<genexpr>z5ObjectInfoManager._args_to_textual.<locals>.<genexpr>c   s/      GGcT__S11GGGGGGr   )listget_param_namesget_argumentslentuple)r   
pyfunctionrR   
parameters	argumentstextual_argss   `     r   rX   z"ObjectInfoManager._args_to_textual`   sm    *44%4HHII
&&z223DS__3DE	GGGGYGGGGGr   c                                           |          \  }}|d S t          |                    d                    }|}d g|z  } j                            ||          D ]}|                                }t          |d |                   D ]L\  }	}
||	         } j                            |
|          r$|
||	<    j        	                    |
          r|dz  }M|dk    r n||k     r fd|D             S d S )NFrZ      r   c                 :    g | ]}                     |          S  r   )r^   	parameterr   s     r   
<listcomp>z;ObjectInfoManager.get_parameter_objects.<locals>.<listcomp>x   s'    LLLID$$Y//LLLr   )
rN   rd   rb   r   rO   get_parameters	enumerater%   is_more_validis_value_valid)r   rQ   r;   rT   	arg_countunknownsrg   rU   rR   indexr_   rG   s   `           r   get_parameter_objectsz'ObjectInfoManager.get_parameter_objectsf   sD   OOH--	c 	400e0DDEE	Vi'
44T3?? 		 		I++--D'ZiZ(899 & &
s '?00c:: &(+Ju%55c:: & A1} i 	MLLLLLLLL	M 	Mr   c                 0   |                      |          \  }}|g S g }| j                            ||          D ][}|                                }t	          |          |k    r2|                     ||                   }||                    |           \|S r>   )rN   r   rO   rq   rd   r   r4   )	r   rf   parameter_indexr;   rT   rS   rU   rR   ro   s	            r   get_passed_objectsz$ObjectInfoManager.get_passed_objectsz   s    OOJ//	c 	I44T3?? 	- 	-I++--D4yy?* - ,,T/-BCC	 -MM),,,r   c                      fd |d                   }t          fd|d         D                       } |d                   }|d         dk    r,t          |          dk    r                     |||           d S d S d S )Nc                 X                         |           }                    |          S r>   )r   r   )textualrQ   r   s     r   doi_to_normalz:ObjectInfoManager.doa_data_received.<locals>.doi_to_normal   s(    ++G44H??8,,,r   r   c              3   .   K   | ]} |          V  d S r>   rm   )r^   r~   r   s     r   r`   z6ObjectInfoManager.doa_data_received.<locals>.<genexpr>   s-      CC]]7++CCCCCCr   rk      defined   )re   rd   
_save_data)r   datafunctionrR   rV   r   s   `    @r   doa_data_receivedz#ObjectInfoManager.doa_data_received   s    	- 	- 	- 	- 	- !=a))CCCC47CCCCC =a))A;)# 	6H(: 	6OOHdH55555	6 	6 	6 	6r   c                                            |          }t           fd|D                       }d}|                      |          }                     |||           d S )Nc              3   B   K   | ]}                     |          V  d S r>   r]   )r^   paramr   s     r   r`   z4ObjectInfoManager.function_called.<locals>.<genexpr>   s/      GGuDOOE22GGGGGGr   rK   )r   re   r   )r   rf   paramsrV   function_textparams_textreturned_texts   `      r   function_calledz!ObjectInfoManager.function_called   sp    
33GGGGGGGGG$ 	6 OOH55M{MBBBBBr   c                     |                      |j                  \  }}|2| j                            ||||                     |                     d S d S r>   )rN   rQ   r   add_pernamer   )r   scopenamer   r;   rT   s         r   save_per_namezObjectInfoManager.save_per_name   s\    OOEN33	c 	NM%%dCtt7L7LMMMMM	N 	Nr   c                     |                      |j                  \  }}|3| j                            |||          }||                     |          S d S d S r>   )rN   rQ   r   get_pernamer   )r   r   r   r;   rT   rS   s         r   get_per_namezObjectInfoManager.get_per_name   sj    OOEN33	c 	0]..tS$??F 0''///	0 	00 0r   r   c                 X    | j                             |d         |d         ||           d S )Nrk   r   )r   add_callinfo)r   r   rR   rV   s       r   r   zObjectInfoManager._save_data   s,    ""8A;T8LLLLLr   c                     |                                                                 }|dS |                     |          }|d         dk    r*|d         }t          |          dk    r	|d         }nd}||fS dS )N)NNr   r   rk   r   r    )
get_moduleget_resourcer   rd   )r   rQ   r<   r~   r;   rT   s         r   rN   zObjectInfoManager._get_scope   s    &&((5577 	://(++1:" 	1:D7||q  aj9zr   c                 8    | j                                          d S r>   )r   syncr   s    r   r   zObjectInfoManager.sync   s    r   c                 *    t          | j                  S r>   )strr   r   s    r   __str__zObjectInfoManager.__str__   s    4=!!!r   r>   )r   )__name__
__module____qualname____doc__r   r   r   r0   r1   rP   rM   rX   rx   r{   r   r   r   r   r   rN   r   r   rm   r   r   r	   r	      sI        $ $ $? ? ? 1 1 1   5 5 5 5, , ,"2 2 2  M M M(  	6 	6 	6C C C CN N N
0 0 0M M M M    " " " " "r   r	   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )r$   c                     || _         d S r>   rn   )r   r   s     r   r   zTextualValidation.__init__   s    &r   c                 L    |
|d         dv rdS |                      |          d uS )Nr   )rL   rK   Frn   )r   values     r   rt   z TextualValidation.is_value_valid   s9     	E!H(;; 	5&&d22r   c                     |dS |d         dvS )NTr   rJ   rm   )r   rH   rG   s      r   rs   zTextualValidation.is_more_valid   s     	41v000r   c                 :    | j                             |          d uS r>   )r   r3   )r   r;   s     r   is_file_validzTextualValidation.is_file_valid   s    0066dBBr   c                 P    |dk    rd|f}nd||f}|                      |          d uS )Nr   r   rn   )r   r;   rT   r~   s       r   is_scope_validz TextualValidation.is_scope_valid   s?    "9 	- $'GG $,G((44r   N)r   r   r   r   rt   rs   r   r   rm   r   r   r$   r$      sb        ' ' '3 3 31 1 1
C C C5 5 5 5 5r   r$   c                        e Zd Zd Zd Zd ZdS )r8   c                 X    || _         | j         j        | _        | j         j        | _        d S r>   )object_infor6   r   )r   r   s     r   r   z_FileListObserver.__init__   s+    &(1+7r   c                 v    | j                             |          }|| j                            |           d S d S r>   )r   r3   r6   rC   r   r;   r<   s      r   r-   z_FileListObserver.removed   sF    #44T:: 	4M))(33333	4 	4r   c                 v    | j                             |          }|| j                            |           d S d S r>   )r   r3   r6   rE   r   s      r   addedz_FileListObserver.added   sF    #44T:: 	1M&&x00000	1 	1r   N)r   r   r   r   r-   r   rm   r   r   r8   r8      sA        8 8 8
4 4 4
1 1 1 1 1r   r8   )r    	rope.baser   r   rope.base.oir   r   r   r	   r$   r8   rm   r   r   <module>r      s     2 2 2 2 2 2 2 2 6 6 6 6 6 6 6 6 6 6t" t" t" t" t" t" t" t"n5 5 5 5 5 5 5 541 1 1 1 1 1 1 1 1 1r   