o
    {f                     @   sh   d dl mZ d dlZd dlZd dlZd dlZdZG dd dejj	Z
G dd deZG dd	 d	eZdS )
    )GLibNz5/var/snap/canonical-livepatch/current/livepatchd.sockc                   @   s   e Zd Zdd Zdd ZdS )UHTTPConnectionc                 C   s   t jj| d || _d S )N	localhost)httpclientHTTPConnection__init__path)selfr	    r   D/usr/lib/python3/dist-packages/UpdateManager/Core/LivePatchSocket.pyr   "   s   
zUHTTPConnection.__init__c                 C   s&   t  t jt j}|| j || _d S N)socketAF_UNIXSOCK_STREAMconnectr	   sock)r
   r   r   r   r   r   &   s   
zUHTTPConnection.connectN)__name__
__module____qualname__r   r   r   r   r   r   r       s    r   c                   @   sB   e Zd ZdddZdd Zedd Zedd	 Zed
d ZdS )LivePatchSocketNc                 C   s    |d u rt t| _d S || _d S r   )r   	HOST_NAMEconn)r
   	http_connr   r   r   r   .   s   
zLivePatchSocket.__init__c                    s&    fdd}t j|d}|  d S )Nc                     s   zj dd j  } | jdk t|  }W n ty(   d t }Y nw t	
|t	|t	|t fdd d S )NGETz/status?verbose=True   Fc                      s    S r   r   r   )activecheck_statefixeson_donepatch_stater   r   <lambda>B   s    z=LivePatchSocket.get_status.<locals>.do_call.<locals>.<lambda>)r   requestgetresponsestatusyaml	safe_loadread	Exceptiondictr   get_check_stateget_patch_state	get_fixesr   idle_add)rdatar   r
   )r   r   r   r    r   do_call6   s   





z+LivePatchSocket.get_status.<locals>.do_call)target)	threadingThreadstart)r
   r   r1   threadr   r0   r   
get_status4   s   zLivePatchSocket.get_statusc                 C   @   z| d }t dd |D d }|d d W S  ty   Y dS w )Nr$   c                 s       | ]	}|d  r|V  qdS runningNr   .0kr   r   r   	<genexpr>L       z2LivePatchSocket.get_check_state.<locals>.<genexpr>	livepatch
checkStatezcheck-failednextr(   r/   r$   kernelr   r   r   r*   H      zLivePatchSocket.get_check_statec                 C   r8   )Nr$   c                 s   r9   r:   r   r<   r   r   r   r?   U   r@   z2LivePatchSocket.get_patch_state.<locals>.<genexpr>rA   
patchStateunknownrC   rE   r   r   r   r+   Q   rG   zLivePatchSocket.get_patch_statec                 C   s`   z#| d }t dd |D d }|d d }dd |dd	d
D W S  ty/   t  Y S w )Nr$   c                 s   r9   r:   r   r<   r   r   r   r?   ^   r@   z,LivePatchSocket.get_fixes.<locals>.<genexpr>rA   r   c                 S   s    g | ]}t |d krt|qS )r   )lenLivePatchFix)r=   fr   r   r   
<listcomp>`   s    z-LivePatchSocket.get_fixes.<locals>.<listcomp>z*  
)rD   replacesplitr(   list)r/   r$   rF   r   r   r   r   r,   Z   s   
zLivePatchSocket.get_fixesr   )	r   r   r   r   r7   staticmethodr*   r+   r,   r   r   r   r   r   ,   s    


r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )rK   c                 C   s&   d}| |dk| _||d| _d S )Nz (unpatched)rN   )findpatchedrP   name)r
   textpatched_patternr   r   r   r   h   s   zLivePatchFix.__init__c                 C   s&   t |tr| j|jko| j|jkS tS r   )
isinstancerK   rW   rV   NotImplemented)r
   otherr   r   r   __eq__m   s   
zLivePatchFix.__eq__c                 C   s   |  |}|tu r|S | S r   )r]   r[   )r
   r\   resultr   r   r   __ne__r   s   
zLivePatchFix.__ne__N)r   r   r   r   r]   r_   r   r   r   r   rK   f   s    rK   )gi.repositoryr   http.clientr   r   r3   r%   r   r   r   r   objectr   rK   r   r   r   r   <module>   s   :