HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/uaclient/__pycache__/status.cpython-38.pyc
U

��Jhr�@s�ddlZddlZddlZddlZddlmZddlmZmZddlm	Z	ddl
mZmZm
Z
mZmZddlmZmZmZmZmZmZmZddlmZddlmZmZdd	lmZmZdd
l m!Z!m"Z"ddl#m$Z$ddl%m&Z&m'Z'm(Z(m)Z)dd
l*m+Z+m,Z,m-Z-m.Z.ddl/m0Z0ddl1m2Z2e�3�Z4e�5e�6e7��Z8dZ9dZ:dZ;e)j<j=e2j>ej?e2j@e)jAj=e2jBejCe2j@e)jDj=e2jEejFe2j@e)jGj=e2jEejHe2j@e)jIj=e2jJejKe2j@e&jLj=e2j>ejMe2j@e&jNj=e2jEejOe2j@e9e2j>ejPe2j@e:e2j>ejQe2j@e;e2j>ejRe2j@i
ZSdZTdZUdjVejWejXejYejZd�Z[dZ\dZ]dde�^�dddddge(jAj=ej_igdddge)jDj=d�dddgd�dd�Z`d d!�Zaeebefd"�d#d$�Zceeebefd%�d&d'�Zdeeebefd%�d(d)�Zeeebefd"�d*d+�ZfdFeegeebefd,�d-d.�Zhe
eebefebeebefd/�d0d1�ZidGebegeeebefejfd2�d3d4�Zkebebd5�d6d7�Zle
e
ebebd8�d9d:�ZmdHe
eebebfeebe
ebd;�d<d=�Zneeebd>�d?d@�ZodIeebefegebdA�dBdC�ZpdDdE�ZqdS)J�N)�OrderedDict)�datetime�timezone)�Enum)�Any�Dict�List�Optional�Tuple)�event_logger�
exceptions�	livepatch�lock�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)�
machine_token�notices�state_files�user_config_file)�Notice)�TxtColorZ	essentialZstandardZadvancedz({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}zUContent provided in json response is currently considered Experimental and may changez0.1F���idr%�
created_at�products�tech_support_level�r%r+r,Zexternal_account_ids)Z_docZ_schema_versionr�
machine_id�attached�	effective�expires�origin�services�execution_status�execution_details�featuresr�contract�account�	simulatedcCsdd�|��D�S)NcSs4g|],}|jjs|jjn|jj|jj|jjd��qS))r%Zreason_code�reason)�entitlement�
is_variantr%�variant_nameZ	named_msg�msg��.0�service�rD�1/usr/lib/python3/dist-packages/uaclient/status.py�
<listcomp>�s
��
�z,_get_blocked_by_services.<locals>.<listcomp>)Zblocking_incompatible_services)�entrDrDrE�_get_blocked_by_services�s
�rH)�returnc

s�d}d}|��}|��}|j�kr&dnd}i}|tjkr@tj}	nz|j�kr\tj}	�|j}n^|��\}	}
|	tj	kr�|
j|
j
d�}n
|
r�|
j
}|	tjkr�d}|jr���fdd�|j��D�}t
|�}|j|j|j|	j|||||d�	}|js�||d<|S)	Nr)�no�yes)�code�messagecs$i|]\}}|t|�d�����qS))�cfg)�_attached_service_status)rBr?Zvariant_cls�rN�inapplicable_resourcesrDrE�
<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�INAPPLICABLEZuser_facing_status�WARNINGr@rX�itemsrHZpresentation_namer(�valuer>)
rGrQrNrWrSrTrZrUrXZ
ent_statusZdetailsrV�service_statusrDrPrErO�sL


�
�	�rO)rNrIcCs�t�tj�t�tj�t|�jr.t�tj�t�	t
�}t�|�}|jd}|d}t
jj}|�|dd|�d�t��pzg|d|d|�dd	�|�d
g�|d�|jd|jd|j�dd	�|j�dg�d
�d��|�d�r�|j|d<|�d�r�|d|d<|j�d�}|�st|�}dd�t|dd�d�D�}|D]T}zt||�dd	�d�}	Wntjk
�rpY�q6YnX|d�t|	||���q6|djdd�d�|���di��d�}
|
�r�|
�di��d�}|�r�||d d!<|S)"z8Return configuration of attached status as a dictionary.�machineTokenInfo�contractInfoZ	machineIdTr4r+r%�	createdAtr)r-r*�externalAccountIDsr/)r0r1r4rr9r:�effectiveTor3�
effectiveFromr2ZavailableResourcescSs&i|]}|�d�s|d|�d��qS)rUr%r(��get�rB�resourcerDrDrErRs
�z$_attached_status.<locals>.<dictcomp>cSs|�dd�S�Nr%r)rh��xrDrDrE�<lambda>�z"_attached_status.<locals>.<lambda>��key�rNr%r5cSs|�dd�SrlrhrmrDrDrErorp�supportr=�affordances�supportLevelr9r.)r�remover"ZAUTO_ATTACH_RETRY_FULL_NOTICEZAUTO_ATTACH_RETRY_TOTAL_FAILURErZis_attached_and_contract_validZCONTRACT_EXPIRED�copy�deepcopy�DEFAULT_STATUSrZget_machine_token_filerr]r`�updateri�listr:Zcontract_expiry_datetimer�sortedrr�EntitlementNotFoundError�appendrO�sort�entitlements)rN�responseZmachine_token_filerbrcr.�	resourcesrQrkrGrtrvrDrDrE�_attached_status�sp






