o
    ¦®Øf  ã                   @   sV   d dl Z d dlmZmZ d dlmZmZ d dlmZm	Z	 e  
e¡ZG dd„ deƒZdS )é    N)ÚIterableÚList)ÚsubpÚutil)ÚPackageManagerÚUninstalledPackagesc                   @   sJ   e Zd ZdZdefdd„Zddœdd„Zd	edefd
d„Z	e
dd„ ƒZdS )ÚSnapÚsnapÚreturnc                 C   s   t t d¡ƒS )Nr	   )Úboolr   Úwhich)Úself© r   úK/usr/lib/python3/dist-packages/cloudinit/distros/package_management/snap.pyÚ	available   s   zSnap.availableF)Úforcec                C   s   d S )Nr   )r   r   r   r   r   Úupdate_package_sources   s   zSnap.update_package_sourcesÚpkglistc              	   C   sj   t  dt|ƒ¡}g }|D ]&}zt ddg| dd¡ ¡ W q tjy2   | |¡ t d|¡ Y qw |S )Nz%s=%sr	   Úinstallú=é   zFailed to 'snap install %s'!)	r   Úexpand_package_listÚlistr   ÚsplitÚProcessExecutionErrorÚappendÚLOGÚinfo)r   r   ÚfailedÚpkgr   r   r   Úinstall_packages   s   
þzSnap.install_packagesc               
   C   s”   g d¢} d }zt   | ¡}t |j¡ di ¡ d¡}W n t jy4 } zt d| |¡ W Y d }~nd }~ww |dkrAt d|¡ d S t   ddg¡ d S )N)r	   ÚgetÚsystemz-dÚrefreshÚholdz9Continuing to snap refresh. Unable to run command: %s: %sÚforeverz9Skipping snap refresh because refresh.hold is set to '%s'r	   )r   r   Ú	load_jsonÚstdoutr!   r   r   r   )ÚcommandÚ	snap_holdÚresultÚer   r   r   Úupgrade_packages$   s(   
ÿý€ÿþzSnap.upgrade_packagesN)Ú__name__Ú
__module__Ú__qualname__Únamer   r   r   r   r   r    Ústaticmethodr,   r   r   r   r   r      s    r   )ÚloggingÚtypingr   r   Ú	cloudinitr   r   Ú4cloudinit.distros.package_management.package_managerr   r   Ú	getLoggerr-   r   r   r   r   r   r   Ú<module>   s   
