HEX
Server: LiteSpeed
System: Linux srv146.niagahoster.com 4.18.0-553.30.1.lve.el8.x86_64 #1 SMP Tue Dec 3 01:21:19 UTC 2024 x86_64
User: kodi1989 (1633)
PHP: 8.1.34
Disabled: symlink,shell_exec,exec,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,show_source,pcntl_exec
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/tldextract/__pycache__/cache.cpython-37.pyc
B

��fV"�@s�dZddlmZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZddl
mZddlmZmZddlZddlmZe�e�Zdaed	�Zd
d�dd
�Zd
d�dd�ZGdd�d�Zdd
dd
d�dd�Zdd
d�dd�Zd
dd�dd�ZdS)zHelpers.�)�annotationsN)�Callable�Hashable�Iterable)�md5)�TypeVar�cast)�FileLockF�T�str)�returncCs�yddlm}Wntk
r(d}YnXd|}tj�tj�}ttj�	d���
�dd�}d�d	d
�tjdd�D��}||||g}d�|�}|S)
z�
    Generate an identifier unique to the python version, tldextract version, and python instance.

    This will prevent interference between virtualenvs and issues that might arise when installing
    a new version of tldextract
    r)�version�devztldextract-zutf-8N��.cSsg|]}t|��qS�)r)�.0�vrr�A/opt/alt/python37/lib/python3.7/site-packages/tldextract/cache.py�
<listcomp>,sz-get_pkg_unique_identifier.<locals>.<listcomp>����__)
Ztldextract._versionr
�ImportError�os�path�basename�sys�prefixr�encode�	hexdigest�join�version_info)r
Ztldextract_versionZpython_env_nameZpython_binary_path_short_hash�python_versionZidentifier_partsZpkg_identifierrrr�get_pkg_unique_identifiers

r#cCs|tj�dd�}|dk	r|St�dd�}|dkrLt�dd�}|rLtj�|d�}|dk	rftj�|dt��Stj�tj�t�d�S)z�
    Get a cache dir that we have permission to write to.

    Try to follow the XDG standard, but if that doesn't work fallback to the package directory
    http://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
    ZTLDEXTRACT_CACHEN�XDG_CACHE_HOME�HOMEz.cachezpython-tldextractz.suffix_cache/)	r�environ�get�getenvrr r#�dirname�__file__)�	cache_dirZxdg_cache_homeZ	user_homerrr�
get_cache_dir8sr,c@s�eZdZdZd$ddd�dd�Zdd	d
d�dd
�Zdd	d
dd�dd�Zdd�dd�Zdd	dd�dd�Zdddddd�dd�Z	ddddd �d!d"�Z
d#S)%�	DiskCachez0Disk _cache that only works for jsonable values.�z
str | None�int)r+�lock_timeoutcCs0t|�|_tj�t|�pd�|_||_d|_dS)N�z.tldextract.json)	�bool�enabledrr�
expanduserrr+r0�file_ext)�selfr+r0rrr�__init__Us
zDiskCache.__init__rzstr | dict[str, Hashable]�object)�	namespace�keyrc
Cs�|jstd��|�||�}tj�|�s>td|dt|���yt|��}t�	|�SQRXWnNt
tfk
r�}z,t�
d||�td|dt|��d�Wdd}~XYnXdS)z%Retrieve a value from the disk cache.zCache is disabledznamespace: z key: Nz#error reading TLD cache file %s: %s)r3�KeyError�_key_to_cachefile_pathrr�isfile�repr�open�json�load�OSError�
ValueError�LOG�error)r6r9r:�cache_filepath�
cache_file�excrrrr']s
z
DiskCache.get�None)r9r:�valuerc
Cs�|js
dS|�||�}y.t|�t|d��}t�||�WdQRXWn<tk
r�}ztspt�	d||||�daWdd}~XYnXdS)zSet a value in the disk cache.N�wz�unable to cache %s.%s in %s. This could refresh the Public Suffix List over HTTP every app startup. Construct your `TLDExtract` with a writable `cache_dir` or set `cache_dir=None` to silence this warning. %sT)
r3r<�	_make_dirr?r@�dumprB�_DID_LOG_UNABLE_TO_CACHErD�warning)r6r9r:rJrFrG�ioerrr�setms z
DiskCache.set)rcCs�x�t�|j�D]�\}}}x�|D]|}|�|j�s>|�|jd�ryt�tj�||��Wqtk
rjYqt	k
r�}z|j
t
jkr��Wdd}~XYqXqWqWdS)zClear the disk cache.z.lockN)r�walkr+�endswithr5�unlinkrr �FileNotFoundErrorrB�errno�ENOENT)r6�root�_�files�filenamerHrrr�clear�s
zDiskCache.clearcCs0tj�|j|�}t|�}tj�|||j�}|S)N)rrr r+�_make_cache_keyr5)r6r9r:�namespace_pathZ
hashed_key�
cache_pathrrrr<�sz DiskCache._key_to_cachefile_pathzCallable[..., T]zdict[str, Hashable]z
Iterable[str]r
)�funcr9�kwargs�hashed_argnamesrc

s�|js|f|�S�fdd�|��D�}|�||�}|d}yt|�WnBtk
r�}z$tsrt�d||||�da|f|�Sd}~XYnXt||j	d��Nyt
t|j||d��}	Wn.t
k
r�|f|�}	|j|||	d	�YnX|	SQRXdS)
z!Get a url but cache the response.csi|]\}}|�kr||�qSrr)r�kr)rbrr�
<dictcomp>�sz+DiskCache.run_and_cache.<locals>.<dictcomp>z.lockz�unable to cache %s.%s in %s. This could refresh the Public Suffix List over HTTP every app startup. Construct your `TLDExtract` with a writable `cache_dir` or set `cache_dir=None` to silence this warning. %sTN)�timeout)r9r:)r9r:rJ)r3�itemsr<rLrBrNrDrOr	r0rr
r'r;rQ)
r6r`r9rarbZkey_argsrFZ	lock_pathrP�resultr)rbr�
run_and_cache�s0

zDiskCache.run_and_cachezrequests.Sessionzfloat | int | None)�session�urlrercCs|jtd|||d�dgd�S)z!Get a url but cache the response.�urls)rirjrerj)r`r9rarb)rh�
_fetch_url)r6rirjrerrr�cached_fetch_url�s

zDiskCache.cached_fetch_urlN)r.)�__name__�
__module__�__qualname__�__doc__r7r'rQr\r<rhrmrrrrr-Rs
.r-zrequests.Sessionz
int | None)rirjrercCs4|j||d�}|��|j}t|t�s0t|d�}|S)N)rezutf-8)r'�raise_for_status�text�
isinstancer)rirjre�responsersrrrrl�s

rlzstr | dict[str, Hashable])�inputsrcCst|�}t|�d����S)N�utf8)r>rrr)rvr:rrrr]�sr]rI)r[rc
Cs`tj�tj�|��s\yt�tj�|��Wn0tk
rZ}z|jtjkrJ�Wdd}~XYnXdS)z-Make a directory if it doesn't already exist.N)rr�existsr)�makedirsrBrV�EEXIST)r[rHrrrrL�srL) rq�
__future__rrVr@�loggingr�os.pathr�collections.abcrrr�hashlibr�typingrr�requestsZfilelockr	�	getLoggerrnrDrNr
r#r,r-rlr]rLrrrr�<module>s,