ó
†Å•Zc           @   sq   d  d l  Z  d  d l Z d „  Z e Z d „  Z d „  Z d d „ Z d „  Z d e	 f d „  ƒ  YZ
 d	 „  Z d S(
   iÿÿÿÿNc            s#   d ˆ  j  ‰ ‡  ‡ f d †  } | S(   s6   A decorator that caches the return value of a functiont   _c            s;   t  |  ˆ ƒ s. t |  ˆ ˆ  |  | | Ž ƒ n  t |  ˆ ƒ S(   N(   t   hasattrt   setattrt   getattr(   t   selft   argst   kwds(   t   funct   name(    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   _wrapper
   s    (   t   __name__(   R   R	   (    (   R   R   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   saveit   s    c            s   ‡  f d †  } | S(   sD   A decorator that returns the return value of `default` in recursionsc            s&   d ˆ  j  ‰ ‡ ‡  ‡ f d †  } | S(   Ns   _calling_%s_c            sU   t  |  ˆ t ƒ r ˆ  ƒ  St |  ˆ t ƒ z ˆ |  | | Ž SWd  t |  ˆ t ƒ Xd  S(   N(   R   t   FalseR   t   True(   R   R   R   (   t   defaultR   R   (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   newfunc   s    (   R
   (   R   R   (   R   (   R   R   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt	   decorator   s    (    (   R   R   (    (   R   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   prevent_recursion   s    c            s   ‡  f d †  } | S(   s5   A decorator that ignores `exception_class` exceptionsc            s   ‡ ‡  f d †  } | S(   Nc             s)   y ˆ |  | Ž  SWn ˆ  k
 r$ n Xd  S(   N(    (   R   R   (   t   exception_classR   (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyR   '   s    (    (   R   R   (   R   (   R   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt
   _decorator&   s    (    (   R   R   (    (   R   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   ignore_exception$   s    c         C   s   |  d „ } | S(   s$   A decorator for deprecated functionsc            s2   ˆ d  k r d ˆ  j ‰ n  ‡  ‡ f d †  } | S(   Ns   %s is deprecatedc             s#   t  j ˆ t d d ƒˆ  |  | Ž  S(   Nt
   stackleveli   (   t   warningst   warnt   DeprecationWarning(   R   R   (   R   t   message(    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyR   6   s    (   t   NoneR
   (   R   R   R   (    (   R   R   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyR   2   s    (    (   R   R   (    (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt
   deprecated0   s    c            s   ‡  f d †  } | S(   s.   A caching decorator based on parameter objectsc            s   t  |  ˆ ƒ ‰  ‡  f d †  S(   Nc             s   ˆ  |  | Ž  S(   N(    (   t   at   kw(   t   cached_func(    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   <lambda>A   t    (   t   _Cached(   R   (   t   size(   R   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyR   ?   s    (    (   R"   R   (    (   R"   s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   cached=   s    R!   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  g  |  _ | |  _ d  S(   N(   R   t   cachet   count(   R   R   R%   (    (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   __init__G   s    		c         O   s‡   | | f } x' |  j  D] \ } } | | k r | Sq W|  j | | Ž  } |  j  j | | f ƒ t |  j  ƒ |  j k rƒ |  j  d =n  | S(   Ni    (   R$   R   t   appendt   lenR%   (   R   R   R   t   keyt
   cached_keyt   cached_resultt   result(    (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   __call__L   s    (   R
   t
   __module__R&   R-   (    (    (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyR!   E   s   	c         C   s‚   d d l  m } t |  | ƒ s# |  Sd |  k r< |  d 7}  n  |  j d d ƒ \ } } t | ƒ t j | } | r~ t | | ƒ S| S(   s   Returns object from stringiÿÿÿÿ(   t   string_typest   .i   (   t   rope.base.utils.pycompatR/   t
   isinstancet   rsplitt
   __import__t   syst   modulesR   (   t
   str_or_objR/   t   mod_namet   obj_namet   mod(    (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   resolveX   s    
(   R5   R   R   t   cacheitR   R   R   R   R#   t   objectR!   R;   (    (    (    s7   lib/python2.7/site-packages/rope/base/utils/__init__.pyt   <module>   s   				