Ë
    GKÕir  ã                   ó¤  — d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZmZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
l m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2  ejf                  «       Z4 ejj                   ejl                  e7«      «      Z8dZ9dZ:dZ;e)jx                  jz                  e2j|                  ej~                  z   e2j€                  z   e)j‚                  jz                  e2j„                  ej†                  z   e2j€                  z   e)jˆ                  jz                  e2jŠ                  ejŒ                  z   e2j€                  z   e)jŽ                  jz                  e2jŠ                  ej�                  z   e2j€                  z   e)j’                  jz                  e2j”                  ej–                  z   e2j€                  z   e&j˜                  jz                  e2j|                  ejš                  z   e2j€                  z   e&jœ                  jz                  e2jŠ                  ejž                  z   e2j€                  z   e9e2j|                  ej                   z   e2j€                  z   e:e2j|                  ej¢                  z   e2j€                  z   e;e2j|                  ej¤                  z   e2j€                  z   i
ZSdZTdZUdj­                  ej®                  ej°                  ej²                  ej´                  ¬«      Z[dZ\dZ]i dd“dd“d ej¼                  «       “dd“dd “d!d“d"d“d#d“d$g “d%e(j‚                  jz                  “d&ej¾                  “d'i “d(g “d)d*d*d*g e)jˆ                  jz                  d+œ“d,d*d*d*g d-œ“d.d “Z`d/„ Zad0eebef   fd1„Zcd2ed0eebef   fd3„Zdd2ed0eebef   fd4„Zed0eebef   fd5„ZfdHd2ed6egd0eebef   fd7„Zhd8eeebef      d9ebd0eebef   fd:„Zi	 dHd;ebd6egd0eeebef   ejf   fd<„Zkd=ebd0ebfd>„Zld?eeeb      d0ebfd@„Zm	 dIdAeeebebf      dBeeb   d0eeb   fdC„Znd"ee   d0ebfdD„ZodHdEeebef   d6egd0ebfdF„ZpdG„ Zqy)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)Ú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_versionz0.1r   Ú
machine_idÚattachedFÚ	effectiveÚexpiresÚoriginÚservicesÚexecution_statusÚexecution_detailsÚfeaturesr    ÚcontractÚ ©Úidr)   Ú
created_atÚproductsÚtech_support_levelÚaccount©r)   r;   r<   Úexternal_account_idsÚ	simulatedc                 ó   — | j                  «       D �cg c]p  }|j                  j                  s|j                  j                  n|j                  j                  |j
                  j                  |j
                  j                  dœ‘Œr c}S c c}w )N)r)   Úreason_codeÚreason)Úblocking_incompatible_servicesÚentitlementÚ
is_variantr)   Úvariant_nameÚ	named_msgÚmsg)ÚentÚservices     ú1/usr/lib/python3/dist-packages/uaclient/status.pyÚ_get_blocked_by_servicesrO   �   s~   € ð ×9Ñ9Ó;öð ð ×*Ñ*×5Ò5ð ×#Ñ#×(Ò(à×(Ñ(×5Ñ5à"×,Ñ,×1Ñ1Ø×'Ñ'×+Ñ+ó	
òð ùò s   “A5BÚreturnc           
      ó"  — d }d}| j                  «       }| j                  «       }| j                  |v rdnd}i }|t        j                  k(  rt
        j                  }	nÜ| j                  |v r t
        j                  }	|| j                     }n®| j                  «       \  }	}
