U
    Lôwaö  ã                	   @   sv   d dl m Z d dlZd dlZd dlmZmZ ze dd¡ d dlmZ W n e	e
fk
r`   Y nX G dd„ deƒZdS )	é    )ÚgettextN)ÚGioÚGLibÚSnapdÚ1)r   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚLivepatchSnapzcanonical-livepatchc                 C   s   t  ¡ | _t ¡ | _d S )N)r   ZClientÚ_snapd_clientr   ZCancellableÚ_cancellable)Úself© r   úB/usr/lib/python3/dist-packages/softwareproperties/LivepatchSnap.pyÚ__init__)   s    
zLivepatchSnap.__init__c                 C   s   |   ¡ }|r| ¡ S tjjS )z• Get the status of canonical-livepatch snap.

        Returns:
            Snapd.SnapStatus.Enun: An enum indicating the status of the snap.
        )Ú_get_raw_snapÚ
get_statusr   Ú
SnapStatusZUNKNOWN)r
   Úsnapr   r   r   r   -   s    zLivepatchSnap.get_statusc                 C   st   |   ¡ }|tjjkr*t d | j¡¡ dS |tjjkr>|  	¡ S |tjj
krR|  ¡ S t d | j¡¡ dtdƒfS dS )zŽEnable or install canonical-livepatch snap.

        Returns:
            (True, '') if successful, (False, error_message) otherwise.
        z{} snap is already active©TÚ z{} snap is in an unknown stateFz-Canonical Livepatch snap cannot be installed.N)r   r   r   ZACTIVEÚloggingZwarningÚformatÚ	SNAP_NAMEÚ	AVAILABLEÚ_installÚ	INSTALLEDÚ_enableÚ_)r
   Zstatusr   r   r   Úenable_or_install6   s    zLivepatchSnap.enable_or_installc              
   C   sÂ   z| j j| j| jd}W n: tjk
rR } zt d |j	¡¡ d}W 5 d}~X Y nX |r\|S z*| j j
tjj| j| jd\}}|d }W n6 tjk
r¼ } zt d |j	¡¡ W 5 d}~X Y nX |S )zGet the Sanpd.Snap raw object of the canonical-livepatch snapd.

        Returns:
            Sanpd.Snap if successful, None otherwise.
        ©ÚnameÚcancellablez%Snapd.Client.get_snap_sync failed: {}N)ÚflagsZqueryr   r   z!Snapd.Client.find_sync failed: {})r   Zget_snap_syncr   r	   r   ÚErrorr   Údebugr   ÚmessageZ	find_syncr   Z	FindFlagsZ
MATCH_NAME)r
   r   ÚeZsnapsZignoredr   r   r   r   J   s(    þ
ý
$zLivepatchSnap._get_raw_snapc              
   C   sx   |   ¡ tjjkst‚z| jjtjj| j	| j
d W n< tjk
rn } zdtd |j¡ƒf W Y ¢S d}~X Y nX dS dS )z„Install canonical-livepatch snap.

        Returns:
            (True, '') if successful, (False, error_message) otherwise.
        )r    r   r   Fz0Canonical Livepatch snap cannot be installed: {}Nr   )r   r   r   r   ÚAssertionErrorr   Zinstall2_syncZInstallFlagsZNONEr   r	   r   r!   r   r   r#   ©r
   r$   r   r   r   r   f   s    ý
*zLivepatchSnap._installc              
   C   sr   |   ¡ tjjkst‚z| jj| j| jd W n< t	j
k
rh } zdtd |j¡ƒf W Y ¢S d}~X Y nX dS dS )z‡Enable the canonical-livepatch snap.

        Returns:
            (True, '') if successful, (False, error_message) otherwise.
        r   Fz.Canonical Livepatch snap cannot be enabled: {}Nr   )r   r   r   r   r%   r   Zenable_syncr   r	   r   r!   r   r   r#   r&   r   r   r   r   x   s    þ
*zLivepatchSnap._enableN)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r   r   r   #   s   	r   )r   r   r   ZgiZgi.repositoryr   r   Zrequire_versionr   ÚImportErrorÚ
ValueErrorÚobjectr   r   r   r   r   Ú<module>   s   