ó
†Å•Zc           @   sV  d  d l  m Z d  d l m Z m Z m Z d e f d „  ƒ  YZ d „  Z d „  Z	 d e f d „  ƒ  YZ
 d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e
 f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e j f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   _decode_data(   t   astt
   exceptionst   utilst   PyObjectc           B   s}   e  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 e d
 „  ƒ Z RS(   c         C   s"   | d  k r |  } n  | |  _ d  S(   N(   t   Nonet   type(   t   selft   type_(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   __init__   s    	c         C   s    |  j  |  k r i  S|  j  j ƒ  S(   N(   R   t   get_attributes(   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR
      s    c         C   s6   | |  j  ƒ  k r( t j d | ƒ ‚ n  |  j  ƒ  | S(   Ns   Attribute %s not found(   R
   R   t   AttributeNotFoundError(   R   t   name(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_attribute   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_type   s    c         C   s   |  j  | ƒ S(   s"   The same as ``get_attribute(key)``(   R   (   R   t   key(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   __getitem__   s    c         C   s   | |  j  ƒ  k S(   s,   The same as ``key in self.get_attributes()``(   R
   (   R   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   __contains__   s    c         C   sd   |  j  | j  k r t St |  ƒ t k rZ |  |  j k	 rG |  j | j k S|  j | j k Sn  |  | k S(   sn  Check the equality of two `PyObject`\s

        Currently it is assumed that instances (the direct instances
        of `PyObject`, not the instances of its subclasses) are equal
        if their types are equal.  For every other object like
        defineds or builtins rope assumes objects are reference
        objects and their identities should match.

        (   t	   __class__t   FalseR   R   (   R   t   obj(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   __eq__"   s    
c         C   s   |  j  | ƒ S(   N(   R   (   R   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   __ne__5   s    c         C   sI   t  |  ƒ t k r2 |  |  j  k r2 t |  j  ƒ d St t |  ƒ j ƒ  Sd S(   s   See docs for `__eq__()` methodi   N(   R   R   t   hasht   supert   __hash__(   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR   8   s    !c         C   s   t  |  j ƒ  ƒ S(   s+   The same as ``iter(self.get_attributes())``(   t   iterR
   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   __iter__?   s    c         C   sx   t  j d  k rm i  t  _ t  d  ƒ } | t  j d <t  | ƒ t  j d <t  | ƒ t  j d <t  | ƒ t  j d <n  t  j |  S(   Nt   Typet   Modulet   Functiont   Unknown(   R   t   _typesR   (   R   t	   base_type(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   _get_base_typeF   s    	N(   t   __name__t
   __module__R	   R
   R   R   R   R   R   R   R   R   R   R    t   _unknownt   staticmethodR"   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR      s   										c         C   s   t  j |  ƒ S(   s¤  Return the base type with name `name`.

    The base types are 'Type', 'Function', 'Module' and 'Unknown'.  It
    was used to check the type of a `PyObject` but currently its use
    is discouraged.  Use classes defined in this module instead.
    For example instead of
    ``pyobject.get_type() == get_base_type('Function')`` use
    ``isinstance(pyobject, AbstractFunction)``.

    You can use `AbstractClass` for classes, `AbstractFunction` for
    functions, and `AbstractModule` for modules.  You can also use
    `PyFunction` and `PyClass` for testing if an object is
    defined somewhere and rope can access its source.  These classes
    provide more methods.

    (   R   R"   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_base_typeR   s    c           C   s.   t  j d k r' t  t d ƒ ƒ t  _ n  t  j S(   s‹  Return a pyobject whose type is unknown

    Note that two unknown objects are equal.  So for example you can
    write::

      if pyname.get_object() == get_unknown():
          print('cannot determine what this pyname holds')

    Rope could have used `None` for indicating unknown objects but
    we had to check that in many places.  So actually this method
    returns a null object.

    R   N(   R   R%   R   R'   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_unknownf   s    t   AbstractClassc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s    t  t |  ƒ j t d ƒ ƒ d  S(   NR   (   R   R)   R	   R'   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR	   {   s    c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_name~   s    c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_doc   s    c         C   s   g  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_superclasses„   s    (   R#   R$   R	   R*   R+   R,   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR)   y   s   			t   AbstractFunctionc           B   s8   e  Z d  „  Z d „  Z d „  Z e d „ Z d „  Z RS(   c         C   s    t  t |  ƒ j t d ƒ ƒ d  S(   NR   (   R   R-   R	   R'   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR	   Š   s    c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR*      s    c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR+      s    c         C   s   g  S(   N(    (   R   t   special_args(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_param_names“   s    c         C   s   t  ƒ  S(   N(   R(   (   R   t   args(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_returned_object–   s    (   R#   R$   R	   R*   R+   t   TrueR/   R1   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR-   ˆ   s
   			t   AbstractModulec           B   s&   e  Z d d  „ Z d „  Z d „  Z RS(   c         C   s    t  t |  ƒ j t d ƒ ƒ d  S(   NR   (   R   R3   R	   R'   (   R   t   doc(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR	   œ   s    c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR+   Ÿ   s    c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   get_resource¢   s    N(   R#   R$   R   R	   R+   R5   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR3   š   s   	t   PyDefinedObjectc           B   s­   e  Z d  Z d „  Z d Z e j d „  ƒ d „  ƒ Z e j d „  ƒ d „  ƒ Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s7   Python defined names that rope can access their sourcesc         C   sd   | |  _  | |  _ d  |  _ | |  _ d  |  _ |  j ƒ  j ƒ  |  _ |  j ƒ  j ƒ  |  _	 d  |  _
 d  S(   N(   t   pycoret   ast_nodeR   t   scopet   parentt   structural_attributest
   get_modulet   _get_concluded_datat   concluded_attributest
   attributest   defineds(   R   R7   R8   R:   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR	   ©   s    					c           C   s   i  S(   N(    (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   <lambda>µ   t    c         C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S(   N(   R;   R   t   _create_structural_attributes(   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   _get_structural_attributesµ   s    c           C   s   i  S(   N(    (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRA   »   RB   c         C   sE   |  j  j ƒ  d  k r8 |  j ƒ  |  j  j |  j ƒ  ƒ n  |  j  j ƒ  S(   N(   R>   t   getR   RD   t   sett   _create_concluded_attributes(   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   _get_concluded_attributes»   s    
c         C   sZ   |  j  j ƒ  d  k rM t |  j ƒ  ƒ } | j |  j ƒ  ƒ |  j  j | ƒ n  |  j  j ƒ  S(   N(   R?   RE   R   t   dictRH   t   updateRD   RF   (   R   t   result(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR
   Â   s
    c         C   sW   | |  j  ƒ  k r  |  j  ƒ  | S| |  j ƒ  k r@ |  j ƒ  | St j d | ƒ ‚ d  S(   Ns   Attribute %s not found(   RD   RH   R   R   (   R   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR   É   s    	c         C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S(   N(   R9   R   t   _create_scope(   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt	   get_scopeÑ   s    c         C   s)   |  } x | j  d  k	 r$ | j  } q	 W| S(   N(   R:   R   (   R   t   current_object(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR<   Ö   s    c         C   s„   t  |  j ƒ  j ƒ d k r€ |  j ƒ  j d } t | t j ƒ r€ t | j t j ƒ r€ | j j } |  j	 ƒ  j
 } t | | ƒ Sn  d  S(   Ni    (   t   lent   get_astt   bodyt
   isinstanceR   t   Exprt   valuet   Strt   sR<   t   codingR    (   R   t   exprt	   docstringRW   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR+   Ü   s    c         C   s#   |  j  d  k r |  j ƒ  n  |  j  S(   N(   R@   R   RD   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   _get_defined_objectså   s    c         C   sh   |  j  d  k r i  S|  j  |  j |  ƒ } x* t j |  j ƒ D] } t j | | ƒ q; W| j |  _ | j S(   N(	   t   visitor_classR   R7   R   t   get_child_nodesR8   t   walkR@   t   names(   R   t   new_visitort   child(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRC   ê   s    c         C   s   i  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRG   ó   s    c         C   s   |  j  S(   N(   R8   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRP   ö   s    c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRL   ù   s    N(   R#   R$   t   __doc__R	   R   R[   R   t   prevent_recursionRD   RH   R
   R   RM   R<   R+   RZ   RC   RG   RP   RL   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR6   ¦   s   	
											t
   PyFunctionc           B   s   e  Z d  Z RS(   s   Only a placeholder(   R#   R$   Ra   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRc   ý   s   t   PyClassc           B   s   e  Z d  Z RS(   s   Only a placeholder(   R#   R$   Ra   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRd     s   t   _ConcludedDatac           B   sD   e  Z d  „  Z d „  Z d „  Z e e e ƒ Z d „  Z d „  Z RS(   c         C   s   d  |  _ d  S(   N(   R   t   data_(   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR	     s    c         C   s   | |  _  d  S(   N(   Rf   (   R   t   data(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRF   
  s    c         C   s   |  j  S(   N(   Rf   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRE     s    c         C   s   d  |  _ d  S(   N(   R   Rg   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   _invalidate  s    c         C   s   d t  |  j ƒ d S(   Nt   <t   >(   t   strRg   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   __str__  s    (	   R#   R$   R	   RF   RE   t   propertyRg   Rh   Rl   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRe     s   				t	   _PyModulec           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s9   | |  _  g  |  _ t j |  ƒ t j |  | | d  ƒ d  S(   N(   t   resourcet   concluded_dataR3   R	   R6   R   (   R   R7   R8   Ro   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR	     s    		c         C   s   t  ƒ  } |  j j | ƒ | S(   N(   Re   Rp   t   append(   R   t   new_data(    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR=   !  s    	c         C   s"   x |  j  D] } | j ƒ  q
 Wd  S(   N(   Rp   Rh   (   R   Rg   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   _forget_concluded_data&  s    c         C   s   |  j  S(   N(   Ro   (   R   (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyR5   *  s    (   R#   R$   R	   R=   Rs   R5   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRn     s   			t   PyModulec           B   s   e  Z d  Z RS(   s   Only a placeholder(   R#   R$   Ra   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRt   .  s   t	   PyPackagec           B   s   e  Z d  Z RS(   s   Only a placeholder(   R#   R$   Ra   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRu   2  s   t   IsBeingInferredErrorc           B   s   e  Z RS(    (   R#   R$   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyRv   6  s   N(   t   rope.base.fscommandsR    t	   rope.baseR   R   R   t   objectR   R'   R(   R)   R-   R3   R6   Rc   Rd   Re   Rn   Rt   Ru   t	   RopeErrorRv   (    (    (    s2   lib/python2.7/site-packages/rope/base/pyobjects.pyt   <module>   s   M		W