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   :