ó
MšV]c           @   sj  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z y d  d l	 Z
 Wn d  d l
 Z
 n Xd  d l m Z e j e ƒ Z d Z d e j ƒ  e j d e j d e f Z d „  Z e ƒ  Z i  Z d e f d	 „  ƒ  YZ d d
 „ Z d d „ Z e d d „ Z d d „ Z d d „ Z d d „ Z  d d „ Z! d S(   iÿÿÿÿN(   t   FileNotFoundErrori    s
   %s-%s%s-%si    i   c          C   s¬   t  j ƒ  j ƒ  d k rB t j j t j d ƒ p3 d d d ƒ }  nZ t  j ƒ  j ƒ  d k rx t j j d d d d ƒ }  n$ t j j t j d ƒ p“ d	 d
 ƒ }  t j j |  ƒ S(   Nt   windowst   LOCALAPPDATAt   ~t   Parsot   darwint   Libraryt   Cachest   XDG_CACHE_HOMEs   ~/.cachet   parso(   t   platformt   systemt   lowert   ost   patht   joint   getenvt
   expanduser(   t   dir_(    (    s*   lib/python2.7/site-packages/parso/cache.pyt   _get_default_cache_path1   s    *$t   _NodeCacheItemc           B   s   e  Z d d  „ Z RS(   c         C   s:   | |  _  | |  _ | d  k r- t j ƒ  } n  | |  _ d  S(   N(   t   nodet   linest   Nonet   timet   change_time(   t   selfR   R   R   (    (    s*   lib/python2.7/site-packages/parso/cache.pyt   __init__I   s
    		N(   t   __name__t
   __module__R   R   (    (    (    s*   lib/python2.7/site-packages/parso/cache.pyR   H   s   c         C   su   | j  ƒ  } | d k r d Sy+ t |  | j } | | j k rF | j SWn' t k
 rp t |  | j | d | ƒSXd S(   s0   
    Returns a module or None, if it fails.
    t
   cache_pathN(   t   get_last_modifiedR   t   parser_cacheR   R   R   t   KeyErrort   _load_from_file_system(   t   hashed_grammart   file_ioR   t   p_timet   module_cache_item(    (    s*   lib/python2.7/site-packages/parso/cache.pyt   load_moduleQ   s    c         C   sö   t  |  | d | ƒ} y› y  | t j j | ƒ k r7 d  SWn1 t k
 rk } | j t j k re t ‚ ql ‚  n Xt	 | d ƒ 2 } t
 j ƒ  z t j | ƒ } Wd  t
 j ƒ  XWd  QXWn t k
 rÄ d  SX| t j |  i  ƒ | <t j d | ƒ | j Sd  S(   NR   t   rbs   pickle loaded: %s(   t   _get_hashed_pathR   R   t   getmtimeR   t   OSErrort   errnot   ENOENTR    t   opent   gct   disablet   picklet   loadt   enableR    t
   setdefaultt   LOGt   debugR   (   R#   R   R%   R   t   et   fR&   (    (    s*   lib/python2.7/site-packages/parso/cache.pyR"   f   s&    	
c   	      C   s¢   | j  } y" | d  k r d  n	 | j ƒ  } Wn t k
 rJ d  } t } n Xt | | | ƒ } | t j |  i  ƒ | <| rž | d  k	 rž t |  | | d | ƒn  d  S(   NR   (	   R   R   R   R+   t   FalseR   R    R4   t   _save_to_file_system(	   R#   R$   t   moduleR   t   picklingR   R   R%   t   item(    (    s*   lib/python2.7/site-packages/parso/cache.pyt   save_module‚   s    	"
c         C   sA   t  t |  | d | ƒd ƒ  } t j | | t j ƒ Wd  QXd  S(   NR   t   wb(   R.   R)   R1   t   dumpt   HIGHEST_PROTOCOL(   R#   R   R=   R   R8   (    (    s*   lib/python2.7/site-packages/parso/cache.pyR:      s    !c         C   s0   |  d  k r t }  n  t j |  ƒ t j ƒ  d  S(   N(   R   t   _default_cache_patht   shutilt   rmtreeR    t   clear(   R   (    (    s*   lib/python2.7/site-packages/parso/cache.pyt   clear_cache•   s    	c         C   sJ   t  d | ƒ } t j | j d ƒ ƒ j ƒ  } t j j | d |  | f ƒ S(   NR   s   utf-8s	   %s-%s.pkl(   t   _get_cache_directory_patht   hashlibt   sha256t   encodet	   hexdigestR   R   R   (   R#   R   R   t	   directoryt	   file_hash(    (    s*   lib/python2.7/site-packages/parso/cache.pyR)   œ   s    c         C   sP   |  d  k r t }  n  t j j |  t ƒ } t j j | ƒ sL t j | ƒ n  | S(   N(   R   RB   R   R   R   t   _VERSION_TAGt   existst   makedirs(   R   RL   (    (    s*   lib/python2.7/site-packages/parso/cache.pyRG   £   s    	("   R   R   t   sysRH   R/   RC   R
   R,   t   loggingt   cPickleR1   t   parso._compatibilityR    t	   getLoggerR   R5   t   _PICKLE_VERSIONt   python_implementationt   version_infoRN   R   RB   R    t   objectR   R   R'   R"   t   TrueR>   R:   RF   R)   RG   (    (    (    s*   lib/python2.7/site-packages/parso/cache.pyt   <module>   s>   	


	
	
	