|	t
        j                  k(  r|
j                  |
j                  dœ}n|
r|
j                  }|	t
        j                  k(  rd}| j                  r?| j                  j                  «       D ��ci c]  \  }}|t         ||¬«      ||«      “Œ }}}t        | «      }| j                  | j                   |j"                  |	j"                  |||||dœ	}| j$                  s||d<   |S c c}}w )Nr9   ÚnoÚyes)ÚcodeÚmessage)Úcfg)	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ÚWARNINGrK   r\   ÚitemsÚ_attached_service_statusrO   Úpresentation_namer,   ÚvaluerH   )rL   Úinapplicable_resourcesrV   r[   rW   rX   r^   rY   r\   Ú
ent_statusÚdetailsrI   Úvariant_clsrZ   Úservice_statuss                  rN   re   re   œ   s”  € ð €GØ€NØ×:Ñ:Ó<ÐØ×)Ñ)Ó+€OØŸ™Ð$:Ñ:‘À€IØ€Hàœ.×3Ñ3Ò3Ü%×1Ñ1‰
à�8‰8Ð-Ñ-Ü)×6Ñ6ˆJØ#9¸#¿(¹(Ñ#CÑ à"%×"8Ñ"8Ó":ÑˆJ˜ØÔ-×5Ñ5Ò5à#ŸL™LØ&Ÿ{™{ñ‘ñ Ø!(§¡�àÔ-×:Ñ:Ò:Ø �	à�|Š|ð 69·\±\×5GÑ5GÓ5I÷ñ 2˜ kð !Ô":Ù#¨Ô,Ø.Øó#ñ ð�ñ ô *¨#Ó.€Jð ×%Ñ%Ø—‘Ø#×)Ñ)Ø×"Ñ"Ø(Ø 4ØØ Øñ
€Nð �>Š>Ø%-ˆ�zÑ"àÐùó5s   ÄFrV   c                 ó   — t        j                  t        j                  «       t        j                  t        j                  «       t        | «      j                  r#t        j                  t        j                  «       t        j                  t        «      }t        j                  | «      }|j                  d   }|d   }t        j                  j                  }|j!                  |d   d|j#                  d«      t        j$                  «       xs g |d   |d   |j#                  dd	«      |j#                  d
g «      |dœ|j&                  d   |j&                  d   |j&                  j#                  dd	«      |j&                  j#                  dg «      dœdœ«       |j#                  d«      r|j(                  |d<   |j#                  d«      r|d   |d<   |j                  j#                  d«      }|st+        | «      }t-        |d„ ¬«      D �ci c](  }|j#                  d«      s|d   |j#                  d«      “Œ* }}|D ]?  }	 t/        | |j#                  dd	«      ¬«      }	|d   j5                  t7        |	|| «      «       ŒA |d   j9                  d„ ¬«       |j;                  «       j#                  di «      j#                  d«      }
|
r+|
j#                  di «      j#                  d«      }|r||d   d <   |S c c}w # t0        j2                  $ r Y ŒÐw xY w)!z8Return configuration of attached status as a dictionary.ÚmachineTokenInfoÚcontractInfoÚ	machineIdTr3   r;   r)   Ú	createdAtr9   r=   r:   ÚexternalAccountIDsr@   )r/   r0   r3   r    r8   r?   ÚeffectiveTor2   ÚeffectiveFromr1   ÚavailableResourcesc                 ó&   — | j                  dd«      S ©Nr)   r9   ©Úget©Úxs    rN   ú<lambda>z"_attached_status.<locals>.<lambda>  s   € ¸¿¹¸fÀbÓ8I€ ó    ©ÚkeyrY   r,   ©rV   r)   r4   c                 ó&   — | j                  dd«      S rw   rx   rz   s    rN   r|   z"_attached_status.<locals>.<lambda>  ó   € ¨A¯E©E°&¸"Ó,=€ r}   ÚsupportrG   ÚaffordancesÚsupportLevelr8   r>   )r    Úremover#   ÚAUTO_ATTACH_RETRY_FULL_NOTICEÚAUTO_ATTACH_RETRY_TOTAL_FAILUREr   Úis_attached_and_contract_validÚCONTRACT_EXPIREDÚcopyÚdeepcopyÚDEFAULT_STATUSr   Úget_machine_token_filer   ra   rg   Úupdatery   Úlistr?   Úcontract_expiry_datetimer   Úsortedr   r   ÚEntitlementNotFoundErrorÚappendre   ÚsortÚentitlements)rV   ÚresponseÚmachine_token_filern   ro   r>   Ú	resourcesÚresourcerh   rL   rƒ   r…   s               rN   Ú_attached_statusr›   ×   sç  € ä‡N�N”6×7Ñ7Ô8Ü‡N�N”6×9Ñ9Ô:Ü�CÓ×7Ò7Ü�‰”v×.Ñ.Ô/ä�}‰}œ^Ó,€HÜ&×=Ñ=¸cÓBÐØ)×7Ñ7Ð8JÑKÐØ# NÑ3€LÜ)×6Ñ6×<Ñ<ÐØ‡O�Oà*¨;Ñ7ØØ"×&Ñ& xÓ0Ü—|‘|“~Ò+¨à" 4Ñ(Ø$ VÑ,Ø*×.Ñ.¨{¸BÓ?Ø(×,Ñ,¨Z¸Ó<Ø&8ñð +×2Ñ2°6Ñ:Ø(×0Ñ0°Ñ6Ø0×8Ñ8×<Ñ<¸[È"ÓMØ(:×(BÑ(B×(FÑ(FØ(¨"ó)ñ	ñ	
ôð. ×Ñ˜Ô&Ø0×IÑIˆ�ÑØ×Ñ˜Ô(Ø ,¨_Ñ =ˆ�Ñà"×0Ñ0×4Ñ4Ð5IÓJ€IÙÜ+¨CÓ0ˆ	ô ˜yÑ.IÔJöàØ�|‰|˜KÔ(ð 	�Ñ˜(Ÿ,™, }Ó5Ñ5ðÐð ð ò 
ˆð	Ü%¨#°H·L±LÀÈÓ4LÔMˆCð 	�Ñ×#Ñ#Ü$ SÐ*@À#ÓFõ	
ð
ð ˆZÑ×ÑÑ"=ÐÔ>ð 	×'Ñ'Ó)×-Ñ-¨i¸Ó<×@Ñ@ÀÓOð ñ Ø—{‘{ =°"Ó5×9Ñ9¸.ÓIˆÙØ9EˆH�ZÑ Ð!5Ñ6Ø€Oùò1øô ×2Ñ2ò 	Ùð	ús   È-K2É K7Ë7LÌLc           	      óÞ  — t        j                  t        «      }t        | «      }|D ]í  }|j	                  d«      rt
        j                  j                  }nt
        j                  j                  }	 t        | |j	                  dd«      ¬«      }|j                  dk(  r@t        j                   «       t        j"                  j$                  k(  r|j'                  «       }nd}|d	   j)                  |j	                  d
|d   «      |j*                  ||dœ«       Œï |d	   j-                  d„ ¬«       |S # t        j                  $ r* t        j                  d|j	                  dd«      «       Y �ŒDw xY w)z#Return unattached status as a dict.rY   r)   r9   r€   z@Ignoring availability of unknown service %s from contract serverzwithout a 'name' keyr   Nr4   ÚpresentedAs)r)   r,   rX   rY   c                 ó&   — | j                  dd«      S rw   rx   rz   s    rN   r|   z$_unattached_status.<locals>.<lambda>G  r‚   r}   r~   )r‹   rŒ   r�   r   ry   r   Ú	AVAILABLErg   r`   r   r   r“   ÚLOGÚdebugr)   r   Úon_supported_kernelÚLivepatchSupportÚUNSUPPORTEDr]   r”   r,   r•   )rV   r—   r™   rš   rY   rL   Údescr_overrides          rN   Ú_unattached_statusr¦     sK  € ô �}‰}œ^Ó,€Hä'¨Ó,€IØò "
ˆØ�<‰<˜Ô$Ü.×8Ñ8×>Ñ>‰Iä.×:Ñ:×@Ñ@ˆIð		Ü%¨#°H·L±LÀÈÓ4LÔMˆCð �H‰H˜Ò#Ü×-Ñ-Ó/Ü×)Ñ)×5Ñ5ò6ð !×<Ñ<Ó>‰Nà!ˆNà�Ñ×#Ñ#à Ÿ™ ]°H¸VÑ4DÓEØ"Ÿ™Ø(6Ø&ñ	õ	
ð7"
ðF ˆZÑ×ÑÑ"=ÐÔ>à€Oøô; ×2Ñ2ò 	Ü�I‰Iðà—‘˜VÐ%;Ó<ôò
 ð	ús   Á1D/Ä/9E,Å+E,c                 ó  — t         }|j                  j                  }t        j                  }t        j                  «       \  }}t        j                  «       xs g }|dkD  r8|j                  j                  }t        j                  j                  ||¬«      }nRt        j                  j                  r8|j                  j                  }d}t        j                   j                  |¬«      }|||| j"                  | j$                  | j&                  dœ}t(        j*                  j,                  j/                  «       }	t0        D ]B  }
