
    f!                        U 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d dl	Z	d dl
mZ d dlmZmZ  ej                  e      ZdZ	 dZ	 dZ	 dZ	  ej,                         dej.                  d    ej.                  d   deZ	 d	 Z e       Z	 d
ZddZi Zeeef   ed<    G d d      Z ddZ!ddZ"d Z#ddZ$ddZ%ddZ&defdZ'd Z(ddZ)ddZ*ddZ+y)    N)Path)DictAnyiX  i ' !   -   c                     t        j                         j                         dk(  r4t        t	        j
                  d      xs ddd      } | j                         S t        j                         j                         dk(  rt        dddd      } | j                         S t        t	        j
                  d      xs d	d
      } | j                         S )NwindowsLOCALAPPDATA~ParsodarwinLibraryCachesXDG_CACHE_HOMEz~/.cacheparso)platformsystemlowerr   osgetenv
expanduser)dir_s    F/var/www/cvtools/html/venv/lib/python3.12/site-packages/parso/cache.py_get_default_cache_pathr   B   s     I-BIIn-4gwG
 ??	 
		 	 	"h	.CHg6 ?? BII./=:wG??    iQ c                 8    | xs t         } | j                  d      S )z
    The path where the cache lock is stored.

    Cache lock will prevent continous cache clearing and only allow garbage
    collection once a day (can be configured in _CACHE_CLEAR_THRESHOLD).
    zPARSO-CACHE-LOCK)_default_cache_pathjoinpath
cache_paths    r   _get_cache_clear_lock_pathr"   Y   s!     22J122r   parser_cachec                       e Zd ZddZy)_NodeCacheItemNc                 h    || _         || _        |t        j                         }|| _        || _        y N)nodelinestimechange_time	last_used)selfr(   r)   r+   s       r   __init__z_NodeCacheItem.__init__h   s0    	
))+K&$r   r'   )__name__
__module____qualname__r.    r   r   r%   r%   g   s    %r   r%   c                    |j                         }|y	 t        |    |j                     }||j                  k  r%t	        j                         |_        |j                  S y# t        $ r t        | |j                  ||      cY S w xY w)z0
    Returns a module or None, if it fails.
    Nr    )	get_last_modifiedr#   pathr+   r*   r,   r(   KeyError_load_from_file_system)hashed_grammarfile_ior!   p_timemodule_cache_items        r   load_moduler<   q   s     &&(F~
(8F&222*.))+'$))) 3  
%LL!	
 	

s   A	A   "BBc                    t        | ||      }	 |t        j                  j                  |      kD  ry t	        |d      5 }t        j                          	 t        j                  |      }t        j                          	 d d d        t        | |       t        j                  d|       |j                  S # t        j                          w xY w# 1 sw Y   QxY w# t        $ r Y y w xY w)Nr    rbzpickle loaded: %s)_get_hashed_pathr   r5   getmtimeopengcdisablepickleloadenable_set_cache_itemLOGdebugr(   FileNotFoundError)r8   r5   r:   r!   fr;   s         r   r7   r7      s    !.$:NJ&BGG$$Z00*d# 	qJJL$*KKN!			 	.?@		%t, %%% 			 	  sE   "C C CB6*C?C 6CCCC 	C'&C'c                 z   t        d t        j                         D              t        k\  rqt	        j                         t
        z
  }t        j                         D ]?  \  }}|j                         D ci c]  \  }}|j                  |kD  r|| c}}t        |<   A |t        j                  | i       <   y c c}}w )Nc              3   2   K   | ]  }t        |        y wr'   )len).0vs     r   	<genexpr>z"_set_cache_item.<locals>.<genexpr>   s     
1a3q6
1s   )	sumr#   values_CACHED_SIZE_TRIGGERr*   _CACHED_FILE_MINIMUM_SURVIVALitemsr,   
setdefault)r8   r5   r;   cutoff_timekeypath_to_item_map	node_items          r   rG   rG      s    

