HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/uaclient/__pycache__/status.cpython-310.pyc
o

nHJe�v�@s8ddlZddlZddlZddlZddlmZddlmZmZddlm	Z	m
Z
mZmZm
Z
ddlmZmZmZmZmZmZddlmZddlmZmZddlmZmZdd	lmZmZdd
l m!Z!ddl"m#Z#m$Z$m%Z%m&Z&ddl'm(Z(m)Z)dd
l*m+Z+ddl,m-Z-e�.�Z/e�0e�1e2��Z3dZ4dZ5dZ6e&j7j8e-j9ej:e-j;e&j<j8e-j=ej>e-j;e&j?j8e-j@ejAe-j;e&jBj8e-j@ejCe-j;e&jDj8e-jEejFe-j;e#jGj8e-j9ejHe-j;e#jIj8e-j@ejJe-j;e4e-j9ejKe-j;e5e-j9ejLe-j;e6e-j9ejMe-j;i
ZNdZOdZPdjQejRejSejTejUd�ZVdZWdZXidd�dd�de�Y��dd�dd�d d�d!d�d"d�d#g�d$e%j<j8�d%ejZ�d&i�d'g�d(d)d)d)ge&j?j8d*��d+d)d)d)gd,��d-d�Z[d.d/�Z\d0e
e]e	ffd1d2�Z^d3ed0e
e]e	ffd4d5�Z_d3ed0e
e]e	ffd6d7�Z`d0e
e]e	ffd8d9�Zad0e
e]e	ffd:d;�ZbdVd3ed<ecd0e
e]e	ffd=d>�Zdd?ee
e]e	fd@e]d0e
e]e	ffdAdB�Ze	dVdCe]d<ecd0e
e
e]e	fefffdDdE�ZgdFe]d0e]fdGdH�ZhdIeee]d0e]fdJdK�Zi	dWdLee
e]e]fdMee]d0ee]fdNdO�Zjd!eed0e]fdPdQ�ZkdVd>e
e]e	fd<ecd0e]fdRdS�ZldTdU�ZmdS)X�N)�OrderedDict)�datetime�timezone)�Any�Dict�List�Optional�Tuple)�event_logger�
exceptions�	livepatch�messages�util�version)�_is_attached)�UA_CONFIGURABLE_KEYS�UAConfig)�get_available_resources�get_contract_information)�ATTACH_FAIL_DATE_FORMAT�PRINT_WRAP_WIDTH)�entitlement_factory)�ContractStatus�UserFacingAvailability�UserFacingConfigStatus�UserFacingStatus)�notices�state_files)�Notice)�TxtColor�	essential�standard�advancedz({name: <17}{available: <11}{description}zJ{name: <17}{available: <11}{entitled: <11}{auto_enabled: <16}{description}z4{name: <17}{entitled: <10}{status: <13}{description}��name�entitled�status�descriptionz4{name: <17}{entitled: <19}{status: <22}{description}z={marker} {name: <15}{entitled: <19}{status: <22}{description}�_doczUContent provided in json response is currently considered Experimental and may change�_schema_versionz0.1r�
machine_id�attachedF�	effective�expires�origin�services�execution_status�execution_details�featuresr�contract���idr$�
created_at�products�tech_support_level�account�r$r6r7�external_account_ids�	simulatedcCsdd�|��D�S)NcSs4g|]}|jjs|jjn|jj|jj|jjd��qS))r$�reason_code�reason)�entitlement�
is_variantr$�variant_name�	named_msg�msg��.0�service�rH�1/usr/lib/python3/dist-packages/uaclient/status.py�
<listcomp>�s�
���z,_get_blocked_by_services.<locals>.<listcomp>)�blocking_incompatible_services)�entrHrHrI�_get_blocked_by_services�s�rM�returnc

s�d}d}|��}|��}|j�vrdnd}i}|tjkr tj}	n=|j�vr.tj}	�|j}n/|��\}	}
|	tj	krA|
j|
j
d�}n|
rF|
j
}|	tjkrMd}|jr]��fdd�|j��D�}t
|�}|j|j|j|	j|||||d�	}|jsx||d<|S)	Nr4�no�yes)�code�messagecs$i|]\}}|t|�d�����qS)��cfg)�_attached_service_status)rFrB�variant_cls�rT�inapplicable_resourcesrHrI�
<dictcomp>�s���z,_attached_service_status.<locals>.<dictcomp>)	r$r'r%r&�status_details�description_override�	available�
blocked_by�warning�variants)�status_description_override�contract_statusr$r�
UNENTITLEDr�UNAVAILABLE�INAPPLICABLE�user_facing_status�WARNINGrDr_�itemsrM�presentation_namer'�valuerA)
rLrXrTr^rZr[rar\r_�
ent_status�detailsr]�service_statusrHrWrIrU�sL


�
�	�rUrTcCs�t�tj�t�tj�t�t�}|jd}|d}t	j
j}|�|dd|�
d�t��p-g|d|d|�
dd	�|�
d
g�|d�|jjd|jjd|jj�
dd	�|jj�
dg�d
�d��|�
d�ri|jj|d<|�
d�rt|d|d<|j�
d�}|s�t|�}dd�t|dd�d�D�}|D](}zt||�
dd	�d�}Wn
tjy�Yq�w||�}	|d�t|	||��q�|djdd�d�|jj�
di��
d�}
|
r�|
�
di��
d�}|r�||d d!<|S)"z8Return configuration of attached status as a dictionary.�machineTokenInfo�contractInfo�	machineIdTr.r6r$�	createdAtr4r8r5�externalAccountIDsr;)r*r+r.rr3r:�effectiveTor-�
effectiveFromr,�availableResourcescSs&i|]}|�d�s|d|�d��qS)r\r$r'��get�rF�resourcerHrHrIrY�s��z$_attached_status.<locals>.<dictcomp>cS�|�dd�S�Nr$r4ru��xrHrHrI�<lambda>��z"_attached_status.<locals>.<lambda>��key�rTr$r/cSryrzrur{rHrHrIr}
r~�supportr@�affordances�supportLevelr3r9)r�remover�AUTO_ATTACH_RETRY_FULL_NOTICE�AUTO_ATTACH_RETRY_TOTAL_FAILURE�copy�deepcopy�DEFAULT_STATUS�
machine_tokenrrdri�updaterv�list�machine_token_filer:�contract_expiry_datetimer�sortedrr�EntitlementNotFoundError�appendrU�sort�entitlements)rT�responsermrnr9�	resourcesrXrx�ent_clsrLr�r�rHrHrI�_attached_status�sv




�

�����

�
��
��r�cCs�t�t�}t|�}|D]\}|�d�rtjj}ntjj}zt	||�dd�d�}Wnt
jy;t�
d|�dd��Yqw|jdkrRt��tjjkrR||�}|��}nd}|d	�|�d
|d�|j||d��q|d	jdd
�d�|S)z#Return unattached status as a dict.r\r$r4r�z@Ignoring availability of unknown service %s from contract serverzwithout a 'name' keyrNr/�presentedAs)r$r'r[r\cSryrzrur{rHrHrIr}Br~z$_unattached_status.<locals>.<lambda>r)r�r�r�rrvr�	AVAILABLErircrrr��LOG�debugr$r�on_supported_kernel�LivepatchSupport�UNSUPPORTEDr`r�r'r�)rTr�r�rxr\r��lp�descr_overriderHrHrI�_unattached_statussB



