o
�jΌ � @ s� d Z ddlmZ ddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlmZmZmZmZmZmZmZmZmZmZ dZe�e �Z!e�"e#��$� j%Z&dZ'dZ(dZ)d Z*d
Z+dZ,d�dd�Z-d�dd�Z.d�dd�Z/d�dd�Z0d�dd �Z1d�d"d#�Z2d�d$d%�Z3d&d'e� �iZ4d(Z5e'd)e)d*e(d+iZ6ej dkr�ej"�7� d, d- d. Z8n ej"�7� d/ d. Z8e�"ej9�:d0e8���$� Z;e�<d1�Z=e�<d2�Z>ej dkr�e=Z?ne>Z?G d3d4� d4e@�ZAG d5d6� d6eA�ZBG d7d8� d8eB�ZCG d9d:� d:eB�ZDG d;d<� d<eA�ZEG d=d>� d>eA�ZFG d?d@� d@eA�ZGG dAdB� dBeA�ZHG dCdD� dDeA�ZIG dEdF� dFeA�ZJe?fd�dJdK�ZKd�dLdM�ZL d�d�dPdQ�ZM d�d�dSdT�ZNG dUdV� dV�ZO d�d�dWdX�ZP d�d�d[d\�ZQd�d�d_d`�ZRd�dadb�ZSd�ddde�ZTd�d�dgdh�ZUd�dldm�ZVd�dpdq�ZWd�d�dwdx�ZX y r d�d�d�d��ZYd�d�d�d��ZZ � y � d�d�d�d��Z[d�d�d��Z\d�d�d��Z]d�d�d��Z^d�d�d��Z_d�d�d��Z`G d�d�� d��ZadS )�z/
Common classes and values used around relenv.
� )�annotationsN)
�IO�Any�BinaryIO�Callable�Iterable�Literal�Mapping�Optional�Union�castz0.22.8�linux�win32�darwinz10.15ZRELENV_TOOLCHAIN_CACHEz.toolchain-manifest.json�path�pathlib.Path�return�dict[str, Union[str, int]]c C s | � � }t| �� �|j|jd�S )N)�archive�size�mtime)�stat�str�resolve�st_size�st_mtime_ns)r r � r �A/opt/saltstack/salt/lib/python3.10/site-packages/relenv/common.py�_archive_metadata6 s
�r �Optional[pathlib.Path]c C sv t j�t�} | r| �� �� dkrd S t�| ��� S dt jv r d S t j�d�}|r.t�|�}ntj� � d }|d d S )NZnone�RELENV_DATAZXDG_CACHE_HOMEz.cache�relenvZ
toolchains)
�os�environ�get�TOOLCHAIN_CACHE_ENV�strip�lower�pathlib�Path�
expanduser�home)�overrideZ
cache_home�baser r r �_toolchain_cache_root? s
r. �toolchain_pathc C s | t S �N)�_TOOLCHAIN_MANIFEST)r/ r r r �_toolchain_manifest_pathP s r2 �Optional[Mapping[str, Any]]c C st | � � sd S z| jdd��
}t�|�}W d � n1 sw Y W n
ttjfy0 Y d S w t|t�s8d S |S )N�utf-8��encoding)�exists�open�json�load�OSError�JSONDecodeError�
isinstance�dict)r �handle�datar r r �_load_toolchain_manifestT s ���
rA �manifest�Mapping[str, Any]�metadata�boolc C s<