1<..0
115II iik$AA%1%7%7%9 	!C! (8'='='?!#D)&&4 i!L	 9JLNB/5!s   4B7c                 <   |j                   }	 |d n|j                         }t        |||      }t	        | ||       |r |	 t        | |||       t        |       y y y # t        $ r d }d}Y Lw xY w# t        $ r  t        j                  d|z  t               Y y w xY w)NFr    z6Tried to save a file to %s, but got permission denied.)r5   r4   OSErrorr%   rG   _save_to_file_system_remove_cache_and_update_lockPermissionErrorwarningswarnWarning)	r8   r9   moduler)   picklingr!   r5   r:   items	            r   try_to_save_modulerg      s    <<D7+D+D+F
 &%0DND$/D$	A t
S *Z@ %x    	 MMH4O		s#   A A2 A/.A/2&BBc                     t        t        | ||      d      5 }t        j                  ||t        j                         d d d        y # 1 sw Y   y xY w)Nr    wb)rA   r?   rD   dumpHIGHEST_PROTOCOL)r8   r5   rf   r!   rK   s        r   r^   r^      sD    	~t
KT	R 6VWD!V4456 6 6s   &AAc                 f    | t         } t        j                  |        t        j	                          y r'   )r   shutilrmtreer#   clearr    s    r   clear_cacherp      s%    (

MM*r   c                    | t         } | j                         syt        j                  |       D ]  }| j	                  |      }|j                         s%t        j                  |      D ]Y  }|j                         j                  t        z   t        j                         k  s:	 t        j                  |j                         [  y# t        $ r Y jw xY w)NFT)r   existsr   listdirr   is_dirscandirstatst_atime_CACHED_FILE_MAXIMUM_SURVIVALr*   remover5   r]   )r!   inactivity_thresholddirnameversion_pathfiles        r   clear_inactive_cacher~      s     (
::j) !**73""$JJ|, 	Dyy{##&CCtyy{RIIdii(		   s   $C	CCc                     	 t        j                  | d        y# t        $ r6 	 t        | d      }|j	                          Y y# t
        t        f$ r Y Y yw xY ww xY w)NaFT)r   utimerJ   rA   closer]   IOError)r5   r}   s     r   _touchr      sb    
t   	c?DJJL  ! 			s&    	AAAAAAc                     t        |       }	 t        j                  j                  |      }||t
        z   t        j                         k  rt        |      syt        |        y y # t        $ r d }Y Gw xY w)Nr    F)	r"   r   r5   r@   rJ   _CACHE_CLEAR_THRESHOLDr*   r   r~   )r!   	lock_pathclear_lock_times      r   r_   r_      sr    *jAI''**95 	33tyy{Bi  
3 C	  s   A' 'A54A5c                     t        |      }t        j                  t        |      j	                  d            j                         }t        j                  j                  || d|d      S )Nr    zutf-8r   z.pkl)	_get_cache_directory_pathhashlibsha256strencode	hexdigestr   r5   join)r8   r5   r!   	directory	file_hashs        r   r?   r?     sL    )Z@Is4y//89CCEI77<<	.)#LMMr   c                     | t         } | j                  t              }|j                         st	        j
                  |       |S r'   )r   r   _VERSION_TAGrr   r   makedirs)r!   r   s     r   r   r     s;    (
##L1I
Ir   r'   )TN),r*   r   sysr   rB   rm   r   loggingra   rD   pathlibr   typingr   r   	getLoggerr/   rH   rU   rx   rT   _PICKLE_VERSIONpython_implementationversion_infor   r   r   r   r"   r#   r   __annotations__r%   r<   r7   rG   rg   r^   rp   r~   r   r_   r?   r   r2   r   r   <module>r      s)    	 
  	       g! '  !2 
  	 
 #H""$QQ	 ./  & 3  "d38n !% %
,&*J A26
 6,	4&Nr   