�
��
�
��r�c
	Cs�tj|jdd�}||O}|r|St�|�}g}|�di�D]3}|d}zt||d�}Wntjy;	|�	|�Yqwt
jj}	|j
rK|�dd�|	krP|�	|�q|rW||d<|S)z1Remove beta services from response dict if neededzfeatures.allow_beta)�config�
path_to_valuer/r$r�r&r4)r�is_config_value_truerTr�r�rvrrr�r�r�ACTIVEri�is_beta)
rT�show_allr��config_allow_beta�new_response�released_resourcesrx�
resource_namer��enabled_statusrHrHrI�_handle_beta_resourcesGs0�

�

�r�cCs�t}|jj}tj}|��\}}t��pg}|dkr&|jj}tj	j
||d�}ntjj
r7|jj}d}tjj
|d�}||||j|j|jd�}i}	tD]}
t||
�rUt||
�|	|
<qG|	|dd<|S)aGReturn a dict with execution_status, execution_details and notices.

    Values for execution_status will be one of UserFacingConfigStatus
    enum:
        inactive, active, reboot-required
    execution_details will provide more details about that state.
    notices is a list of tuples with label and description items.
    r)�pid�lock_holderzconfiguration changes)�	operation)r0r1r�config_pathr�r2r��	ua_config)r�INACTIVErir
