
    Æe!                     l    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
y)
    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y)ObjectInfoManagerzlStores object information

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

    c                 (   || _         t        j                  |      | _        t        j                  |      | _        t        j                  |      | _        | j                          |j                  j                  dd      r| j                          y y )Nvalidate_objectdbF)projectr   PyObjectToTextual
to_textualTextualToPyObjectto_pyobjectDOITextualToPyObjectdoi_to_pyobject_init_objectdbprefsget_init_validation)selfr   s     9/usr/lib/python3/dist-packages/rope/base/oi/objectinfo.py__init__zObjectInfoManager.__init__   ss    #55g>$66w?(==gF==0%8!!# 9    c                    | j                   j                         j                  dd       }d }|7t        j                  dt
               |dk7  r| j                   j                  d}t        | j                        | _	        t        j                  | j                   |      }t        j                  || j                        | _        y )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MMH #	 !dll&=&=&I+D,<,<=t||W= ))"doo>r   c                 @   | j                   j                          t        j                  | j                  | j
                  | j
                        }g }| j                   j                         D ]K  }| j                  j                  |      }|!|j                  | j                  k(  s;|j                  |       M t        j                  ||      | _        | j                   j                  t        |              | j                  j                  | j                         y )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4**&&((

 MM++- 	'D''88>H#(8(8DLL(HX&	' )AA(ER,,->t-DE!!$--0r   c                     	 | j                   j                  | j                  j                  |             y # t        j
                  $ r Y y w xY wN)r   validate_filer   resource_to_pathr   ModuleSyntaxError)r   r<   s     r   r0   z#ObjectInfoManager._resource_changed8   s@    	MM''(H(H(RS++ 		s   47 AANc                    | j                   j                  |       |n| j                  j                  |      }| j                  j                  |      }| j                  j                  ||       | j                   j                  |       y y r>   )r6   remove_resourcer   r@   r   
file_movedadd_resource)r   r<   new_resourceoldnews        r   r1   z!ObjectInfoManager._resource_moved>   sm    %%h/#//228<C//22<@CMM$$S#.MM&&|4	 $r   c                 
   | j                  ||      }||S | j                  |      \  }}|y | j                  j                  ||      D ]$  }|j	                         }|r|d   dvr|} n|#|}& || j                  |      S y )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MOOH-	c<44T3? 	"I --/HHQK/BB!~!	" ##F++ r   c                     | j                  |      \  }}|A| j                  j                  ||| j                  ||            }|| j	                  |      S y y r>   )rN   r   rP   _args_to_textualr   )r   rQ   rR   r;   rT   rV   s         r   rM   z$ObjectInfoManager.get_exact_returnedW   se    OOH-	c}}11c4004@H #''11 $	 r   c                      t        |j                  d            }|j                  |      d t        |       }t	         fd|D              }|S )NFspecial_argsc              3   @   K   | ]  }j                  |        y wr>   r   ).0argr   s     r   	<genexpr>z5ObjectInfoManager._args_to_textual.<locals>.<genexpr>c   s     GcT__S1G   )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I
&&z23DS_E	GYGGr   c                    | j                  |      \  }}|y t        |j                  d            }|}d g|z  }| j                  j	                  ||      D ]w  }|j                         }t        |d |       D ]M  \  }	}
||	   }| j                  j                  |
|      s(|
||	<   | j                  j                  |
      sI|dz  }O |dk(  sw n ||k  r|D cg c]  }| j                  |       c}S y c c}w )NFrZ      r   )rN   re   rc   r   rO   get_parameters	enumerater%   is_more_validis_value_validr   )r   rQ   r;   rT   	arg_countunknownsrh   rU   rR   indexr_   rG   	parameters                r   get_parameter_objectsz'ObjectInfoManager.get_parameter_objectsf   s   OOH-	c<00e0DE	Vi'