t3        | |
«      sŒ|	|
   �Œt5        | |
«      }t7        |t8        «      r|j                  }||	|
<   ŒD |	|d   d<   |S )aG  Return 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_holderzconfiguration changes)Ú	operation)r5   r6   r    Úconfig_pathÚconfigr7   r¬   Ú	ua_config)r   ÚINACTIVErg   r   ÚNO_ACTIVE_OPERATIONSr   Úcheck_lock_infor    r�   ÚACTIVEÚ	LOCK_HELDÚformatr!   Úreboot_cmd_marker_fileÚ
is_presentÚREBOOTREQUIREDÚENABLE_REBOOT_REQUIRED_TMPLÚcfg_pathrV   r7   r"   Úuser_configÚpublic_configÚto_dictr   ÚhasattrÚgetattrÚ
isinstancer   )rV   Ú
userStatusÚ
status_valÚstatus_descÚlock_pidr©   Únotices_listrª   Úretr­   r   Úvals               rN   Ú_get_config_statusrÆ   L  sh  € ô (€JØ×$Ñ$×*Ñ*€JÜ×/Ñ/€KÜ"×2Ñ2Ó4Ñ€Xˆ{Ü—<‘<“>Ò' R€LØ�!‚|Ø×&Ñ&×,Ñ,ˆ
Ü×(Ñ(×/Ñ/Ø kð 0ó 
‰ô 
×	+Ñ	+×	6Ò	6Ø×.Ñ.×4Ñ4ˆ
Ø+ˆ	Ü×:Ñ:×AÑAØð Bó 
ˆð 'Ø(ØØ—|‘|Ø—'‘'Ø—L‘Lñ€Cô !×,Ñ,×:Ñ:×BÑBÓD€IÜ#ò !ˆÜ�3˜Õ ¨3¡Ñ!7Ü˜#˜sÓ#ˆCÜ˜#œtÔ$Ø—i‘i�Ø ˆI�cŠNð!ð "+€Cˆ�M�+Ñà€Jr}   Úshow_allc                 óx  — t        | «      j                  rt        | «      }nt        | «      }|j	                  t        | «      «       t        j                  «       rt        j                  j                  |«       |s9|j                  dg «      D �cg c]  }|j                  dd«      dk(  r|‘Œ }}||d<   |S c c}w )a  Return 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.
    r4   rY   rS   )r   Úis_attachedr›   r¦   r�   rÆ   r   Úwe_are_currently_rootr!   Ústatus_cache_fileÚwritery   )rV   rÇ   r—   rM   Úavailable_servicess        rN   r+   r+   {  s¯   € ô �CÓ×$Ò$Ü# CÓ(‰ä% cÓ*ˆà‡O�OÔ& sÓ+Ô,ä×!Ñ!Ô#Ü×%Ñ%×+Ñ+¨HÔ5áð $Ÿ<™<¨
°BÓ7ö
àØ�{‰{˜;¨Ó.°%Ò7ò ð
Ðð 
ð
  2ˆ�Ñà€Oùò
s   ÂB7r–   Úentitlement_namec                 óà   — | D ]d  }|j                  d«      |k(  sŒ|j                  d«      rdnd|j                  di «      j                  d«      rdnd|j                  di «      dœc S  ddi dœS )	z0Extract information from the entitlements array.Útyper*   rS   rR   ÚobligationsÚenableByDefaultr„   )r*   Úauto_enabledr„   rx   )r–   rÎ   rG   s      rN   Ú_get_entitlement_informationrÔ   ™  s„   € ð $ò ˆØ�?‰?˜6Ó"Ð&6Ó6à%0§_¡_°ZÔ%@™EÀdð #—‘ }°bÓ9×=Ñ=Ø)ôñ ð à*Ÿ™¨}¸bÓAñ
ò 
ðð ¨dÀ2ÑFÐFr}   Útokenc           
      óB	  — d}t        j                  t        «      }	 t        | |«      }|j                  di «      }|j                  di «      }|j                  |j                  dd«      |j                  d	d«      |j                  d