�NO_ACTIVE_OPERATIONS�check_lock_inforr�r��	LOCK_HELD�formatr�reboot_cmd_marker_file�
is_present�REBOOTREQUIRED�ENABLE_REBOOT_REQUIRED_TMPL�cfg_pathrTr2r�hasattr�getattr)rT�
userStatus�
status_val�status_desc�lock_pidr��notices_listr��retr�r�rHrHrI�_get_config_statusks<	���	
�r�r�cCspt|�jr
t|�}nt|�}|�t|��t��r|�d|�t	|||�}|s6dd�|�
dg�D�}||d<|S)aReturn status as a dict, using a cache for non-root users

    When unattached, get available resources from the contract service
    to report detailed availability of different resources for this
    machine.

    Write the status-cache when called by root.
    zstatus-cachecS� g|]}|�dd�dkr|�qS�r\rPrurErHrHrIrJ��
�zstatus.<locals>.<listcomp>r/)r�is_attachedr�r�r�r�r�we_are_currently_root�write_cacher�rv)rTr�r��available_servicesrHrHrIr&�s
	

�r&r��entitlement_namecCs`|D]'}|�d�|kr)|�d�rdnd|�di��d�rdnd|�di�d�Sqddid�S)	z0Extract information from the entitlements array.�typer%rPrO�obligations�enableByDefaultr�)r%�auto_enabledr�ru)r�r�r@rHrHrI�_get_entitlement_information�s�

��r��tokenc
Cs4d}t�t�}zt||�}Wntjy+}zt|d�r%|jdkr%t���|�d}~ww|�	di�}|�	di�}|�
|�	dd�|�	d	d�|�	d
d�|�	dg�d�|�	d	d�|�	d�|�	d
d�|�	d
g�d�dd��t�t
j�}	|�	d�r�|�	d�|d<|d}
|
|	}|��dkr�tjj|dd|
�t�d�}tj|j|jd�t�tjd|jd�d}|�	d�r�|�	d�|d<|d}
|	|
}|��dkr�tjj|dd|
�t�d�}tj|j|jd�t�tjd|jd�d}t|�}dd�t|dd�d�D�}|�	dg�}|D]G}|�	d	d�}zt||d �}Wntj�y'Y�qw||d!�}t ||�}|d"�!|�	d#|j�|j"|d$|d%|j|v�rLd&nd'd(���q|d"j#d)d�d�t |d*�}|d$�rw|d+�	d,�}|�rw||dd-<|�
t$|��t%|||�}|�s�d.d�|�	d"g�D�}||d"<||fS)/z�Get a status dictionary based on a token.

    Returns a tuple with the status dictionary and an integer value - 0 for
    success, 1 for failure
    rrQi�Nrn�accountInfor6r4r$rpr8)r6r$r7r8rqr;T)r3r:r=rrr-r3)�contract_id�date)�	error_msg�
error_code�
�rsr,cSsg|]
}|ds|d�qS)r\r$rHrwrHrHrIrJs��z#simulate_status.<locals>.<listcomp>cSs|dS)Nr$rHr{rHrHrIr}sz!simulate_status.<locals>.<lambda>r�resourceEntitlementsr�rSr/r�r%r�rPrO)r$r'r%r�r\cSryrzrur{rHrHrIr}*r~r�r�r�r9cSr�r�rurErHrHrIrJ6r�)&r�r�r�rr�ContractAPIErrorr�rQ�AttachInvalidTokenErrorrvr�r�nowr�utc�
total_secondsr
�E_ATTACH_FORBIDDEN_EXPIREDr��strftimer�event�errorrDr$�info�STATUS_TOKEN_NOT_VALID�E_ATTACH_FORBIDDEN_NOT_YETrr�rr�r�r�r'r�r�r�)rTr�r�r�r��contract_information�e�
contract_info�account_infor��expiration_datetime�deltarR�effective_datetimer�rXr�rxr�r�rL�entitlement_informationr�r�r�rHrHrI�simulate_status�s�
��



�

����

��

����
����


�r��stringcCstj��rt�||�S|S)z=Return colorized string if using a tty, else original string.)�sys�stdout�isatty�STATUS_HUMANIZE_COLORIZErv)r�rHrHrI�for_human_colorized@s
���r��commandscCstd}|D]}|r|d7}|d�|�7}qd�tj|tddd��}d|vr*d	}d
}nd}d}d
jtj|||tjd�S)Nr4z && � z \
�z  )�width�subsequent_indentr�z{
  z
}z{ z }z%{color}{prefix}{content}{suffix}{end})�color�prefix�content�suffix�end)�join�textwrap�wraprr�r�DISABLEGREY�ENDC)r�r��cmd�wrapped_contentr�rrHrHrI�colorize_commandsIs,
���r	�column_data�headercsjg}|r	|�|�tdd�|D��}|dkr)d�|��|��fdd�|D��|S|�dd�|D��|S)z�Return a list of content lines to print to console for a section

    Content lines will be center-aligned based on max value length of first
    column.
    cSsg|]}t|d��qS)r)�len�rF�pairrHrHrIrJpsz.get_section_column_content.<locals>.<listcomp>rz{{:>{}}}: {{}}csg|]}�j|��qSrH)r�r
��templaterHrIrJsscSsg|]}|d�qS)r�rHr
rHrHrIrJvs)r��maxr��extend)r
rr��template_lengthrHrrI�get_section_column_contentes

�rcCs8|durtjSz|��}Wn	tyYnw|�d�S)Nz%c %Z)r
�STATUS_CONTRACT_EXPIRES_UNKNOWN�
astimezone�	Exceptionr�)r-rHrHrI�format_expireszs�
rc
Cs4|�d�s�|�d�r<|�dd�stjStjtjtjtjtjtj	d�g}|�dg�D]
}|�
tjd)i|���q)d�|�S|�dd�sGtjg}n@tjtjtjtj	d�g}|�dg�D]-}|�d�}|rd|n|�d	d
�}|�d�dkrttj
ntj}|�
tj|�d
d
�||d��qY|�d�}|r�|�
tj�|�|�|�d�r�|�
dtj�t|�di����D]
\}}	|�
d�||	��q�|s�|�d
tjg�|�d
tjjg�t��tjjkr�|�d
tjg�d�|�Sg}
d}|�dd�s�tjg}n�tg}|�dg�D]�}|�dd
�}
|�d�}|�r|n|�d	d
�}|�d
d
�t|
�t|�dd
��|d�}|�dd�}|du�rD|�dd�}|du�rD|
�
|�|�d�}|�rZ|�sZd}d�|d
�|d
<|�
tjd)i|���|�r�|�r�t|���D]4\}\}}|t |�dk�r�dnd}|�
t!j||�d
�t|�dd
��t|�dd
��|�d	d
�d���qqq�|�r�|�
d
�|�
tj"�|�d��s�t |
�dk�r�|�
d
�|�
tj�|�d�}|�r�|�|�t |
�dk�r�|�|
�|�d��r
|�
dtj�t|�di����D]\}}	|�
d�||	���q�|�
d
�|�s%|�r|�
tj#�n|�
tj�|�
tj$jdd ��g}|�d!i��d
d"�}|�rF|�
tj%|f�|�d#i��d
d"�}|�r[|�
tj&|f�|�d$d�d%k�r�|�
tj't(|�d&��f�|�d#i��d'd"�}|�
tj)t|�f�|�r�|�
d
�|�t*|d(��d�|�S)*z&Format status dict for tabular output.r+r=r/N)r$r\r%r�r'r�)r$r\r'r[r'r4r\rPr$rr2z{}: {}Fr%r&r#r^rRr_Tz{}*r�u├u└)�markerr$r%r&r'rzpro enable <service>)�commandr:�unknownr3r.�freer-r9)r
rH)+rvr
�STATUS_NO_SERVICES_AVAILABLE�STATUS_SIMULATED_TMPLr��STATUS_SERVICE�STATUS_AVAILABLE�STATUS_ENTITLED�STATUS_AUTO_ENABLED�STATUS_DESCRIPTIONr�r�STATUS_UNATTACHED_TMPL�STANDALONE_YES�
STANDALONE_NO�STATUS_NOTICESr�STATUS_FEATURESr�rg�STATUS_ALL_HINT�E_UNATTACHEDrDrr�r�r��)LIVEPATCH_KERNEL_NOT_SUPPORTED_UNATTACHED�
STATUS_HEADERr��STATUS_TMPL�	enumerater�VARIANT_STATUS_TMPL�STATUS_SERVICE_HAS_VARIANTS�STATUS_ALL_HINT_WITH_VARIANTS�"STATUS_FOOTER_ENABLE_SERVICES_WITH�STATUS_FOOTER_ACCOUNT�STATUS_FOOTER_SUBSCRIPTION�STATUS_FOOTER_VALID_UNTILr�STATUS_FOOTER_SUPPORT_LEVELr)r&r�r�rGr�r'r\rr�ri�service_warnings�has_variantsrlr%�fmt_argsr^�warning_messager_�idx�_�variantr�pairs�account_name�
contract_namer9rHrHrI�format_tabular�s4

��	

��
�
���
��


��


�
�

��




�
�
���





�������

rAc	Cst|�}d}t�}||d<|D],}|d|ks|�d�|kr;z
t||dd�}Wn
tjy2Yqw|}||�}nq|durFtj|d��t|�jrkt	|i|�}|d}	|d|d<|	|d<|	dkrj|j
rjd	|d
<n|drttjj
}
ntjj
}
|
|d<|j|d<|S)
z�Return help information from an uaclient service as a dict

    :param name: Name of the service for which to return help data.

    :raises: UbuntuProError when no help is available.
    Nr$r�r�)r$r&r%�enabledT�betar\�help)rrrvrrr��
NoHelpContentrr�rUr�rr�rirc�	help_info)rTr$r��
help_resource�
response_dictrx�help_ent_cls�help_entrl�
status_msgr\rHrHrIrD@sB
���
�

rD)F)N)nr��loggingr�r�collectionsrrr�typingrrrrr	�uaclientr
rrr
rr�(uaclient.api.u.pro.status.is_attached.v1r�uaclient.configrr�uaclient.contractrr�uaclient.defaultsrr�uaclient.entitlementsr�(uaclient.entitlements.entitlement_statusrrrr�uaclient.filesrr�uaclient.files.noticesr�uaclient.messagesr�get_event_loggerr��	getLogger�replace_top_level_logger_name�__name__r��	ESSENTIAL�STANDARD�ADVANCEDr�ri�OKGREEN�STATUS_STATUS_ENABLEDrr��FAIL�STATUS_STATUS_DISABLEDrdr�STATUS_STATUS_INAPPLICABLErc�STATUS_STATUS_UNAVAILABLErf�
WARNINGYELLOW�STATUS_STATUS_WARNING�ENTITLED�STATUS_ENTITLED_ENTITLEDrb�STATUS_ENTITLED_UNENTITLED�STATUS_SUPPORT_ESSENTIAL�STATUS_SUPPORT_STANDARD�STATUS_SUPPORT_ADVANCEDr�r$rr�rr!�
STATUS_STATUSr#r,r-r/�get_versionr�r�rM�strrUr�r�r�r��boolr&r��intr�r�r	rrrArDrHrHrHrI�<module>s: �������������(�
��������	�
���
������� 

�;H1$ + ��

����
�z	���
� 
=