44T3? 		I++-D'Zi(89 &
s '??00c:(+Ju%55c: A& 1}		 iAKLID$$Y/LL  Ls   C6c                 
   | j                  |      \  }}|g S g }| j                  j                  ||      D ]I  }|j                         }t	        |      |kD  s"| j                  ||         }|9|j                  |       K |S r>   )rN   r   rO   rm   re   r   r4   )	r   rg   parameter_indexr;   rT   rS   rU   rR   rt   s	            r   get_passed_objectsz$ObjectInfoManager.get_passed_objectsz   s    OOJ/	c<I44T3? 	-I++-D4y?* ,,T/-BC	(MM),	- r   c                       fd |d         }t        fd|d   D              } |d         }|d   dk(  r#t        |      dk(  r j                  |||       y y y )Nc                 H    j                  |       }j                  |      S r>   )r   r   )textualrQ   r   s     r   doi_to_normalz:ObjectInfoManager.doa_data_received.<locals>.doi_to_normal   s"    ++G4H??8,,r   r   c              3   .   K   | ]  } |        y wr>    )r^   r{   r|   s     r   r`   z6ObjectInfoManager.doa_data_received.<locals>.<genexpr>   s     C]7+Cs   rl      defined   )rf   re   
_save_data)r   datafunctionrR   rV   r|   s   `    @r   doa_data_receivedz#ObjectInfoManager.doa_data_received   si    	- !a)C47CC a)A;)#H(:OOHdH5 );#r   c                       j                  |      }t         fd|D              }d}| j                  |      } j                  |||       y )Nc              3   @   K   | ]  }j                  |        y wr>   r]   )r^   paramr   s     r   r`   z4ObjectInfoManager.function_called.<locals>.<genexpr>   s     GuDOOE2Gra   rK   )r   rf   r   )r   rg   paramsrV   function_textparams_textreturned_texts   `      r   function_calledz!ObjectInfoManager.function_called   sJ    
3GGG$ OOH5M{MBr   c                     | j                  |j                        \  }}|.| j                  j                  |||| j	                  |             y y r>   )rN   rQ   r   add_pernamer   )r   scopenamer   r;   rT   s         r   save_per_namezObjectInfoManager.save_per_name   sD    OOENN3	cMM%%dCtt7LM r   c                     | j                  |j                        \  }}|1| j                  j                  |||      }|| j	                  |      S y y r>   )rN   rQ   r   get_pernamer   )r   r   r   r;   rT   rS   s         r   get_per_namezObjectInfoManager.get_per_name   sW    OOENN3	c]]..tS$?F!''// " r   c                 L    | j                   j                  |d   |d   ||       y )Nrl   r   )r   add_callinfo)r   r   rR   rV   s       r   r   zObjectInfoManager._save_data   s"    ""8A;T8Lr   c                     |j                         j                         }|y| j                  |      }|d   dk(  r"|d   }t        |      dk(  r	|d   }||fS d}||fS y)N)NNr   r   rl   r   r    )
get_moduleget_resourcer   re   )r   rQ   r<   r{   r;   rT   s         r   rN   zObjectInfoManager._get_scope   sz    &&(557//(+1:"1:D7|q aj 9 9r   c                 8    | j                   j                          y 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   ru   rx   r   r   r   r   r   rN   r   r   r~   r   r   r	   r	      se    $? 1 5,"2M(	6CN
0M"r   r	   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r$   c                     || _         y r>   r   )r   r   s     r   r   zTextualValidation.__init__   s
    &r   c                 <    ||d   dv ry| j                  |      d uS )Nr   )rL   rK   Fr   )r   values     r   rp   z TextualValidation.is_value_valid   s,    =E!H(;;&d22r   c                     |y|d   dvS )NTr   rJ   r~   )r   rH   rG   s      r   ro   zTextualValidation.is_more_valid   s    ;1v000r   c                 <    | j                   j                  |      d uS r>   )r   r3   )r   r;   s     r   is_file_validzTextualValidation.is_file_valid   s    006dBBr   c                 F    |dk(  rd|f}nd||f}| j                  |      d uS )Nr   r   r   )r   r;   rT   r{   s       r   is_scope_validz TextualValidation.is_scope_valid   s5    "9 $'G $,G(44r   N)r   r   r   r   rp   ro   r   r   r~   r   r   r$   r$      s    '31
C5r   r$   c                       e Zd Zd Zd Zd Zy)r8   c                 ~    || _         | j                   j                  | _        | j                   j                  | _        y r>   )object_infor6   r   )r   r   s     r   r   z_FileListObserver.__init__   s1    &((11++77r   c                 v    | j                   j                  |      }|| j                  j                  |       y y r>   )r   r3   r6   rC   r   r;   r<   s      r   r-   z_FileListObserver.removed   s5    ##44T:MM))(3  r   c                 v    | j                   j                  |      }|| j                  j                  |       y y r>   )r   r3   r6   rE   r   s      r   addedz_FileListObserver.added   s5    ##44T:MM&&x0  r   N)r   r   r   r   r-   r   r~   r   r   r8   r8      s    8
4
1r   r8   )r    	rope.baser   r   rope.base.oir   r   r   r	   r$   r8   r~   r   r   <module>r      s2     2 6 6t" t"n5 541 1r   