d«      |j                  dg «      dœ|j                  d	d«      |j                  d«      |j                  d
d«      |j                  dg «      dœddœ«       t        j                  t        j                  «      }	|j                  d«      rÎ|j                  d«      |d<   |d   }
|
|	z
  }|j                  «       dk  r�t         j"                  j%                  |d   d   |
j'                  t(        «      ¬«      }t*        j-                  |j.                  |j0                  ¬«       t*        j3                  t         j4                  dz   |j.                  z   dz   «       d}|j                  d«      rÎ|j                  d«      |d<   |d   }|	|z
  }|j                  «       dk  r�t         j6                  j%                  |d   d   |j'                  t(        «      ¬«      }t*        j-                  |j.                  |j0                  ¬«       t*        j3                  t         j4                  dz   |j.                  z   dz   «       d}t9        | «      }t;        |d„ ¬«      D �cg c]  }|d   s|d	   ‘Œ }}|j                  dg «      }|D ]‚  }|j                  d	d«      }	 t=        | |¬«      }tA        ||«      }|d   jC                  |j                  d |j0                  «      |jD                  |d!   |d"   |j0                  |vrd#nd$d%œ«       Œ„ |d   jG                  d&„ ¬«       tA        |d'«      }|d!   r|d(   j                  d)«      }|r||d   d*<   |j                  tI        | «      «       |s9|j                  dg «      D �cg c]  }|j                  dd#«      d#k(  r|‘Œ }}||d<   ||fS # t        j
                  $ r6}t        |d«      r#|j                  dk(  rt	        j                  «       ‚|‚d}~ww xY wc c}w # t        j>                  $ r Y �ŒŠw xY wc c}w )+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
    r   rT   i‘  Nro   ÚaccountInfor;   r9   r)   rq   r=   )r;   r)   r<   r=   rr   r@   T)r8   r?   rB   rs   r2   r8   )Úcontract_idÚdate)Ú	error_msgÚ
error_codeú
é   rt   r1   c                 ó   — | d   S )Nr)   © rz   s    rN   r|   z!simulate_status.<locals>.<lambda>÷  s
   € ¸¸&¹	€ r}   r~   rY   ÚresourceEntitlementsr€   r4   r�   r*   rÓ   rS   rR   )r)   r,   r*   rÓ   rY   c                 ó&   — | j                  dd«      S rw   rx   rz   s    rN   r|   z!simulate_status.<locals>.<lambda>  r‚   r}   rƒ   r„   r…   r>   )%r‹   rŒ   r�   r   r   ÚContractAPIErrorr¼   rT   ÚAttachInvalidTokenErrorry   r�   r   Únowr   ÚutcÚtotal_secondsr   ÚE_ATTACH_FORBIDDEN_EXPIREDr³   Ústrftimer   ÚeventÚerrorrK   r)   ÚinfoÚSTATUS_TOKEN_NOT_VALIDÚE_ATTACH_FORBIDDEN_NOT_YETr   r’   r   r“   rÔ   r”   r,   r•   rÆ   )rV   rÕ   rÇ   rÄ   r—   Úcontract_informationÚeÚcontract_infoÚaccount_inforä   Úexpiration_datetimeÚdeltarU   Úeffective_datetimer™   rš   rh   r–   rÎ   rL   Úentitlement_informationrƒ   r…   rM   rÍ   s                            rN   Úsimulate_statusrö   ­  s¬  € ð €CÜ�}‰}œ^Ó,€HðÜ7¸¸UÓCÐð )×,Ñ,¨^¸RÓ@€MØ'×+Ñ+¨M¸2Ó>€Là‡O�Oð $×'Ñ'¨¨bÓ1Ø%×)Ñ)¨&°"Ó5Ø+×/Ñ/°¸RÓ@Ø)×-Ñ-¨j¸"Ó=ñ	ð %×(Ñ(¨°Ó4Ø"×&Ñ& tÓ,Ø*×.Ñ.¨{¸BÓ?Ø(4×(8Ñ(8Ø(¨"ó)ñ	ð ñ	
