3 \��@sndZddlZddlZddlZddlZdddgZddd�Ziadd�Zddd �Z dd d�Z dd d �Z d d�Z dS)z�Cache lines from Python source files. This is intended to read lines from modules imported -- hence if a filename is not found, it will look down the module search path for a file by that name. �N�getline� clearcache� checkcachecCs:t||�}d|ko t|�knr2||dSdSdS)N��)�getlines�len)�filename�lineno�module_globals�lines�r �!/usr/lib64/python3.6/linecache.pyrs  cCsiadS)zClear the cache entirely.N)�cacher r r rrsc CsR|tkr(t|}t|�dkr(t|dSy t||�Stk rLt�gSXdS)z�Get the lines for a Python source file from the cache. Update the cache if it doesn't contain an entry for this file already.r�N)rr� updatecache� MemoryErrorr)r r �entryr r rr%s   rc Cs�|dkrttj��}n|tkr&|g}ndSx~|D]v}t|}t|�dkrJq0|\}}}}|dkr`q0ytj|�}Wntk r�t|=w0YnX||jks�||jkr0t|=q0WdS)zUDiscard cache entries that are out of date. (This is not checked upon each call!)Nr) �listr�keysr�os�stat�OSError�st_size�st_mtime)r � filenamesr�size�mtimer �fullnamerr r rr5s&   c "Cs�|tkrtt|�dkrt|=| s8|jd�r<|jd�rrNcSsg|] }|d�qS)� r )�.0�liner r r� qszupdatecache..rr!�����r%)rr� startswith�endswithrrr� lazycache� ImportError� splitlines�path�isabs�sys�join� TypeError�AttributeError�tokenize�open� readlinesrr) r r rr�basename�data�dirname�fpr rrr r rrRsV        rcCs�|tkr tt|�dkrdSdS| s:|jd�r>|jd�r>dS|r�d|kr�|jd�}|d}t|dd �}|r�|r�tj||�}|ft|<dSdS) a�Seed the cache for filename with module_globals. The module loader will be asked for the source only when getlines is called, not immediately. If there is an entry in the cache already, it is not altered. :return: True if a lazy load is registered in the cache, otherwise False. To register such a load a module loader with a get_source method must be found, the filename must be a cachable filename, and the filename must not be already cached. rTFrr � __loader__�__name__� get_sourceN)rrr&r'�get�getattr� functools�partial)r r �name�loaderr:� get_linesr r rr(�s      r()N)N)N)N) �__doc__r=r-rr1�__all__rrrrrrr(r r r r�s     A