ó
†Å•Zc           @   s€   d  Z  d d l Z d d l Z d d l Z d d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ	 d e	 f d	 „  ƒ  YZ
 d S(
   s,   Provides classes for persisting `PyObject`\siÿÿÿÿN(   t
   exceptionst   PyObjectToTextualc           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 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s›   For transforming `PyObject` to textual form

    This can be used for storing `PyObjects` in files.  Use
    `TextualToPyObject` for converting back.

    c         C   s   | |  _  d  S(   N(   t   project(   t   selfR   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   __init__   s    c         C   sY   | d k r d St | ƒ } y$ t |  | j d ƒ } | | ƒ SWn t k
 rT d SXd S(   s&   Transform a `PyObject` to textual formt   nonet   _to_textualt   unknownN(   R   (   R   (   t   Nonet   typet   getattrt   __name__t   AttributeError(   R   t   pyobjectt   object_typet   method(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt	   transform   s    c         C   s   |  j  | ƒ S(   N(   R   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   __call__   s    c         C   sU   t  | j ƒ  t j j j ƒ rQ |  j | j ƒ  ƒ } | d d k rM d | f S| Sd S(   Ni    t   definedt   instanceR   (   R   (   t
   isinstancet   get_typet   ropet   baset	   pyobjectst   AbstractClassR   (   R   R   t   result(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   PyObject_to_textual"   s    
c         C   s   |  j  | ƒ S(   N(   t   _defined_to_textual(   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   PyFunction_to_textual*   s    c         C   s   |  j  | ƒ S(   N(   R   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   PyClass_to_textual-   s    c         C   s`   g  } x2 | j  d  k	 r: | j d | j ƒ  ƒ | j  } q	 Wd |  j | j ƒ  ƒ d j | ƒ f S(   Ni    R   t   .(   t   parentR   t   insertt   get_namet   _get_pymodule_patht
   get_modulet   join(   R   R   t   address(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR   0   s    c         C   s   d |  j  | ƒ f S(   NR   (   R#   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   PyModule_to_textual8   s    c         C   s   d |  j  | ƒ f S(   NR   (   R#   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   PyPackage_to_textual;   s    c         C   s   d d |  j  | j ƒ f S(   Nt   builtint   list(   R   t   holding(   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   List_to_textual>   s    c         C   s(   d d |  j  | j ƒ |  j  | j ƒ f S(   NR)   t   dict(   R   t   keyst   values(   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   Dict_to_textualA   s    c         C   s<   g  | j  ƒ  D] } |  j | ƒ ^ q } t d d g | ƒ S(   NR)   t   tuple(   t   get_holding_objectsR   R1   (   R   R   R+   t   objects(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   Tuple_to_textualE   s    %c         C   s   d d |  j  | j ƒ f S(   NR)   t   set(   R   R+   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   Set_to_textualJ   s    c         C   s   d d |  j  | j ƒ f S(   NR)   t   iter(   R   R+   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   Iterator_to_textualM   s    c         C   s   d d |  j  | j ƒ f S(   NR)   t	   generator(   R   R+   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   Generator_to_textualP   s    c         C   s   d S(   NR)   t   str(   R)   R;   (    (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   Str_to_textualS   s    c         C   s   d S(   NR)   t   file(   R)   R=   (    (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   File_to_textualV   s    c         C   s   d d | j  ƒ  f S(   NR)   t   function(   R"   (   R   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   BuiltinFunction_to_textualY   s    c         C   s   |  j  | j ƒ  ƒ S(   N(   t   resource_to_patht   get_resource(   R   t   pymodule(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR#   \   s    c         C   s$   | j  |  j  k r | j S| j Sd  S(   N(   R   t   patht	   real_path(   R   t   resource(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyRA   _   s    (   R   t
   __module__t   __doc__R   R   R   R   R   R   R   R'   R(   R,   R0   R4   R6   R8   R:   R<   R>   R@   R#   RA   (    (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR   	   s*   																			t   TextualToPyObjectc           B   sÎ   e  Z d  Z e 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 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s+   For transforming textual form to `PyObject`c         C   s   | |  _  d  S(   N(   R   (   R   R   t   allow_in_project_absolutes(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR   i   s    c         C   s   |  j  | ƒ S(   N(   R   (   R   t   textual(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR   l   s    c         C   sT   | d k r d S| d } y! t |  | d ƒ } | | ƒ SWn t k
 rO d SXd S(   s3   Transform an object from textual form to `PyObject`i    t   _to_pyobjectN(   R   R
   R   (   R   RK   R	   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR   o   s    
c         C   s4   t  |  d | d d  ƒ } | d  k	 r0 | | ƒ Sd  S(   Ns   builtin_%s_to_pyobjecti   (   R
   R   (   R   RK   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_to_pyobjectz   s    c         C   s   t  j j j ƒ  S(   N(   R   R   t   builtinst   get_str(   R   RK   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_str_to_pyobject   s    c         C   s&   |  j  | d ƒ } t j j j | ƒ S(   Ni   (   R   R   R   RN   t   get_list(   R   RK   R+   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_list_to_pyobject‚   s    c         C   s<   |  j  | d ƒ } |  j  | d ƒ } t j j j | | ƒ S(   Ni   i   (   R   R   R   RN   t   get_dict(   R   RK   R.   R/   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_dict_to_pyobject†   s    c         C   sD   g  } x( | d D] } | j  |  j | ƒ ƒ q Wt j j j | Œ  S(   Ni   (   t   appendR   R   R   RN   t	   get_tuple(   R   RK   R3   R+   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_tuple_to_pyobject‹   s    c         C   s&   |  j  | d ƒ } t j j j | ƒ S(   Ni   (   R   R   R   RN   t   get_set(   R   RK   R+   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_set_to_pyobject‘   s    c         C   s&   |  j  | d ƒ } t j j j | ƒ S(   Ni   (   R   R   R   RN   t   get_iterator(   R   RK   R+   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_iter_to_pyobject•   s    c         C   s&   |  j  | d ƒ } t j j j | ƒ S(   Ni   (   R   R   R   RN   t   get_generator(   R   RK   R+   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_generator_to_pyobject™   s    c         C   s   t  j j j ƒ  S(   N(   R   R   RN   t   get_file(   R   RK   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_file_to_pyobject   s    c         C   s8   | d t  j j j k r4 t  j j j | d j ƒ  Sd  S(   Ni   (   R   R   RN   t
   get_object(   R   RK   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   builtin_function_to_pyobject    s    c         C   s   d  S(   N(   R   (   R   RK   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   unknown_to_pyobject¤   s    c         C   s   d  S(   N(   R   (   R   RK   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   none_to_pyobject§   s    c         C   s   | d } |  j  | ƒ S(   Ni   (   t   _get_pymodule(   R   RK   RD   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   _module_to_pyobjectª   s    
c         C   s¨   | d } | d j  d ƒ } |  j | ƒ } | } xo | D]g } | d  k rO d  St | t j j j ƒ rœ y | j ƒ  | j	 ƒ  } Wq  t
 j k
 r˜ d  SXq9 d  Sq9 W| S(   Ni   i   R   (   t   splitRd   R   R   R   R   R   t   PyDefinedObjectt	   get_scopeR`   R    t   NameNotFoundError(   R   RK   RD   t   namesRC   R   t   name(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt!   _hierarchical_defined_to_pyobject®   s    
c         C   s@   t  | ƒ d k s" | d d k r/ |  j | ƒ S|  j | ƒ Sd  S(   Ni   t    (   t   lenRe   Rl   (   R   RK   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   defined_to_pyobject¿   s    "c         C   s6   |  j  | d ƒ } | d  k	 r2 t j j j | ƒ Sd  S(   Ni   (   R   R   R   R   R   t   PyObject(   R   RK   R	   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   instance_to_pyobjectÅ   s    c         C   s/   |  j  | ƒ } | d  k	 r+ |  j j | ƒ Sd  S(   N(   t   path_to_resourceR   R   t   get_pymodule(   R   RD   RF   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyRd   Ê   s    c         C   s™   y} |  j  j } t j j | ƒ s1 |  j  j | ƒ S| | k sS | j | t j ƒ rW d  Sd d  l	 } | j
 j  j ƒ  j | ƒ SWn t j k
 r” d  SXd  S(   Niÿÿÿÿ(   R   R&   t   osRD   t   isabsRB   t
   startswitht   sepR   t   rope.base.projectR   t   get_no_projectR    t   ResourceNotFoundError(   R   RD   t   rootR   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyRr   Ï   s    "(   R   RG   RH   t   FalseR   R   R   RM   RP   RR   RT   RW   RY   R[   R]   R_   Ra   Rb   Rc   Re   Rl   Ro   Rq   Rd   Rr   (    (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyRI   f   s,   																			t   DOITextualToPyObjectc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sƒ  For transforming textual form to `PyObject`

    The textual form DOI uses is different from rope's standard
    textual form.  The reason is that we cannot find the needed
    information by analyzing live objects.  This class can be
    used to transform DOI textual form to `PyObject` and later
    we can convert it to standard textual form using
    `TextualToPyObject` class.

    c         C   s[   | d } t  | d ƒ } |  j | ƒ } | d  k	 rW | j ƒ  } | j | ƒ } | j Sd  S(   Ni   i   (   t   intRd   R   Rh   t   get_inner_scope_for_lineR   (   R   RK   RD   t   linenoRC   t   scopet   inner_scope(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   _function_to_pyobjecté   s    
c   	      C   sÒ   | d \ } } |  j  | ƒ } | d  k r/ d  S| j ƒ  } d  } | | j ƒ  k rf | | j ƒ  } n  | d  k	 rŽ t | t j j j	 ƒ rŽ | S|  j
 | | j ƒ  j ƒ  ƒ } | d  k	 rÎ | j | ƒ } | j Sd  S(   Ni   (   Rd   R   Rh   t	   get_namesR`   R   R   R   R   t   PyClasst   _find_occurrenceRB   t   readR   R   (	   R   RK   RD   Rk   RC   t   module_scopet	   suspectedR€   R‚   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   _class_to_pyobjectò   s     	c         C   sp   t  | ƒ d k r |  j | ƒ S| d j ƒ  rA |  j | ƒ } n |  j | ƒ } t | t j j j	 ƒ sl | Sd  S(   Ni   (
   Rn   Re   t   isdigitRƒ   RŠ   R   R   R   R   t   PyModule(   R   RK   R   (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyRo     s    c         C   sb   t  j d | d ƒ } | j d ƒ } x5 t t | ƒ ƒ D]! } | j | | ƒ r9 | d Sq9 Wd  S(   Ns   ^\s*class\s*s   \bs   
i   (   t   ret   compileRf   t   rangeRn   t   match(   R   Rk   t   sourcet   patternt   linest   i(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR†     s
    c         C   sR   d d  l  } | j j j |  j | ƒ } | d  k	 r< | } n  t t |  ƒ j | ƒ S(   Niÿÿÿÿ(	   t   rope.base.libutilsR   t   libutilst   path_relative_to_project_rootR   R   t   superR}   Rr   (   R   RD   R   t   relpath(    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyRr     s    	(   R   RG   RH   Rƒ   RŠ   Ro   R†   Rr   (    (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyR}   Ý   s   
					(   RH   Rt   R   t   rope.base.builtinsR   t	   rope.baseR    t   objectR   RI   R}   (    (    (    s5   lib/python2.7/site-packages/rope/base/oi/transform.pyt   <module>   s   ]w