ôô( �,‰,”x—|‘|Ó
$€CØ×Ñ˜Ô'Ø+×/Ñ/°Ó>ˆ�ÑØ& yÑ1ÐØ# cÑ)ˆØ×ÑÓ  AÒ%Ü×9Ñ9×@Ñ@Ø$ ZÑ0°Ñ6Ø(×1Ñ1Ô2IÓJð Aó ˆGô �K‰K '§+¡+¸'¿,¹,ˆKÔGÜ�J‰JÜ×/Ñ/°$Ñ6¸¿¹ÑDÀtÑKôð ˆCØ×Ñ˜Ô)Ø -× 1Ñ 1°/Ó Bˆ�ÑØ% kÑ2ÐØÐ(Ñ(ˆØ×ÑÓ  AÒ%Ü×9Ñ9×@Ñ@Ø$ ZÑ0°Ñ6Ø'×0Ñ0Ô1HÓIð Aó ˆGô �K‰K '§+¡+¸'¿,¹,ˆKÔGÜ�J‰JÜ×/Ñ/°$Ñ6¸¿¹ÑDÀtÑKôð ˆCä'¨Ó,€Iô ˜yÑ.AÔBöàØ˜Ò$ð 	�ÓðÐð ð !×$Ñ$Ð%;¸RÓ@€LØò 
ˆØ#Ÿ<™<¨°Ó3Ðð	Ü%¨#Ð4DÔEˆCô #?ØÐ*ó#
Ðð 	�Ñ×#Ñ#à Ÿ™ ]°C·H±HÓ=Ø"Ÿ™Ø3°JÑ?Ø 7¸Ñ Gà ŸX™XÐ-CÑC‘EÈñõ
	
ð
ð( ˆZÑ×ÑÑ"=ÐÔ>ä*¨<¸ÓC€GØˆzÒØ˜}Ñ-×1Ñ1°.ÓAˆÙØ9EˆH�ZÑ Ð!5Ñ6à‡O�OÔ& sÓ+Ô,áð $Ÿ<™<¨
°BÓ7ö
àØ�{‰{˜;¨Ó.°%Ò7ò ð
Ðð 
ð
  2ˆ�Ñà�Sˆ=ÐøôQ ×&Ñ&ò Ü�1�fÔ !§&¡&¨C¢-Ü×4Ñ4Ó6Ð6Øˆûðüòvøô ×2Ñ2ò 	Úð	üò6
s5   �P1 Ë'Q=Ì$RÐRÐ1Q:Ñ1Q5Ñ5Q:ÒRÒRÚstringc                 ón   — t         j                  j                  «       rt        j	                  | | «      S | S )z=Return colorized string if using a tty, else original string.)ÚsysÚstdoutÚisattyÚSTATUS_HUMANIZE_COLORIZEry   )r÷   s    rN   Úfor_human_colorizedrý   %  s5   € ô �:‰:×ÑÔô 	!×$Ñ$ V¨VÓ4ðð ðr}   Úcommandsc                 ó$  — d}| D ]  }|r|dz  }|dj                  |«      z  }Œ dj                  t        j                  |t        dz
  d¬«      «      }d|v rd	}d
}nd}d}dj	                  t
        j                  |||t
        j                  ¬«      S )Nr9   z && ú z \
é   z  )ÚwidthÚsubsequent_indentrÜ   z{
  z
}z{ z }z%{color}{prefix}{content}{suffix}{end})ÚcolorÚprefixÚcontentÚsuffixÚend)ÚjoinÚtextwrapÚwrapr   r³   r$   ÚDISABLEGREYÚENDC)rþ   r  ÚcmdÚwrapped_contentr  r  s         rN   Úcolorize_commandsr  .  s­   € Ø€GØò !ˆÙØ�vÑˆGØ�3—8‘8˜C“=Ñ ‰ð!ð —l‘lÜ�‰ØÔ,¨qÑ0ÀTô	
ó€Oð
 ˆÑØˆØ‰àˆØˆØ2×9Ñ9Ü×"Ñ"ØØØÜ�M‰Mð :ó ð r}   Úcolumn_dataÚheaderc           	      ód  — g }|r|j                  |«       t        | D �cg c]  }t        |d   «      ‘Œ c}«      }|dkD  r?dj                  |«      }|j	                  | D �cg c]  } |j                  |Ž ‘Œ c}«       |S |j	                  | D �cg c]  }|d   ‘Œ	 c}«       |S c c}w c c}w c c}w )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.
    r   z{{:>{}}}: {{}}rÝ   )r”   ÚmaxÚlenr³   Úextend)r  r  r  ÚpairÚtemplate_lengthÚtemplates         rN   Úget_section_column_contentr  J  s©   € ð €GÙØ�‰�vÔÜ°KÖ@¨Dœ3˜t A™w�<Ò@ÓA€OØ˜ÒØ#×*Ñ*¨?Ó;ˆØ�‰¸;ÖG°4˜˜Ÿ™¨Ò.ÒGÔHð €Nð 	�‰¨KÖ8 D˜˜Q›Ò8Ô9Ø€Nùò Aùò Hùò 9s   ŸB#Á B(ÂB-c                 óˆ   — | €t         j                  S 	 | j                  «       } | j	                  d«      S # t        $ r Y Œw xY w)Nz%c %Z)r   ÚSTATUS_CONTRACT_EXPIRES_UNKNOWNÚ
