
    9qf                         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ej                  j                        Z
 G d de      Z G d d	e      Zy)
    )GLibNz5/var/snap/canonical-livepatch/current/livepatchd.sockc                       e Zd Zd Zd Zy)UHTTPConnectionc                 f    t         j                  j                  j                  | d       || _        y )N	localhost)httpclientHTTPConnection__init__path)selfr   s     D/usr/lib/python3/dist-packages/UpdateManager/Core/LivePatchSocket.pyr   zUHTTPConnection.__init__!   s#    ""++D+>	    c                     t        j                   t         j                  t         j                        }|j                  | j                         || _        y N)socketAF_UNIXSOCK_STREAMconnectr   sock)r   r   s     r   r   zUHTTPConnection.connect%   s3    }}V^^V-?-?@TYY	r   N)__name__
__module____qualname__r   r    r   r   r   r       s    r   r   c                   J    e Zd ZddZd Zed        Zed        Zed        Zy)LivePatchSocketNc                 @    |t        t              | _        y || _        y r   )r   	HOST_NAMEconn)r   	http_conns     r   r   zLivePatchSocket.__init__,   s    '	2DI!DIr   c                 `      fd}t        j                  |      }|j                          y )Nc                     	 j                   j                  dd       j                   j                         } | j                  dk(  t	        j
                  | j                               }t        j                  |      t        j                  |      t        j                  |      t        j                  fd       y # t        $ r dt               }Y sw xY w)NGETz/status?verbose=True   Fc                              S r   r   )activecheck_statefixeson_donepatch_states   r   <lambda>z=LivePatchSocket.get_status.<locals>.do_call.<locals>.<lambda>@   s    [%H r   )r   requestgetresponsestatusyaml	safe_loadread	Exceptiondictr   get_check_stateget_patch_state	get_fixesr   idle_add)rdatar&   r'   r(   r*   r)   r   s     @@@@r   do_callz+LivePatchSocket.get_status.<locals>.do_call3   s    		!!%)?@II))+S~~affh/ *99$?K)99$?K#--d3EMMH  vs   A(C C#"C#)target)	threadingThreadstart)r   r)   r:   threads   ``  r   
get_statuszLivePatchSocket.get_status2   s#    	  !!1r   c                 b    	 | d   }t        d |D        d       }|d   d   S # t        $ r Y yw xY w)Nr.   c              3   ,   K   | ]  }|d    s	|  ywrunningNr   .0ks     r   	<genexpr>z2LivePatchSocket.get_check_state.<locals>.<genexpr>J        =)1=   
	livepatch
checkStatezcheck-failednextr2   r9   r.   kernels      r   r4   zLivePatchSocket.get_check_stateF   sD    	"(^F=f=tDF+&|44 	"!	"   " 	..c                 b    	 | d   }t        d |D        d       }|d   d   S # t        $ r Y yw xY w)Nr.   c              3   ,   K   | ]  }|d    s	|  ywrC   r   rE   s     r   rH   z2LivePatchSocket.get_patch_state.<locals>.<genexpr>S   rI   rJ   rK   
patchStateunknownrM   rO   s      r   r5   zLivePatchSocket.get_patch_stateO   sD    	(^F=f=tDF+&|44 		rQ   c                    	 | d   }t        d |D        d       }|d   d   }|j                  dd      j                  d      D cg c]  }t        |      dkD  rt	        |       c}S c c}w # t
        $ r t               cY S w xY w)	Nr.   c              3   ,   K   | ]  }|d    s	|  ywrC   r   rE   s     r   rH   z,LivePatchSocket.get_fixes.<locals>.<genexpr>\   rI   rJ   rK   r(   z*  
r   )rN   replacesplitlenLivePatchFixr2   list)r9   r.   rP   r(   fs        r   r6   zLivePatchSocket.get_fixesX   s    
	(^F=f=tDF;'0E tR066t<q6A: Q  
  	6M	s$   AA-  A(%A- (A- -BBr   )	r   r   r   r   r@   staticmethodr4   r5   r6   r   r   r   r   r   +   sH    "( " "    r   r   c                       e Zd Zd Zd Zd Zy)r]   c                 h    d}|j                  |      dk(  | _        |j                  |d      | _        y )Nz (unpatched)rX   )findpatchedrZ   name)r   textpatched_patterns      r   r   zLivePatchFix.__init__h   s.    (yy1R7LL"5	r   c                     t        |t              r4| j                  |j                  k(  xr | j                  |j                  k(  S t        S r   )
isinstancer]   rf   re   NotImplemented)r   others     r   __eq__zLivePatchFix.__eq__m   s7    e\*99

*Lt||u}}/LLr   c                 >    | j                  |      }|t        u r|S | S r   )rm   rk   )r   rl   results      r   __ne__zLivePatchFix.__ne__r   s%    U#^#Mzr   N)r   r   r   r   rm   rp   r   r   r   r]   r]   g   s    6

r   r]   )gi.repositoryr   http.clientr   r   r<   r/   r   r	   r
   r   objectr   r]   r   r   r   <module>rt      sJ   .     C	dkk00 9f 9x6 r   