�����


�
��r�cCs�t�t�}t|�}|D]�}|�d�r.tjj}ntjj}zt	||�dd�d�}Wn.t
jk
r|t�
d|�dd��YqYnX|jdkr�t��tjjkr�|��}nd}|d	�|�d
|d�|j||d��q|d	jdd
�d�|S)z#Return unattached status as a dict.rUr%r)rsz@Ignoring availability of unknown service %s from contract serverzwithout a 'name' keyr
Nr5�presentedAs)r%r(rTrUcSs|�dd�SrlrhrmrDrDrEroGrpz$_unattached_status.<locals>.<lambda>rq)rxryrzrrir�	AVAILABLEr`r\rrr~�LOG�debugr%r
�on_supported_kernel�LivepatchSupport�UNSUPPORTEDrYrr(r�)rNr�r�rkrUrG�descr_overriderDrDrE�_unattached_statuss>



�
���
��r�cCs�t}|jj}tj}t��\}}t��p(g}|dkrL|j	j}tj
j||d�}n"tj
jrn|jj}d}tjj|d�}||||j|j|jd�}tjj��}	tD]<}
t||
�r�|	|
dkr�t||
�}t|t�r�|j}||	|
<q�|	|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)r6r7rZconfig_path�configr8Nr��	ua_config)r�INACTIVEr`r�NO_ACTIVE_OPERATIONSrZcheck_lock_inforr|�ACTIVEZ	LOCK_HELD�formatr Zreboot_cmd_marker_fileZ
is_presentZREBOOTREQUIREDZENABLE_REBOOT_REQUIRED_TMPLZcfg_pathrNr8r!Zuser_configZ
public_configZto_dictr�hasattr�getattr�
isinstancer)rNZ
userStatusZ
status_valZstatus_descZlock_pidr�Znotices_listr��retr�rr�valrDrDrE�_get_config_statusLsB	���	