astimezoneÚ	Exceptionrè   )r2   s    rN   Úformat_expiresr  _  sM   € Ø€Ü×7Ñ7Ð7ðØ×$Ñ$Ó&ˆð ×Ñ˜GÓ$Ð$øô ò Ùðús   ”5 µ	AÁ Ar+   c                 óX  — | j                  d«      �sg| j                  d«      rÏ| j                  dd«      st        j                  S t        j	                  t        j
                  t        j                  t        j                  t        j                  t        j                  ¬«      g}| j                  dg «      D ]&  }|j                  t        j                  d)i |¤Ž«       Œ( dj                  |«      S | j                  dd«      st        j                  g}nìt        j	                  t        j
                  t        j                  t        j                  ¬«      g}| j                  dg «      D ]”  }|j                  d«      }|r|n|j                  d	d
«      }|j                  d«      dk(  rt        j                  nt        j                  }|j                  t        j	                  |j                  dd
«      ||¬«      «       Œ– | j                  d«      }|r0|j                  t        j                  «       |j!                  |«       | j                  d«      rt|j                  dt        j"                  z   «       t%        | j                  di «      j'                  «       «      D ]&  \  }}	|j                  dj	                  ||	«      «       Œ( |s!|j!                  d
t        j(                  g«       |j!                  d
t        j*                  j,                  g«       t/        j0                  «       t.        j2                  j4                  k(  r!|j!                  d
t        j6                  g«       dj                  |«      S g }
d}| j                  dd«      st        j                  g}�nØt8        g}| j                  dg «      D �]»  }|j                  dd
«      }|j                  d«      }|r|n|j                  d	d
«      }|j                  dd
«      t;        |«      t;        |j                  dd
«      «      |dœ}|j                  dd«      }|�%|j                  dd«      }|�|
j                  |«       |j                  d«      }|r|sd}dj	                  |d   «      |d<   |j                  t=        j                  d)i |¤Ž«       |s�Œ|s�Œ	t?        |j'                  «       «      D ]—  \  }\  }}|tA        |«      dz
  k7  rdnd}|j                  tB        j	                  ||j                  d«      t;        |j                  dd
