HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/uaclient/__pycache__/snap.cpython-38.pyc
U

��Jh�@s�ddlZddlZddlmZmZmZddlmZmZm	Z	m
Z
mZmZm
Z
mZdZdddgZdZd	Zd
ZdZe	��Ze�e�e��Zedd
efdefdefdefdefg�Zed�dd�Zed�dd�Zd1eeeeeee dd�dd�Z!d2eeee dd�dd�Z"eeed�dd�Z#eed�d d!�Z$d"d#�Z%ej&d$�d%d&�Z'd3eeeed(�d)d*�Z(ed+�d,d-�Z)eed.�d/d0�Z*dS)4�N)�List�
NamedTuple�Optional)�api�apt�event_logger�
exceptions�http�messages�system�utilz
/usr/bin/snapg�?g�?g@z
proxy.httpzproxy.httpsz/run/snapd.socketz/v2/snaps/{}�SnapPackage�name�version�revision�channel�	publisher)�returncCsdt��kS)z(Returns whether or not snap is installed�snapd)rZget_installed_packages_names�rr�//usr/lib/python3/dist-packages/uaclient/snap.py�is_snapd_installed'srcCstdd�t�D��S)z3Returns whether or not snapd is installed as a snapcss|]}|jdkVqdS)rN�r)�.0�snaprrr�	<genexpr>.sz/is_snapd_installed_as_a_snap.<locals>.<genexpr>)�any�get_installed_snapsrrrr�is_snapd_installed_as_a_snap,sr)�
http_proxy�https_proxy�retry_sleepsrcCstt�st�d�dS|s|r0t�tjjdd��|rPtj	dddd�|�g|d�|rptj	dddd	�|�g|d�dS)
a
    Configure snap to use http and https proxies.

    :param http_proxy: http proxy to be used by snap. If None, it will
                       not be configured
    :param https_proxy: https proxy to be used by snap. If None, it will
                        not be configured
    :param retry_sleeps: Optional list of sleep lengths to apply between
        retries. Specifying a list of [0.5, 1] tells subp to retry twice
        on failure; sleeping half a second before the first retry and 1 second
        before the second retry.
    z6Skipping configure snap proxy. snapd is not installed.Nr)�service�setrz
proxy.http={}�r!zproxy.https={})
r�LOG�debug�event�infor
ZSETTING_SERVICE_PROXY�formatr�subp)rr r!rrr�configure_snap_proxy1s
��r+)�
protocol_typer!rcCs4t�st�d�dStjdddd�|�g|d�dS)a�
    Unset snap configuration settings for http and https proxies.

    :param protocol_type: String either http or https
    :param retry_sleeps: Optional list of sleep lengths to apply between
        retries. Specifying a list of [0.5, 1] tells subp to retry twice
        on failure; sleeping half a second before the first retry and 1 second
        before the second retry.
    z8Skipping unconfigure snap proxy. snapd is not installed.NrZunsetrzproxy.{}r$)rr%r&rr*r))r,r!rrr�unconfigure_snap_proxyVs
�r-)�keyrcCs>z t�ddd|g�\}}|��WStjk
r8YdSXdS)z�
    Gets the config value from snap.
    :param protocol: can be any valid snap config option
    :return: the value of the snap config option, or None if not set
    r�getrN)rr*�stripr�ProcessExecutionError)r.�out�_rrr�get_config_option_valueks

r4cCsZt�ddddddg�\}}|��}|dd�}g}|D]}|��d}|�t|��q6|S)Nr�listz--color�neverz	--unicode�r)rr*�
splitlines�split�append�
get_snap_info)r2r3ZappsZsnaps�linerrrrrxs�rc
Cs�t�tjjdd��zt�t���Wn4tj	k
rZ}zt
�dt|��W5d}~XYnXzt
jddddgtjd�Wntjk
r�t���YnXdS)	Nzstandard Ubunturz<Trying to install snapd. Ignoring apt-get update failure: %szapt-get�installz--assume-yesrr$)r'r(r
ZAPT_UPDATING_LISTr)rZupdate_sources_listZget_system_sources_filerZUbuntuProErrorr%r&�strrr*ZAPT_RETRIESr1ZCannotInstallSnapdError)�errr�
install_snapd�s�
�
r@)�progressc
Cstztjtdddgdd�WnTtjk
rn}z4t�dt|����r\t	�
d�|�dtj
�n�W5d}~XYnXdS)	N�waitrzseed.loadedT��capturezunknown command .*waitz9Detected version of snapd that does not have wait commandr()rr*�SNAP_CMDrr1�re�searchr>�lowerr%Zwarning�emitr
ZSNAPD_DOES_NOT_HAVE_WAIT_CMD)rAr?rrr�run_snapd_wait_cmd�s�rJF)rr�classic_confinement_supportcCs@td|g}|r|dg7}|r,|d�|�g7}tj|dtd�dS)Nr=z	--classicz--channel={}T)rDr!)rEr)rr*�SNAP_INSTALL_RETRIES)rrrK�cmdrrr�install_snap�s

�rN�rcCstjtd|gdd�dS)NZrefreshTrC)rr*rErOrrr�refresh_snap�srP)rrc	Cs�t�|�}zlt�td|�}|jdkrt|jdkrT|j�di��d�dkrTtj	|d��n |j�di��d�}tj
|d	��Wntk
r�t���YnX|j�di�}t
|�d
d�|�dd�|�d
d�|�dd�|�di��dd�d�S)NZGET��i��resultZkindzsnap-not-foundrO�message)�errorr�rrrrZusername)rrrrr)�SNAPD_SNAPS_APIr)r	Zunix_socket_request�SNAPD_SOCKET_PATH�codeZ	json_dictr/rZSnapNotInstalledErrorZUnexpectedSnapdAPIError�ConnectionRefusedErrorZSnapdAPIConnectionRefusedr
)rZurlZrespZ	error_msgZ	snap_inforrrr;�s.

���



�r;)NNN)N)NF)+ZloggingrF�typingrrrZuaclientrrrrr	r
rrrErLZHTTP_PROXY_OPTIONZHTTPS_PROXY_OPTIONrWrVZget_event_loggerr'Z	getLoggerZreplace_top_level_logger_name�__name__r%r>r
�boolrr�floatr+r-r4rr@ZProgressWrapperrJrNrPr;rrrr�<module>sd(
���
�&�
�
��