r�)rN�show_allrIcCsdt|�jrt|�}nt|�}|�t|��t��r>tj	�
|�|s`dd�|�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.
    cSs g|]}|�dd�dkr|�qS�rUrKrhrArDrDrErF�s�zstatus.<locals>.<listcomp>r5)r�is_attachedr�r�r{r�rZwe_are_currently_rootr Zstatus_cache_file�writeri)rNr�r��available_servicesrDrDrEr'{s	


�r')r��entitlement_namerIcCs`|D]N}|�d�|kr|�d�r$dnd|�di��d�r<dnd|�di�d�Sqddid�S)	z0Extract information from the entitlements array.�typer&rKrJZobligationsZenableByDefaultru)r&�auto_enabledrurh)r�r�r=rDrDrE�_get_entitlement_information�s��
�r�)�tokenr�rIc
Cs6d}t�t�}zt||�}WnDtjk
r`}z$t|d�rL|jdkrLt���|�W5d}~XYnX|�	di�}|�	di�}|�
|�	dd�|�	d	d�|�	d
d�|�	dg�d�|�	d	d�|�	d�|�	d
d�|�	d
g�d�dd��t�t
j�}	|�	d��rp|�	d�|d<|d}
|
|	}|��dk�rptjj|dd|
�t�d�}tj|j|jd�t�tjd|jd�d}|�	d��r�|�	d�|d<|d}
|	|
}|��dk�r�tjj|dd|
�t�d�}tj|j|jd�t�tjd|jd�d}t|�}dd�t|dd�d�D�}|�	dg�}|D]�}|�	d	d�}zt||d �}Wntjk
�rfY�q(YnXt ||�}|d!�!|�	d"|j�|j"|d#|d$|j|k�r�d%nd&d'���q(|d!j#d(d�d�t |d)�}|d#�r�|d*�	d+�}|�r�||dd,<|�
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
    rrLi�NrcZaccountInfor+r)r%rdr-)r+r%r,r-rer/T)r9r:r;rfr3r9)Zcontract_id�date)Z	error_msgZ
error_code�
�rgr2cSsg|]}|ds|d�qS)rUr%rDrjrDrDrErF�s�z#simulate_status.<locals>.<listcomp>cSs|dS)Nr%rDrmrDrDrEro�rpz!simulate_status.<locals>.<lambda>rqZresourceEntitlementsrsr5r�r&r�rKrJ)r%r(r&r�rUcSs|�dd�SrlrhrmrDrDrErorprtrurvr.cSs g|]}|�dd�dkr|�qSr�rhrArDrDrErFs�)%rxryrzrrZContractAPIErrorr�rLZAttachInvalidTokenErrorrir{r�nowrZutcZ
total_secondsrZE_ATTACH_FORBIDDEN_EXPIREDr��strftimer�event�errorr@r%�infoZSTATUS_TOKEN_NOT_VALIDZE_ATTACH_FORBIDDEN_NOT_YETrr}rr~r�rr(r�r�)rNr�r�r�r�Zcontract_information�eZ
contract_infoZaccount_infor�Zexpiration_datetimeZdeltarMZeffective_datetimer�rQr�rkr�rGZentitlement_informationrtrvr�rDrDrE�simulate_status�s�




�

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


�r�)�stringrIcCstj��rt�||�S|S)z=Return colorized string if using a tty, else original string.)�sys�stdout�isatty�STATUS_HUMANIZE_COLORIZEri)r�rDrDrE�for_human_colorized%s��r�)�commandsrIcCstd}|D]}|r|d7}|d�|�7}qd�tj|tddd��}d|krTd	}d
}nd}d}d
jtj|||tjd�S)Nr)z && � z \
�z  )�widthZsubsequent_indentr�z{
  z
}z{ z }z%{color}{prefix}{content}{suffix}{end})Zcolor�prefix�content�suffix�end)�join�textwrapZwraprr�r#�DISABLEGREY�ENDC)r�r��cmdZwrapped_contentr�r�rDrDrE�colorize_commands.s0���r�)�column_data�headerrIcshg}|r|�|�tdd�|D��}|dkrPd�|��|��fdd�|D��n|�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�rBZpairrDrDrErFUsz.get_section_column_content.<locals>.<listcomp>rz{{:>{}}}: {{}}csg|]}�j|��qSrD)r�r���templaterDrErFXscSsg|]}|d�qS)r�rDr�rDrDrErF[s)r�maxr��extend)r�r�r�Ztemplate_lengthrDr�rE�get_section_column_contentJs

r�)r3rIcCs:|dkrtjSz|��}Wntk
r.YnX|�d�S)Nz%c %Z)rZSTATUS_CONTRACT_EXPIRES_UNKNOWNZ
astimezone�	Exceptionr�)r3rDrDrE�format_expires_sr�)r'r�rIc
Cs@|�d��s�|�d�rv|�dd�s(tjStjtjtjtjtjtj	d�g}|�dg�D]}|�
tjf|��qTd�|�S|�dd�s�tjg}n�tjtjtjtj	d�g}|�dg�D]Z}|�d�}|r�|n
|�d	d
�}|�d�dkr�tj
ntj}|�
tj|�d
d
�||d��q�|�d�}|�r2|�
tj�|�|�|�d��r�|�
dtj�t|�di����D]\}}	|�
d�||	���qb|�s�|�d
tjg�|�d
tjjg�t��tjjk�r�|�d
tjg�d�|�Sg}
d}|�dd��s�tjg}�ndtg}|�dg�D�]N}|�dd
�}
|�d�}|�r.|n
|�d	d
�}|�d
d
�t|
�t|�dd
��|d�}|�dd�}|dk	�r�|�dd�}|dk	�r�|
�
|�|�d�}|�r�|�s�d}d�|d
�|d
<|�
tjf|��|�r|�rt|���D]h\}\}}|t |�dk�rdnd}|�
t!j||�d
�t|�dd
��t|�dd
��|�d	d
�d���q�q|�rv|�
d
�|�
tj"�|�d��s�t |
�dk�r�|�
d
�|�
tj�|�d�}|�r�|�|�t |
�dk�r�|�|
�|�d��r&|�
dtj�t|�di����D]\}}	|�
d�||	���q|�
d
�|�sV|�rJ|�
tj#�n|�
tj�|�
tj$jdd ��g}|�d!i��d
d"�}|�r�|�
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�|�r6|�
d
�|�t*|d(��d�|�S))z&Format status dict for tabular output.r1r;r5N)r%rUr&r�r(r�)r%rUr(rTr(r)rUrKr%rr8z{}: {}Fr&r'r$rWrMrXTz{}*r�u├u└)�markerr%r&r'r(rzpro enable <service>)Zcommandr:�unknownr9r4Zfreer3r.)r�)+rirZSTATUS_NO_SERVICES_AVAILABLE�STATUS_SIMULATED_TMPLr��STATUS_SERVICEZSTATUS_AVAILABLE�STATUS_ENTITLEDZSTATUS_AUTO_ENABLED�STATUS_DESCRIPTIONrr��STATUS_UNATTACHED_TMPLZSTANDALONE_YESZ
STANDALONE_NOZSTATUS_NOTICESr�ZSTATUS_FEATURESr}r_ZSTATUS_ALL_HINTZE_UNATTACHEDr@r
r�r�r�Z)LIVEPATCH_KERNEL_NOT_SUPPORTED_UNATTACHED�
STATUS_HEADERr��STATUS_TMPL�	enumerater��VARIANT_STATUS_TMPLZSTATUS_SERVICE_HAS_VARIANTSZSTATUS_ALL_HINT_WITH_VARIANTSZ"STATUS_FOOTER_ENABLE_SERVICES_WITHZSTATUS_FOOTER_ACCOUNTZSTATUS_FOOTER_SUBSCRIPTIONZSTATUS_FOOTER_VALID_UNTILr�ZSTATUS_FOOTER_SUPPORT_LEVELr�)r'r�r�rCr�r(rUrrrr`Zservice_warningsZhas_variantsrar&Zfmt_argsrWZwarning_messagerX�idx�_Zvariantr�ZpairsZaccount_nameZ
contract_namer.rDrDrE�format_tabularis6
��	