«      «      t;        |j                  dd
«      «      |j                  d	d
«      ¬«      «       Œ™ �Œ¾ |r0|j                  d
«       |j                  t        jD                  «       | j                  d«      stA        |
«      dkD  rs|j                  d
«       |j                  t        j                  «       | j                  d«      }|r|j!                  |«       tA        |
«      dkD  r|j!                  |
«       | j                  d«      rt|j                  dt        j"                  z   «       t%        | j                  di «      j'                  «       «      D ]&  \  }}	|j                  dj	                  ||	«      «       Œ( |j                  d
«       |sA|r |j                  t        jF                  «       n|j                  t        j(                  «       |j                  t        jH                  j	                  d¬ «      «       g }| j                  d!i «      j                  dd"«      }|r!|j                  t        jJ                  |f«       | j                  d#i «      j                  dd"«      }|r!|j                  t        jL                  |f«       | j                  d$d«      d%k7  r…|j                  t        jN                  tQ        | j                  d&«      «      f«       | j                  d#i «      j                  d'd"«      }|j                  t        jR                  t;        |«      f«       |r,|j                  d
«       |j!                  tU        |¬(«      «       dj                  |«      S )*z&Format status dict for tabular output.r0   rB   r4   N)r)   rY   r*   rÓ   r,   rÜ   )r)   rY   r,   rX   r,   r9   rY   rS   r)   r    r7   z{}: {}Fr*   r+   r(   r[   rU   r\   Tz{}*rÝ   u   â”œu   â””)Úmarkerr)   r*   r+   r,   r   zpro enable <service>)Úcommandr?   Úunknownr8   r3   Úfreer2   r>   )r  rß   )+ry   r   Ú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’   rd   ÚSTATUS_ALL_HINTÚE_UNATTACHEDrK   r   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  rM   r¥   r,   rY   r    r   rg   Úservice_warningsÚhas_variantsrl   r*   Úfmt_argsr[   Úwarning_messager\   ÚidxÚ_Úvariantr!  ÚpairsÚaccount_nameÚcontract_namer>   s                             rN   Úformat_tabularrI  i  sb  € à�:‰:�jÕ!Ø�:‰:�kÔ"Ø—:‘:˜j¨$Ô/Ü×<Ñ<Ð<ô &×,Ñ,Ü!×0Ñ0Ü&×7Ñ7Ü%×5Ñ5Ü!)×!=Ñ!=Ü (× ;Ñ ;ð -ó ðˆGð "Ÿ:™: j°"Ó5ò H�Ø—‘Ô4×;Ñ;ÑF¸gÑFÕGðHð —9‘9˜WÓ%Ð%à�z‰z˜* dÔ+Ü×<Ñ<Ð=‰Gô '×-Ñ-Ü!×0Ñ0Ü&×7Ñ7Ü (× ;Ñ ;ð .ó ðˆGð "Ÿ:™: j°"Ó5ò �Ø!(§¡Ð-CÓ!D�ñ &ñ #à Ÿ™ ]°BÓ7ð ð —{‘{ ;Ó/°5Ò8ô ×+Ò+ä!×/Ñ/ð ð
 —‘Ü*×1Ñ1Ø$Ÿ[™[¨°Ó4Ø"+Ø$/ð 2ó õðð( —*‘*˜YÓ'ˆÙØ�N‰Nœ8×2Ñ2Ô3Ø�N‰N˜7Ô#à�:‰:�jÔ!Ø�N‰N˜4¤(×":Ñ":Ñ:Ô;Ü$ V§Z¡Z°
¸BÓ%?×%EÑ%EÓ%GÓHò <‘
��UØ—‘˜xŸ™¨s°EÓ:Õ;ð<ñ Ø�N‰N˜B¤× 8Ñ 8Ð9Ô:à�‰˜œH×1Ñ1×5Ñ5Ð6Ô7ä×)Ñ)Ó+Ü×)Ñ)×5Ñ5ò6ð �N‰NØ”X×GÑGÐHôð �y‰y˜Ó!Ð!àÐØ€LØ�:‰:�j $Ô'Ü×8Ñ8Ð9Šä �/ˆØ$Ÿj™j¨°RÓ8ó *	ˆNØ%×)Ñ)¨*°bÓ9ˆHØ+×/Ñ/Ð0FÓGˆNñ "ñ à#×'Ñ'¨°rÓ:ð ð '×*Ñ*¨6°2Ó6Ü/°Ó9Ü-Ø"×&Ñ& x°Ó4óð  +ñˆHð %×(Ñ(¨°DÓ9ˆGØÐ"Ø")§+¡+¨i¸Ó">�Ø"Ð.Ø$×+Ñ+¨OÔ<Ø%×)Ñ)¨*Ó5ˆHÙ¡Ø#�Ø#(§<¡<°¸Ñ0@Ó#A�˜Ñ à�N‰Nœ;×-Ñ-Ñ9°Ñ9Ô:Û›HÜ)2°8·>±>Ó3CÓ)Dò Ñ%�C™˜!˜WØ&)¬S°«]¸QÑ->Ò&>™UÀE�FØ—N‘NÜ+×2Ñ2Ø#)Ø!(§¡¨VÓ!4Ü%8Ø '§¡¨J¸Ó ;ó&ô $7Ø '§¡¨H°bÓ 9ó$ð )0¯©°MÀ2Ó(Fð 3ó 
õòð9*	ñX Ø�‰�rÔØ�‰”x×;Ñ;Ô<à‡z�z�)Ô¤Ð$4Ó 5¸Ò 9Ø�‰�rÔØ�‰”x×.Ñ.Ô/Ø—*‘*˜YÓ'ˆÙØ�N‰N˜7Ô#ÜÐÓ  1Ò$Ø�N‰NÐ+Ô,à‡z�z�*ÔØ�‰�tœh×6Ñ6Ñ6Ô7Ü  §¡¨J¸Ó!;×!AÑ!AÓ!CÓDò 	8‰JˆC�Ø�N‰N˜8Ÿ?™?¨3°Ó6Õ7ð	8à‡N�N�2ÔáÙØ�N‰Nœ8×AÑAÕBà�N‰Nœ8×3Ñ3Ô4à‡N�NÜ×3Ñ3×:Ñ:Ø*ð 	;ó 	
ôð
 €Eà—:‘:˜i¨Ó,×0Ñ0°¸ÓC€LÙØ�‰”h×4Ñ4°lÐCÔDà—J‘J˜z¨2Ó.×2Ñ2°6¸9ÓE€MÙØ�‰”h×9Ñ9¸=ÐIÔJà‡z�z�(˜DÓ! VÒ+Ø�‰ä×2Ñ2Ü˜vŸz™z¨)Ó4Ó5ðô	
