ó
†Å•Zc           @   s„   d  d l  Z  d  d l m Z m Z d  d l m Z m Z m Z d e f d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d e f d	 „  ƒ  YZ d S(
   iÿÿÿÿN(   t
   exceptionst   resourceobserver(   t   objectdbt   memorydbt	   transformt   ObjectInfoManagerc           B   s¹   e  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 RS(   sl   Stores object information

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

    c         C   so   | |  _  t j | ƒ |  _ t j | ƒ |  _ t j | ƒ |  _ |  j ƒ  | j	 j
 d t ƒ rk |  j ƒ  n  d  S(   Nt   validate_objectdb(   t   projectR   t   PyObjectToTextualt
   to_textualt   TextualToPyObjectt   to_pyobjectt   DOITextualToPyObjectt   doi_to_pyobjectt   _init_objectdbt   prefst   gett   Falset   _init_validation(   t   selfR   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   __init__   s    	
c         C   s­   |  j  j ƒ  j d d  ƒ } d  } | d  k	 rg t j d t ƒ | d k rg |  j  j d  k	 rg t } qg n  t	 |  j
 ƒ |  _ t j |  j  d | ƒ} t j | |  j ƒ |  _ d  S(   Nt   objectdb_types   "objectdb_type" project config is deprecated;
Use "save_objectdb" instead in your project config file.
(".ropeproject/config.py" by default)
t   memoryt   persist(   R   t	   get_prefsR   t   Nonet   warningst   warnt   DeprecationWarningt
   ropefoldert   Truet   TextualValidationR   t
   validationR   t   MemoryDBR   t   ObjectDB(   R   t   dbtypeR   t   db(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR      s    c         C   sÖ   |  j  j ƒ  t j d |  j d |  j d |  j ƒ } g  } xW |  j  j ƒ  D]F } |  j j | ƒ } | d  k	 rJ | j
 |  j
 k rJ | j | ƒ qJ qJ Wt j | | ƒ |  _ |  j  j t |  ƒ ƒ |  j
 j |  j ƒ d  S(   Nt   changedt   movedt   removed(   R   t   validate_filesR   t   ResourceObservert   _resource_changedt   _resource_movedt	   get_filesR   t   path_to_resourceR   R   t   appendt   FilteredResourceObservert   observert   add_file_list_observert   _FileListObservert   add_observer(   R   R0   t   filest   patht   resource(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR   '   s    		c         C   s;   y  |  j  j |  j j | ƒ ƒ Wn t j k
 r6 n Xd  S(   N(   R   t   validate_fileR	   t   resource_to_pathR    t   ModuleSyntaxError(   R   R6   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR*   6   s
    	c         C   sj   |  j  j | ƒ | d  k	 rf |  j j | ƒ } |  j j | ƒ } |  j j | | ƒ |  j  j | ƒ n  d  S(   N(   R0   t   remove_resourceR   R	   R8   R   t
   file_movedt   add_resource(   R   R6   t   new_resourcet   oldt   new(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR+   =   s    c         C   sÅ   |  j  | | ƒ } | d  k	 r" | S|  j | ƒ \ } } | d  k rG d  Sx^ |  j j | | ƒ D]G } | j ƒ  } | r | d d k r | } Pn  | d  k r] | } q] q] W| d  k	 rÁ |  j | ƒ Sd  S(   Ni    t   unknownt   none(   R@   RA   (   t   get_exact_returnedR   t
   _get_scopeR   t   get_callinfost   get_returnedR   (   R   t   pyobjectt   argst   resultR5   t   keyt	   call_infot   returned(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyRE   E   s    c         C   se   |  j  | ƒ \ } } | d  k	 ra |  j j | | |  j | | ƒ ƒ } | d  k	 ra |  j | ƒ Sn  d  S(   N(   RC   R   R   RE   t   _args_to_textualR   (   R   RF   RG   R5   RI   RK   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyRB   V   s    	c         C   s]   t  | j d t ƒ ƒ } | j | ƒ t | ƒ  } t g  | D] } |  j | ƒ ^ q; ƒ } | S(   Nt   special_args(   t   listt   get_param_namesR   t   get_argumentst   lent   tupleR	   (   R   t
   pyfunctionRG   t
   parameterst	   argumentst   argt   textual_args(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyRL   ^   s
    "c         C   s(  |  j  | ƒ \ } } | d  k r% d  St | j d t ƒ ƒ } | } d  g | } x¥ |  j j | | ƒ D]Ž } | j ƒ  } xi t | |  ƒ D]W \ }	 }
 | |	 } |  j	 j
 |
 | ƒ r‰ |
 | |	 <|  j	 j |
 ƒ rà | d 8} qà q‰ q‰ W| d k rf Pqf qf W| | k  r$g  | D] } |  j | ƒ ^ qSd  S(   NRM   i   i    (   RC   R   RQ   RO   R   R   RD   t   get_parameterst	   enumerateR    t   is_more_validt   is_value_validR   (   R   RF   R5   RI   t	   arg_countt   unknownsRT   RJ   RG   t   indexRV   R>   t	   parameter(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   get_parameter_objectse   s&    

c   	      C   sŸ   |  j  | ƒ \ } } | d  k r% g  Sg  } xm |  j j | | ƒ D]V } | j ƒ  } t | ƒ | k rA |  j | | ƒ } | d  k	 r— | j | ƒ q— qA qA W| S(   N(   RC   R   R   RD   RX   RQ   R   R.   (	   R   RS   t   parameter_indexR5   RI   RH   RJ   RG   R_   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   get_passed_objectsz   s    c            s”   ‡  f d †  } | | d ƒ } t  g  | d D] } | | ƒ ^ q- ƒ } | | d ƒ } | d d k r t | ƒ d k r ˆ  j | | | ƒ n  d  S(   Nc            s   ˆ  j  |  ƒ } ˆ  j | ƒ S(   N(   R   R	   (   t   textualRF   (   R   (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   doi_to_normalˆ   s    i    i   i   t   definedi   (   RR   RQ   t
   _save_data(   R   t   dataRd   t   functionRc   RG   RK   (    (   R   s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   doa_data_received‡   s    )"c         C   sr   |  j  | ƒ } t g  | D] } |  j  | ƒ ^ q ƒ } d } | d  k	 r[ |  j  | ƒ } n  |  j | | | ƒ d  S(   NR@   (   R@   (   R	   RR   R   Rf   (   R   RS   t   paramsRK   t   function_textt   paramt   params_textt   returned_text(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   function_called‘   s    "c         C   sM   |  j  | j ƒ \ } } | d  k	 rI |  j j | | | |  j | ƒ ƒ n  d  S(   N(   RC   RF   R   R   t   add_pernameR	   (   R   t   scopet   nameRg   R5   RI   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   save_per_nameš   s    c         C   s\   |  j  | j ƒ \ } } | d  k	 rX |  j j | | | ƒ } | d  k	 rX |  j | ƒ Sn  d  S(   N(   RC   RF   R   R   t   get_pernameR   (   R   Rq   Rr   R5   RI   RH   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   get_per_nameŸ   s
    R@   c         C   s%   |  j  j | d | d | | ƒ d  S(   Ni   i   (   R   t   add_callinfo(   R   Rh   RG   RK   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyRf   ¦   s    c         C   s~   | j  ƒ  j ƒ  } | d  k r" d S|  j | ƒ } | d d k rz | d } t | ƒ d k rj | d } n d } | | f Sd S(	   Ni    Re   i   i   i   t    (   NN(   NN(   t
   get_modulet   get_resourceR   R	   RQ   (   R   RF   R6   Rc   R5   RI   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyRC   ©   s    

c         C   s   |  j  j ƒ  d  S(   N(   R   t   sync(   R   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyRz   ·   s    c         C   s   t  |  j ƒ S(   N(   t   strR   (   R   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   __str__º   s    N(   R@   (   t   __name__t
   __module__t   __doc__R   R   R   R*   R   R+   RE   RB   RL   R`   Rb   Ri   Ro   Rs   Ru   Rf   RC   Rz   R|   (    (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR      s&   											
					R   c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR   À   s    c         C   s3   | d  k s | d d k r  t S|  j | ƒ d  k	 S(   Ni    RA   R@   (   RA   R@   (   R   R   R   (   R   t   value(    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR[   Ã   s    c         C   s   | d  k r t S| d d k S(   Ni    R@   RA   (   R@   RA   (   R   R   (   R   R?   R>   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyRZ   É   s    c         C   s   |  j  j | ƒ d  k	 S(   N(   R   R-   R   (   R   R5   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   is_file_validÎ   s    c         C   s=   | d k r d | f } n d | | f } |  j  | ƒ d  k	 S(   NRw   Re   (   R   R   (   R   R5   RI   Rc   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   is_scope_validÑ   s    (   R}   R~   R   R[   RZ   R   R‚   (    (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR   ¾   s
   				R2   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s+   | |  _  |  j  j |  _ |  j  j |  _ d  S(   N(   t   object_infoR0   R   (   R   Rƒ   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR   Û   s    	c         C   s5   |  j  j | ƒ } | d  k	 r1 |  j j | ƒ n  d  S(   N(   R   R-   R   R0   R:   (   R   R5   R6   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR'   à   s    c         C   s5   |  j  j | ƒ } | d  k	 r1 |  j j | ƒ n  d  S(   N(   R   R-   R   R0   R<   (   R   R5   R6   (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   addedå   s    (   R}   R~   R   R'   R„   (    (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyR2   Ù   s   		(   R   t	   rope.baseR    R   t   rope.base.oiR   R   R   t   objectR   R   R2   (    (    (    s6   lib/python2.7/site-packages/rope/base/oi/objectinfo.pyt   <module>   s
   ·