��
�
���
��

���

�
�

��




�
�
��





�������
r�c
	Cs�t|�}d}t�}||d<|D]V}|d|ks<|�d�|krzt||dd�}Wntjk
rjYqYnX|}qvq|dkr�tj|d��t|�jr�t	|i|�}|d}|d|d<||d<n"|dr�t
jj}	nt
j
j}	|	|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�rs)r%r'r&rU�help)rrrirrr~Z
NoHelpContentrr�rOrr�r`r\Z	help_info)
rNr%r�Z
help_resourceZ
response_dictrkZhelp_entraZ
status_msgrUrDrDrEr�%s2




r�)F)F)N)F)rrxZloggingr�r��collectionsrrr�enumr�typingrrrr	r
Zuaclientrrr
rrrrZ(uaclient.api.u.pro.status.is_attached.v1rZuaclient.configrrZuaclient.contractrrZuaclient.defaultsrrZuaclient.entitlementsrZ(uaclient.entitlements.entitlement_statusrrrrZuaclient.filesrrr r!Zuaclient.files.noticesr"Zuaclient.messagesr#Zget_event_loggerr�Z	getLoggerZreplace_top_level_logger_name�__name__r�Z	ESSENTIALZSTANDARDZADVANCEDr�r`ZOKGREENZSTATUS_STATUS_ENABLEDr�r�ZFAILZSTATUS_STATUS_DISABLEDr]r�ZSTATUS_STATUS_INAPPLICABLEr\ZSTATUS_STATUS_UNAVAILABLEr^Z
WARNINGYELLOWZSTATUS_STATUS_WARNINGZENTITLEDZSTATUS_ENTITLED_ENTITLEDr[ZSTATUS_ENTITLED_UNENTITLEDZSTATUS_SUPPORT_ESSENTIALZSTATUS_SUPPORT_STANDARDZSTATUS_SUPPORT_ADVANCEDr�r�r�r�r�r�Z
STATUS_STATUSr�r�r�r�Zget_versionr�rzrH�strrOr�r�r��boolr'r��intr�r�r�r�r�r�r�rDrDrDrE�<module>s
$	�������������(�
���� 
�;G./
���x	��
=