HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/spm/__pycache__/__init__.cpython-310.pyc
o

�N�g"��@s\dZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlm
Z
ddlZddlmmZddlZddlZddlZddlZddlmZz
ddlZddlZWn	eyfYnwe�e�ZdZGdd�de�Z Gdd�de �Z!Gd	d
�d
e �Z"Gdd�de �Z#Gd
d�de �Z$Gdd�d�Z%Gdd�d�Z&Gdd�de&�Z'dS)zf
This module provides the point of entry to SPM, the Salt Package Manager

.. versionadded:: 2015.8.0
�N)�compile_template)�c�d�g�l�r�s�mc@�eZdZdZdS)�SPMExceptionz-
    Base class for SPMClient exceptions
    N��__name__�
__module__�__qualname__�__doc__�rr�E/opt/saltstack/salt/lib/python3.10/site-packages/salt/spm/__init__.pyr.�rc@r
)�SPMInvocationErrorz8
    Wrong number of arguments or other usage error
    Nrrrrrr4rrc@r
)�SPMPackageErrorz;
    Problem with package file or package installation
    Nrrrrrr:rrc@r
)�SPMDatabaseErrorz%
    SPM database not found, etc
    Nrrrrrr@rrc@r
)�SPMOperationCanceledz/
    SPM install or uninstall was canceled
    NrrrrrrFrrc@s2eZdZdZdIdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdJdd�Zdd�Zdd�ZdId d!�ZdKd"d#�Zd$d%�Zd&d'�ZdId(d)�ZdLd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zejfd5d6�Zd7d8�Zd9d:�Z d;d<�Z!d=d>�Z"d?d@�Z#dAdB�Z$dCdD�Z%dEdF�Z&dGdH�Z'dS)M�	SPMClientz
    Provide an SPM Client
    NcCsp||_|stj�tj�tjd��}||_	|j	�
dd�|_|j	�
dd�|_|�
�|��d|_d|_|��dS)NZspmZspm_db_providerZsqlite3Zspm_files_provider�local)�ui�saltZconfigZ
spm_config�os�path�join�syspathsZ
CONFIG_DIR�opts�get�db_prov�
files_prov�_prep_pkgdb�_prep_pkgfiles�db_conn�
files_conn�_init)�selfrr rrr�__init__QszSPMClient.__init__cC�tj�|j�|_dS�N)r�loader�pkgdbr �r)rrrr$^�zSPMClient._prep_pkgdbcCr+r,)rr-�pkgfilesr r/rrrr%ar0zSPMClient._prep_pkgfilescCs,|js	|�d�|_|js|�d�|_dSdS)N�init)r&�
_pkgdb_funr'�
_pkgfiles_funr/rrrr(ds
�zSPMClient._initcCs|jr
|j��dSdSr,)r&�closer/rrr�_closejs�zSPMClient._closec
CsV|d}z�|dkr|�|�WdS|dkr|�|�WdS|dkr)|�|�WdS|dkr5|�|�WdS|dkrA|�|�WdS|dkrM|�|�WdS|dkrY|�|�WdS|d	kre|�|�WdS|d
krq|�|�WdS|dkr}|�	|�WdS|dkr�|�
�WdStd
|�d���ty�}z|j
�t|��WYd}~dSd}~ww)z%
        Run the SPM command
        r�installr�repo�remove�buildZupdate_repoZcreate_repo�files�info�listr5zInvalid command '�'N)�_install�_local�_repo�_remove�_build�_download_repo_metadata�_create_repo�_list_files�_info�_listr6rrr�error�str)r)�args�command�excrrr�runns:��z
SPMClient.runcO�Tztt|j|j�|�|i|��WSty)|j|j�d|��|i|��YSw�N�.)�getattrr.r"�AttributeError�r)�funcrK�kwargsrrrr3�s
 $�zSPMClient._pkgdb_funcOrOrP)rRr1r#rSrTrrrr4�s��$�zSPMClient._pkgfiles_funcC�d|�d�|d}|dkr|�|�dS|dkr|�|�dS|dkr*|�|�dStd|�d���)�(
        Process local commands
        r�packagesr;ZreposzInvalid list command 'r>N)�pop�_list_packagesrF�
