U
    c                     @   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 )NZ	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)socketZAF_UNIXZ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 krt t| _n|| _d S r   )r   	HOST_NAMEconn)r	   Z	http_connr
   r
   r   r   .   s    zLivePatchSocket.__init__c                    s&    fdd}t j|d}|  d S )Nc                     s   z4j dd j  } | jdk t|  }W n tk
rR   d t }Y nX t	
|t	|t	|t fdd d S )NZ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   ZrequestZgetresponsestatusyamlZ	safe_loadread	Exceptiondictr   get_check_stateget_patch_state	get_fixesr   Zidle_add)rdatar   r	   )r   r   r   r   r   do_call6   s    




z+LivePatchSocket.get_status.<locals>.do_call)target)	threadingZThreadstart)r	   r   r(   threadr
   r'   r   
get_status4   s    zLivePatchSocket.get_statusc                 C   sF   z*| d }t dd |D d }|d d W S  tk
r@   Y dS X d S )Nr   c                 s   s   | ]}|d  r|V  qdS runningNr
   .0kr
   r
   r   	<genexpr>L   s      z2LivePatchSocket.get_check_state.<locals>.<genexpr>	livepatchZ
checkStatezcheck-failednextr    r&   r   kernelr
   r
   r   r"   H   s    zLivePatchSocket.get_check_statec                 C   sF   z*| d }t dd |D d }|d d W S  tk
r@   Y dS X d S )Nr   c                 s   s   | ]}|d  r|V  qdS r.   r
   r0   r
   r
   r   r3   U   s      z2LivePatchSocket.get_patch_state.<locals>.<genexpr>r4   Z
patchStateunknownr5   r7   r
   r
   r   r#   Q   s    zLivePatchSocket.get_patch_statec                 C   sf   zF| d }t dd |D d }|d d }dd |dd	d
D W S  tk
r`   t  Y S X d S )Nr   c                 s   s   | ]}|d  r|V  qdS r.   r
   r0   r
   r
   r   r3   ^   s      z,LivePatchSocket.get_fixes.<locals>.<genexpr>r4   r   c                 S   s    g | ]}t |d krt|qS )r   )lenLivePatchFix)r1   fr
   r
   r   
<listcomp>`   s    z-LivePatchSocket.get_fixes.<locals>.<listcomp>z*  
)r6   replacesplitr    list)r&   r   r8   r   r
   r
   r   r$   Z   s    zLivePatchSocket.get_fixes)N)	r   r   r   r   r-   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 )r;   c                 C   s&   d}| |dk| _||d| _d S )Nz (unpatched)r>   )findpatchedr@   name)r	   textZ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   )
isinstancer;   rG   rF   NotImplemented)r	   otherr
   r
   r   __eq__m   s    
zLivePatchFix.__eq__c                 C   s   |  |}|tkr|S | S r   )rL   rJ   )r	   rK   resultr
   r
   r   __ne__r   s    
zLivePatchFix.__ne__N)r   r   r   r   rL   rN   r
   r
   r
   r   r;   f   s   r;   )Zgi.repositoryr   Zhttp.clientr   r   r*   r   r   r   r   r   objectr   r;   r
   r
   r
   r   <module>   s   :