ð $ŸZ™Z¨
°BÓ7×;Ñ;Ø  )ó
Ðð 	�‰ä×4Ñ4Ü#Ð$6Ó7ðô	
ñ Ø�‰�rÔØ�‰Ô1¸eÔDÔEà�9‰9�WÓÐr}   c                 ó  — t        | «      }d}t        «       }||d<   |D ]3  }|d   |k(  s|j                  d«      |k(  sŒ 	 t        | |d   ¬«      }|} n |€t	        j                  |¬«      ‚t        | «      j                  r t        i | «      }|d   }|d   |d<   ||d<   n?|d   rt        j                  j                  }	nt        j                  j                  }	|	|d<   j                  |d	<   |S # t        j
                  $ r Y Œèw xY w)
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*   rY   Úhelp)r   r   ry   r   r   r“   ÚNoHelpContentr   rÉ   re   r   rŸ   rg   r`   Ú	help_info)
rV   r)   r™   Úhelp_resourceÚresponse_dictrš   Úhelp_entrl   Ú
status_msgrY   s
             rN   rK  rK  %  s0  € ô (¨Ó,€IØ€Mô
  “M€MØ €M�&Ñàò ˆØ�FÑ˜tÒ# x§|¡|°MÓ'BÀdÓ'JðÜ.°3¸XÀfÑ=MÔN�ð %ˆMÙðð ÐÜ×&Ñ&¨DÔ1Ð1ä�CÓ×$Ò$Ü1°(¸BÀÓDˆØ# HÑ-ˆ
à$2°:Ñ$>ˆ�jÑ!Ø",ˆ�hÒð ˜Ò%Ü.×8Ñ8×>Ñ>‰Iä.×:Ñ:×@Ñ@ˆIà%.ˆ�kÑ"à$×.Ñ.€M�&ÑØÐøô1 ×6Ñ6ò Ùðús   Á C2Ã2DÄD)F)N)rr‹   Úloggingrù   r
  Úcollectionsr   r   r   Úenumr   Útypingr   r   r	   r
   r   Úuaclientr   r   r   r   r   r   r   Ú(uaclient.api.u.pro.status.is_attached.v1r   Úuaclient.configr   r   Úuaclient.contractr   r   Úuaclient.defaultsr   r   Úuaclient.entitlementsr   Ú(uaclient.entitlements.entitlement_statusr   r   r   r   Úuaclient.filesr   r    r!   r"   Úuaclient.files.noticesr#   Úuaclient.messagesr$   Úget_event_loggerré   Ú	getLoggerÚreplace_top_level_logger_nameÚ__name__r    Ú	ESSENTIALÚSTANDARDÚADVANCEDr±   rg   ÚOKGREENÚSTATUS_STATUS_ENABLEDr  r®   ÚFAILÚSTATUS_STATUS_DISABLEDra   r  ÚSTATUS_STATUS_INAPPLICABLEr`   ÚSTATUS_STATUS_UNAVAILABLErc   ÚWARNINGYELLOWÚSTATUS_STATUS_WARNINGÚENTITLEDÚSTATUS_ENTITLED_ENTITLEDr_   ÚSTATUS_ENTITLED_UNENTITLEDÚSTATUS_SUPPORT_ESSENTIALÚSTATUS_SUPPORT_STANDARDÚSTATUS_SUPPORT_ADVANCEDrü   r,  r&  r³   r'  r)  ÚSTATUS_STATUSr+  r4  r5  r7  Úget_versionr¯   r�   rO   Ústrre   r›   r¦   rÆ   Úboolr+   rÔ   Úintrö   rý   r  r  r  rI  rK  rß   r}   rN   ú<module>rz     s‚  ðÛ Û Û 
Û Ý #ß 'Ý ß 3Õ 3÷÷ ñ õ Bß :ß Oß GÝ 5÷ó ÷ó õ *Ý &à%ˆ×%Ñ%Ó'€Ø€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€ð €	Ø€Ø€ð
 ×Ñ×!Ñ!Ø×Ñ˜8×9Ñ9Ñ9¸H¿M¹MÑIà×Ñ×#Ñ#Ø�‰˜×7Ñ7Ñ7¸(¿-¹-ÑGà×!Ñ!×'Ñ'Ø×ÑØ
×
-Ñ
-ñ	.à
�-‰-ñ	ð × Ñ ×&Ñ&Ø×ÑØ
×
,Ñ
,ñ	-à
�-‰-ñ	ð ×Ñ×"Ñ"Ø×Ñ ×!?Ñ!?Ñ?À(Ç-Á-ÑOà×Ñ×!Ñ!Ø×Ñ˜8×<Ñ<Ñ<¸x¿}¹}ÑLà×Ñ×#Ñ#Ø×ÑØ
×
-Ñ
-ñ	.à
�-‰-ñ	ð ˆx×ÑØ×'Ñ'ñ(à‡m�mñð ˆh×ÑØ×&Ñ&ñ'à‡m�mñð ˆh×ÑØ×&Ñ&ñ'à‡m�mñðE%Ð ðP DÐ ðNÐ ð G×MÑMØ	×	 Ñ	 Ø×%Ñ%Ø×!Ñ!Ø×+Ñ+ð	 Nó €ð E€àCð ðØ
ð #ðð �uðð Ð"ˆw×"Ñ"Ó$ð	ð
 �$ðð �ðð �ðð ˆtðð ˆdðð �ðð Ð.×7Ñ7×=Ñ=ðð ˜×6Ñ6ðð �ðð ˆrðð ØØØØØ.×;Ñ;×AÑAñðð, ØØØØ "ñ	ð-ð8 �ð9€ò@ð8à	ˆ#ˆsˆ(�^ó8ðvD˜(ð D t¨C°¨H¡~ó DðN+˜Hð +¨¨c°3¨h©ó +ð\,˜t C¨ H™~ó ,ñ^�ð  Dð °T¸#¸s¸(±^ó ð<GØ�t˜C ˜H‘~Ñ&ðGØ:=ðGà	ˆ#ˆsˆ(�^óGð* ',ñuØðuØ#ðuà
ˆ4��S�‰>˜3ÐÑóuðp ð ¨ó ð  T¨#¡Y¡ð °Có ð: AEñØ�e˜C ˜H‘oÑ&ðØ08¸±ðà	ˆ#�Yóð*%˜H XÑ.ð %°3ó %ñy˜4  S ™>ð y°Tð yÀcó yóx,r}   