_repo_listr�r)rKrLrrrrH��
zSPMClient._listcCrW)rXrr7r;r<zInvalid local command 'r>N)rZ�_local_install�_local_list_files�_local_inforr]rrrr@�r^zSPMClient._localcCs�|�d�|d}|dkr|�|�dS|dkr|�|�dS|dkr,|j|dd�dS|dkr7|�|�dS|dkrB|�|�dStd	|�d
���)z'
        Process repo commands
        rr=rY�searchT)rb�update�createzInvalid repo command 'r>N)rZr\�_repo_packagesrDrErr]rrrrA�s
zSPMClient._repoFc	Cs�g}|��}|D]2}||dD])}|d|vr9||d|dd}||d|dd}|�||||f�qqt|�D]}|j�|d�d|d�d|d	�d|d
���q?|S)z@
        List packages for one or more configured repos
        rY�r<�version�releaser�	�-��)�_get_repo_metadata�append�sortedr�status)	r)rKrbrY�
repo_metadatar8�pkgrgrhrrrre�s��4zSPMClient._repo_packagescCs"|��}|D]}|j�|�qdS)zv
        List configured repos

        This can be called either as a ``repo`` command or a ``list`` command
        N)rmrrp)r)rKrqr8rrrr\�s�zSPMClient._repo_listc 	Cs`t|�dkr
td��|j��}d|d<tjj|d�|_tj�|jd�|_tj	�
|j�}|dd�}i}g}g}g}|D]{}	|	�d	�r�|�d
|	�r�|	�
d�}
tj�
d�|
dd���}
|
d
}t�|	d�}|�|�d��}
tjj�|
�}|	||<|j||	|d�\}}}|�|�|�|�|�|�|��q<td|	�d���|j|	d�\}}}|�|�|�|�|�|�q<ttt|��}|r�|j�d�d�|���ttt|��}|r�|j�d�d�|���ttt|��}d�d�|��}|jds�|j�|�|� �}i}|D]�}||v�r|�!|||��q|D]�}||}||dv�r�d}|d|dd}|d|dd}|dd}||v�r�|||dk�rv|||dk�rZd}n*|||dk�ru||d �"d!��ru|�"d!��sud}n|||dk�r�d}nd}|du�r�tj�|jd"|�}d#�|dd|d|d$�}tj�||d|d$�}|||||d%�||<�q�q|D][}||d }||d&}||d'}tj�#|��s�t�$|�|�"d!��r�|�%d!d(�}t&�'||��q�tjj(�)|d)��}|�*|j+||ddd*��Wd�n	1�swY�q�|D]}||d'}|�!||��qdS)+z/
        Install a package from a repo
        rk�A package must be specifiedrZfile_client)ZmoptsZ	conf_filerfN�.spmZpath_existsrj�������r:bz2�/FORMULA)�pkg_name�pkg_file�formula_def�
Package file �
 not found)ryz-The following dependencies are optional:
	{}
�
	z0The following dependencies are recommended:
	{}
zInstalling packages:
	{}
�
assume_yesrYFr<rgrh�urlT�source�file://�
spm_cache_dir�{}/{}�filename)rgrhr��dest_dir�	dest_filer�r���wb)�decode_body),�lenrr �copyr�clientZCaller�callerZget_local_client�cache�Cache�endswithr4�splitrrr�tarfile�open�extractfile�utils�yaml�	safe_load�_check_all_deps�extendr5�set�filterrrp�format�confirmrm�_install_indv_pkg�
startswith�exists�makedirs�replace�shutil�copyfiler;�fopen�write�_query_http) r)rKZcaller_optsr�rYZfile_map�optional�recommendedZ
to_installrr�compsry�formula_tar�formula_refr{Zto_Zop_Zre_�msgrqZdl_list�packager8�	repo_infoZ
dl_packageZrepo_verZrepo_relZrepo_url�
cache_pathZdl_url�out_fileZoutfrrrr?�s�


�





����


��

��
���,
���zSPMClient._installcCs"t|�dkr
td��|�|�dS)z/
        Install a package from a file
        rkz A package file must be specifiedN)r�rr?)r)rKryrrrr_vszSPMClient._local_installcCsh|rtj�|�std|�d���|��|_|s<|jD]!}t|j|dt�s'q||j|dvr;|j|d|d}q|sEtd|����|�d||j	�}g}|dusX|j
dr^|�|�n|durp|j
dsptd�
|d	���g}g}d
|vs�d|vs�d|v�r/i|_|jD]}t|j|dt�s�q�|j|dD]}	||j|	<q�q�|�|�\}
}}}
t|�d
kr�td�
|d	d�|����|r�|�|�|D]}|�d|d	�}|}t|t�r�|�d�}|�|�q�|
�r|�|
�|
D]}|�d|d	�}|}t|t��r|�d�}|�|�q�|
�r/|�|
�|
D]}|�d|d	�}|}t|t��r-|�d�}�q|||fS)zP
        Starting with one package, check all packages for dependencies
        r|r}rYr<zUnable to read formula for N�forcez2Package {} already installed, not installing again�name�dependenciesr�r�rz=Cannot install {}, the following dependencies are needed:

{}�
z [Installed])rrr�rrmrq�
isinstance�dictr3r&r rnrr��
avail_pkgs�
_resolve_depsr�rr�)r)ryrzr{r8�pkg_infoZpkgs_to_installZoptional_installZrecommended_installrrZneedsZunavailr�r�Zdep_pkgr�rrrr�s�

���

���






�
zSPMClient._check_all_depsc	Cs|j�d|���t�|d�}|�|�d��}tjj�|�}dD]}||vr.t	d|�d���q |�
�}|�d|||�}|rM|jdsMt	d	�
|d
�|����|�d|||j�d|vrj|�|d|�}	|jjd
|	d�}
d|vr�t�d�|�|dd|�}	|dd}|jj|ddd
|d�dd�|jd|	d�}
tjj��r�tjj��}}
tjj�|�}|j�d|�}|j�d|�}n |j�dt���}|j�dt� ��}t!�"|�d}t#�$|�d}
|D]R}||_%||_&||_'|
|_(|�d|||||j)�}|du�r3|�*��rd}n!|�+d|j,�d|��tj-�t.�/�}|�dtj0�||j,�||j)�}|�d |||||j�q�d!|v�rNt�d"�|�|d!|�}	|jjd
|	d�d#|v�r�t�d$�|�|d#d|�}	|d#d}|jj|d#dd
|d#�dd�|jd|	d�}
|�1�d%S)&z0
        Install one individual package
        z... installing rwrx)rgrh�summary�descriptionzInvalid package: the z was not foundZcheck_existingr�z,Not installing {} due to existing files:

{}r�Zregister_pkgZpre_local_statez
state.high)�dataZ
pre_tgt_statezExecuting pre_tgt_state scriptr��tgt�tgt_type�glob�timeout)r�Zfunr�Ztimoutr�Zspm_uidZspm_gidrZinstall_fileFr�zInstalling file z to �	hash_fileZ
register_fileZpost_local_statez!Executing post_local_state scriptZpost_tgt_statezExecuting post_tgt_state scriptN)2rrpr�r�r�rr�r�r�r�
getmembersr4r r�rr3r&�_renderr��cmd�log�debugr�Zrun_jobr!�platformZ
is_windowsZ
win_functionsZget_current_userZget_sid_from_namer�getuid�getgid�pwd�getpwuid�grp�getgrgid�uid�gid�uname�gnamer'�isdir�_verboser��trace�hashlib�sha1rr5)r)ryrzr�r�r{�field�	pkg_filesZexisting_filesZ	high_data�retr�r�r�Z	uname_sidr�r��member�out_path�digest�	file_hashrrrr��s���
��

�
�

����




�zSPMClient._install_indv_pkgcCs�|j|j�d�|d�}t|t�si}i}g}d|vr&|ddur&d|d<|�dd��d�D]'}|��}|s8q/|j|j�d�|�rDq/||jvrQ|j|||<q/|�|�q/|�dd��d�}|�dd��d�}g}|�	�}	t
|	�d	kr�tt|	�
���}|	|=||vr�qo|�|�|j�||i�}
|
�d
i�}|�|i��di�}|�|�\}
}}}|�|
�tt||��}tt||��}tt||��}t
|	�d	ksu||||fS)zk
        Return a list of packages which need to be installed, to resolve all
        dependencies
        z.infor�r�Nr��,r�r�rrYr<)r.r"r�r�r!r��stripr�rnr�r��next�iter�keysrqr�rcror�)r)r{r�Zcan_hasZcant_hasZdepr�r�Z	inspectedZ
to_inspectZ
repo_contentsZ
repo_packagesZdep_formulaZalso_canZ	also_cantZopt_depZrec_deprrrr�@sH



�zSPMClient._resolve_depsc	Csg}tj�|jd�r|�|jd�tjj�d�|jd��D]\}}}|D]
}|�	d�s/q'|�|�q'q |D]I}d�|jd|�}tjj
�|��/}	tjj�
|	�}
|
D]}|
|�dd�duraqT|durj||krjqT|||
|�qTWd�n1s|wYq8dS)	zv
        Traverse through all repo files and apply the functionality provided in
        the callback to them
        Zspm_repos_configz{}.dz.repoz{}.d/{}�enabledTFN)rrr�r rnrr��os_walkr�r�r;r�r�r�r!)r)�callback�	repo_nameZ
repo_files�dirpath�dirnames�	filenamesZ	repo_file�	repo_pathZrphZ	repo_datar8rrr�_traverse_reposss2�
�����zSPMClient._traverse_reposTc
CsDd}d}zGd|vrBzd|vrtj|d|d|d|d�}n	td�|d���Wn"tyA}z|j�t|��WYd}~n
d}~wwtj|d|d�}Wntye}z|j�t|��WYd}~nd}~wwz |r�d|vr{tjj	�
|�d	d
��}W|S|�d	�}W|Std��ty�}z|j�t|��WYd}~|Sd}~ww)z)
        Download files via http
        N�username�passwordT)�textr�r�r�z8Auth defined, but password is not set for username: '{}')r�r�zSPM-METADATAr�z{}z1Response is empty, please check for Errors above.)�http�queryrr�rrIrJrr�r�r�r!)r)�dl_pathr�r�r��responserMrrrr��sT����
���������zSPMClient._query_httpcsLtj��j�jd����fdd�}t|�dkr|dnd}��||�dS)z<
        Connect to all repos and download metadata
        r�cs�d�|d�}|�d�r2|�dd�}tjj�|d��}tjj�|�}Wd�n1s,wYn��	||�}��
d||�dS)Nz{}/SPM-METADATAr�r�r�rrQ)r�r�r�rr�r;r�r�r�r��store)r8r�r�Zrpm�metadata�r�r)rr�_update_metadata�s
��z;SPMClient._download_repo_metadata.<locals>._update_metadatarfN)rr�r�r r�r�)r)rKr�r�rr�rrD�sz!SPMClient._download_repo_metadatacs8tj��j�jd��i����fdd�}��|��S)z-
        Return cached repo metadata
        r�cs>��d|�durt�d���i�|��d|�d��|<dS)NrQzUpdating repo metadata)r<rY)�updatedr��warningrDZfetch)r8r��r�r�r)rr�_read_metadata�s


�z4SPMClient._get_repo_metadata.<locals>._read_metadata)rr�r�r r�)r)r�rr�rrm�s


zSPMClient._get_repo_metadatacCslt|�dkr
td��|ddkrt��}n|d}g}i}tjj�|�D]�\}}}|D]�}|�d�s3q+|�d|��}	t	�
|	�s@q+|�d�}
d�|
dd	��}t	�
|	d
�}|�|�d��}
tjj�|
���}d}||vr�||d
}|}t|d�t|d�kr�t|d�t|d�kr�d}nt|d�t|d�kr�d}|dur�t�d||d|d|d|d�|�||d�nt�d||d|d|d|d�|�|�|dur�t�d|d|d|d�d
|��i||<|||d<q+q$|�d�}tjj�|d��}tjjj||dddd�Wd�n	1�swYt�d|�|D]�}|jddk�r9t�d|��q'|jddk�r�tj�d��sez
t�d�t�d |�Wnt�ydt�d!�Ynwz	t� |d�W�q't�yt�d"|�Y�q'w|jdd#k�r�zt�!|�t�d$|�W�q't�y�t�d%|�Y�q't�y�Y�q'w�q'dS)&z�
        Scan a directory and create an SPM-METADATA file which describes
        all of the SPM files in that directory.
        rkz'A path to a directory must be specifiedrfrQrt�/rjNrurwrxTr<rgrhFz2%s %s-%s had been added, but %s-%s will replace itr�z0%s %s-%s has been found, but is older than %s-%szadding %s-%s-%s to the repor�z
/SPM-METADATA�w�)�indent�	canonicalZdefault_flow_stylezWrote %sZ
spm_repo_dups�ignorez %s will be left in the directory�archivez	./archivez%s has been archivedz"Unable to create archive directoryzUnable to archive %s�deletez%s has been deletedzUnable to delete %s)"r�rr�getcwdrr�rr�r�r��
is_tarfiler�rr�r�r�r��read�intr�r�rnr�r;r�Z	safe_dumpr r�r��OSErrorrIr��mover9)r)rKr�Z	old_filesrqr�r�r�Zspm_fileZspm_pathr�Zspm_nameZspm_fhZformula_handle�formula_confZuse_formulaZcur_infoZnew_infoZmetadata_filenameZmfh�file_rrrrE�s�



���
����
=��	
��
���zSPMClient._create_repoc
Cs�t|�dkr
td��|dd�}d�d�|��}|jds#|j�|�|D]�}|j�d|���|�d	|jd
�sDt	d�|jd
|���|�d||j
�}|durXtd
|�d���|�d||j
�}g}|D]U}|�d|d�rv|�|d�qdt
��}	|�d|d|	|j�}
|d|
kr�|�d|d��tj�|�d|d|j�n|�d|d��tj�|�d|d||j
�qdt|dd�D]0}|�d|||j
�z|�d|��tj�t�|�Wq�ty�|�d|�d�tj�Yq�w|�d||j
�q%dS)z"
        Remove a package
        rkrsrfNzRemoving packages:
	{}r~rz
... removing Z	db_existsZspm_dbz#No database at {}, cannot remove {}r<zPackage � not installed�
list_filesZ
path_isdirrr�zRemoving file Zremove_filezNot removing file Zunregister_fileT)�reversezRemoving directory zCannot remove directory z, probably not emptyZunregister_pkg)r�rr�rr rr�rpr3rr&r4rnr�r�r'r�r�r�ror�rmdirr	)r)rKrYr�r�r�r;�dirsZfilerowr�r�Zdir_rrrrBWsZ

���
���zSPMClient._removecCs*|j�dd�dur|j�|�||�dS)z-
        Display verbose information
        �verboseFTN)r r!rrp)r)r��levelrrrr��szSPMClient._verbosecCs�t|�dkr
td��|d}tj�|�std|�d���|�d�}d�|dd���d	�}|d
}t�|d�}|�	|�d��}t
jj�
|�}|j�|�|��|��dS)
z.
        List info for a package file
        rk�$A package filename must be specifiedrfr|r}rjNrur�rvrwrx)r�rrrr�r�rr�r�r�rr�r�r�rrp�	_get_infor5)r)rKrzr�r�r�r�r{rrrra�s
zSPMClient._local_infocCsZt|�dkr
td��|d}|�d||j�}|dur"td|�d���|j�|�|��dS)z)
        List info for a package
        rkrsrfr<N�package r
)r�rr3r&rrrpr)r)rKr�r�rrrrG�szSPMClient._infocCs>d}|D]
}||vrd||<qd|vrd|d<djdi|��S)z"
        Get package info
        )
r�rZ	os_familyrhrgr�Zos_dependenciesZos_family_dependenciesr�r��NoneZ	installedz
Not installeda#Name: {name}
Version: {version}
Release: {release}
Install Date: {installed}
Supported OSes: {os}
Supported OS families: {os_family}
Dependencies: {dependencies}
OS Dependencies: {os_dependencies}
OS Family Dependencies: {os_family_dependencies}
Summary: {summary}
Description:
{description}Nr)r�)r)r{�fields�itemrrrr�s����zSPMClient._get_infocCsht|�dkr
td��|d}tj�|�std|�d���t�|d�}|��}|D]	}|j	�
|j�q(dS)z/
        List files for a package file
        rkrrfr|r}rwN)r�rrrr�rr�r�r�rrpr�)r)rKrzr�r�r�rrrr`�s�zSPMClient._local_list_filescCsF|�d|j�}|D]}|jdrd�|�}n|d}|j�|�q	dS)�5
        List files for an installed package
        Z
list_packagesrr�rN)r3r&r rrrp)r)rKrYr��
status_msgrrrr[�s
�zSPMClient._list_packagescCs|t|�dkr
td��|d}|�d||j�}|dur"td|�d���|D]}|jdr1d	�|�}n|d
}|j�|�q$dS)rrkz A package name must be specifiedrvrNrr
rr�r)	r�rr3r&rr rrrp)r)rKr�r;rrrrrrFs
�zSPMClient._list_filescCsBt|�dkr
td��|d�d�|_|j�d�}|d|_|j�d�}tj�|�s1t	d|�d���t
jj�
|��}t
jj�|�}Wd	�n1sJwYd
D]}||vr_t	d|�d���qQd
�|jd|d|d|d�}tj�|jd�s�t�|jd�||_t�|d�}d|vr�t|dt�r�t�|d�}	tj|	_|�|	�|dD]+}
tD]}|
�|�d��r�|
�|�d��}
q�|�tj� t�!�|
�tj� |d|
��q�n;z|j||d|j"d�|j|j|d|j"d�Wn!t#�y|j||d|j"d�|j|j|d|j"d�Ynw|�$�|j%�&d|���d	S)z!
        Build a package
        rkz%A path to a formula must be specifiedrfr�rvrxz
Formula file r}N)r�rgrhr�r�zInvalid package: a z must be definedz{}/{}-{}-{}.spmZ
spm_build_dirr�rgrhzw:bz2r;�|)r�)ZexcludezBuilt package )'r�r�rstrip�abspathr��relpathrrr�rrr�r;r�r�r�r�r �mkdirrr�r�r�r=�TarInfo�DIRTYPE�type�addfile�
FILE_TYPESr��lstrip�addrr�_exclude�	TypeErrorr5rrp)r)rKr�Zformula_pathZfp_rr�r�r�Zformula_dirrZftyperrrrCsr
���
����
��
��zSPMClient._buildcCs`t|t�rdS|jdD]!}|j�d�|jd|��rdS|j�|j�d|���r-dSq|S)z'
        Exclude based on opts
        NZspm_build_excluder�r�r�)r�rJr r�r�r�rr)r)r�rrrrr(_s
�zSPMClient._excludecCsp|�d|j�dd��}tj�|ji�}|j�d�}|j�d�}|��}|j��|d<td||||fd|i|��S)zP
        Render a [pre|post]_local_state or [pre|post]_tgt_state script
        �rendererz
jinja|yamlZrenderer_blacklistZrenderer_whitelistr z:string:Z
input_data)r!r rr-Zrenderr�r)r)r�r{r*ZrendZ	blacklistZ	whitelistZ
template_varsrrrr�ms"���zSPMClient._renderr,)F)NNN)T)(r
rrrr*r$r%r(r6rNr3r4rHr@rArer\r?r_r�r�r�r�r�rDrmrErBr�r�r�rarGrr`r[rFrCr(r�rrrrrLsJ

!



	Qp
3
,t=&Hrc@�(eZdZdZdd�Zdd�Zdd�ZdS)	�SPMUserInterfacez:
    Handle user interaction with an SPMClient object
    cC�t��)z4
        Report an SPMClient status message
        ��NotImplementedError�r)r�rrrrp��zSPMUserInterface.statuscCr-)z-
        Report an SPM error message
        r.r0rrrrI�r1zSPMUserInterface.errorcCr-)z�
        Get confirmation from the user before performing an SPMClient action.
        Return if the action is confirmed, or raise SPMOperationCanceled(<msg>)
        if canceled.
        r.)r)�actionrrrr��szSPMUserInterface.confirmN�r
rrrrprIr�rrrrr,�s
r,c@r+)	�SPMCmdlineInterfacez-
    Command-line interface to SPMClient
    cCst|�dSr,)�printr0rrrrp�szSPMCmdlineInterface.statuscCst|tjd�dS)N)�file)r5�sys�stderrr0rrrrI�szSPMCmdlineInterface.errorcCs*t|�td�}|���d�std��dS)NzProceed? [N/y] �yZcanceled)r5�input�lowerr�r)r)r2�resrrrr��s
�zSPMCmdlineInterface.confirmNr3rrrrr4�s
r4)(rr��loggingrr�r7r�Z
salt.cacherZsalt.clientZsalt.configZsalt.loaderZ
salt.syspathsrZsalt.utils.filesZsalt.utils.httpr�r�Zsalt.utils.pathZsalt.utils.platformZsalt.utils.win_functionsZsalt.utils.yamlZ
salt.templaterr�r��ImportError�	getLoggerr
r�r%�	Exceptionrrrrrrr,r4rrrr�<module>sV�

?