Ë
    GKÕiAK  ã                   óˆ  — d dl Z d dl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mZmZmZ d dlmZmZ d dlmZmZmZ d dlmZmZ d dlmZ d dlm Z  d d	l!m"Z"m#Z#m$Z$ d d
l%m&Z& d dl'm(Z(  ejR                   ejT                  e+«      «      Z, edde-fde-fdeee.ef      fg«      Z/de
j`                  de.de-fd„Z1	 d@de
j`                  de-dee	jd                     fd„Z3de
j`                  de.dee   dee   de.de.de.fd„Z4de-dee.ef   dee.   d ee.   d!eee.ef      d"eee.ef      de-fd#„Z5de
j`                  d$e.de.de-de-de-d%eee.      dee   dee   d&e/fd'„Z6e jn                  e jp                   e jr                  e jt                  «      d&e;fd(„«       «       «       Z< e$d)ejz                  ej|                  e<e&j~                  d* e# e"dej€                  jƒ                  d+j…                   ej†                   e
j`                  «       ¬,«      «      ¬-«      d.d/¬0«       e"d1ejˆ                  d2¬3«       e"d4ejŠ                  jƒ                  d)¬5«      d2¬3«       e"d6ejŒ                  d2¬3«       e"d7ejŽ                  d2¬3«       e"d8ej�                  jƒ                  d9¬:«      d.d9d;gd9¬<«       e"d=ej’                  d.¬3«      g¬>«      g¬?«      ZJy)Aé    N)ÚAnyÚDictÚListÚ
NamedTupleÚOptional)
ÚapiÚconfigÚcontractÚentitlementsÚevent_loggerÚ
exceptionsÚlockÚmessagesÚstatusÚutil)ÚServiceWithDependenciesÚ_dependencies)ÚEnableOptionsÚEnableResultÚ_enable)ÚEnabledServiceÚ_enabled_services)Ú_is_attached)Úcli_util)ÚProArgumentÚProArgumentGroupÚ
ProCommand)ÚHelpCategory)Úmachine_tokenÚ_EnableOneServiceResultÚsuccessÚneeds_rebootÚerrorÚcfgÚvariantÚ
assume_yesc                 óp  — t        j                  |«      }t        j                  | «      }t	        j
                  | |j                  «       «      }|s |t        j                  «       y t        | «      j                  }t        | «      j                  }|D ]   }	t        | |	j                  |d||d ||¬«	       Œ" y )NF)	r$   Úent_namer%   Úaccess_onlyr&   Újson_outputÚ
extra_argsÚenabled_servicesÚall_dependencies)r   Ú&create_interactive_only_print_functionr   Úget_machine_token_filer
   Úget_enabled_by_default_servicesr   r   ÚNO_SERVICES_TO_AUTO_ENABLEr   r,   r   ÚservicesÚ_enable_one_serviceÚname)
r$   r%   r&   r*   Úinteractive_only_printÚmachine_token_fileÚservices_to_be_enabledr,   r-   Úenable_by_default_services
             ú5/usr/lib/python3/dist-packages/uaclient/cli/enable.pyÚ_auto_enable_servicesr:   0   s¼   € ô &×LÑLØóÐô '×=Ñ=¸cÓBÐÜ%×EÑEØÐ×,Ñ,Ó.óÐñ "Ùœx×BÑBÔCØä(¨Ó-×>Ñ>ÐÜ$ SÓ)×2Ñ2Ðà%;ò 
Ð!ÜØØ.×3Ñ3ØØØ!Ø#ØØ-Ø-ö
	
ñ
ó    r)   Úprogress_objectc                 óÞ  — t        j                  |«      }t        j                  | d||¬«      }d}d}	 t	        j
                  d¬«      5  |j                  |¬«      \  }}ddd«       |sB|�|j                  �|j                  }	nt        j                  }	t        j                  d|	¬«      ‚t        dgg dg ¬	«      S # 1 sw Y   Œ]xY w# t        $ r}t	        j                  «        |‚d}~ww xY w)
a  
    Landscape gets special treatment because it currently not supported by our
    enable API. This function is a temporary workaround until we have a proper
    API for enabling landscape, which will happen after Landscape is fully
    integrated with the contracts backend.
    Ú	landscape)Úcalled_namer)   r+   FNzcli.enable._enable_landscape)Úlock_holder)Úprogress)ÚserviceÚreason)ÚenabledÚdisabledÚreboot_requiredr   )r   ÚProgressWrapperr   ÚLandscapeEntitlementr   Ú	RetryLockÚenableÚ	ExceptionÚclear_lock_file_if_presentÚmessager   ÚGENERIC_UNKNOWN_ISSUEr   ÚEntitlementNotEnabledErrorr   )
r$   r)   r+   r<   rA   r>   r!   Úfail_reasonÚerC   s
             r9   Ú_enable_landscaperR   S   s  € ô ×"Ñ" ?Ó3€HÜ×1Ñ1ØØØØô	€Ið €GØ€KðÜ�^‰^Ø6ô
ñ 	Gð $-×#3Ñ#3¸XÐ#3Ó#FÑ ˆG�[÷	Gñ ØÐ" {×':Ñ':Ð'FØ ×(Ñ(‰Fä×3Ñ3ˆFÜ×3Ñ3Ø¨ô
ð 	
ô Ø�¨¸EÈBôð ÷!	Gð 	Gûô ò Ü×'Ñ'Ô)Øˆûðús/   ´C Á
B<Á C Â<CÃC Ã	C,ÃC'Ã'C,rB   r-   r,   r?   Úservice_titlec                 óÎ  ‡‡— g }g }|D �	cg c]  }	|	j                   ‘Œ }
}	t        ˆfd„|D «       d «      }|�b|j                  D �	cg c]  }	|	j                   |
v r|	j                   ‘Œ }}	|j                  D �	cg c]  }	|	j                   |
vr|	j                   ‘Œ }}	|D ]‰  }t	        j
                  | j                  d¬«      }t        j                  | |«      }t        j                  j                  ||¬«      }|st	        j                  |¬«      rŒtt        j                  ||¬«      ‚ |D ]f  }t        j                  | |«      }t        j                  j                  ||¬«      }t	        j                  |¬«      rŒQt        j                   ||¬«      ‚ t        ˆˆfd„|D «       d «      }|�­‰�ªt        j                  | ‰‰«      }t        j                  | ‰|j"                  «      }t	        j
                  | j                  d¬«      }t        j                  j                  ||¬«      }|st	        j                  |¬«      st        j                  ||¬«      ‚y y y c c}	w c c}	w c c}	w )Nc              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­w©N)r4   )Ú.0ÚsrB   s     €r9   ú	<genexpr>z1prompt_for_dependency_handling.<locals>.<genexpr>�   s   øè ø€ Ò:ˆq¨¯©°'Ó(9ŒÑ:ùs   ƒ˜z features.block_disable_on_enable)r	   Úpath_to_value)Úservice_being_enabledÚincompatible_service)Úmsg)r[   Úrequired_servicec              3   óv   •K  — | ]0  }|j                   ‰k(  r|j                  r|j                  ‰k7  r|–— Œ2 y ­wrV   ©r4   Úvariant_enabledÚvariant_name)rW   rX   rB   r%   s     €€r9   rY   z1prompt_for_dependency_handling.<locals>.<genexpr>¼   s:   øè ø€ ò 	
àØ�v‰v˜Ò Ø×!Ò!Ø—‘ 'Ò)ô	 ñ	
ùs   ƒ69)r4   ÚnextÚincompatible_withÚ
depends_onr   Úis_config_value_truer$   r   Ú	get_titler   ÚINCOMPATIBLE_SERVICEÚformatÚprompt_for_confirmationr   ÚIncompatibleServiceStopsEnableÚREQUIRED_SERVICEÚRequiredServiceStopsEnablerb   )r$   rB   r-   r,   r?   r%   rS   Úincompatible_servicesÚrequired_servicesrX   Úenabled_service_namesÚdependenciesr\   Úcfg_block_disable_on_enableÚincompatible_service_titleÚuser_msgr^   Úrequired_service_titlera   Úto_be_enabled_titleÚenabled_variant_titles    `   `               r9   Úprompt_for_dependency_handlingrx      s¨  ù€ ð ÐØÐØ-=Ö>¨˜QŸV›VÐ>ÐÐ>äÛ:Ð$Ô:¸Dó€Lð Ðð "×3Ñ3ö!
àØ�v‰vÐ.Ñ.ð �F‹Fð!
Ðð !
ð "×,Ñ,ö
àØ�v‰vÐ2Ñ2ð �F‹Fð
Ðð 
ð !6ò ÐÜ&*×&?Ñ&?Ø—7‘7Ø<ô'
Ð#ô &2×%;Ñ%;ØÐ%ó&
Ð"ô ×0Ñ0×7Ñ7Ø"/Ø!;ð 8ó 
ˆñ '¬d×.JÑ.JØö/
ô ×;Ñ;Ø&3Ø%?ôð ðð( .ò 
ÐÜ!-×!7Ñ!7¸Ð=MÓ!NÐÜ×,Ñ,×3Ñ3Ø"/Ø3ð 4ó 
ˆô ×+Ñ+°Ö9Ü×7Ñ7Ø&3Ø!7ôð ð
ô ô	
à%ô	
ð 	ó	€Oð Ð" wÐ':Ü*×4Ñ4°S¸'À7ÓKÐÜ ,× 6Ñ 6Ø�˜/×6Ñ6ó!
Ðô '+×&?Ñ&?Ø—7‘7Ø<ô'
Ð#ô ×0Ñ0×7Ñ7Ø"5Ø!6ð 8ó 
ˆñ '¬d×.JÑ.JØõ/
ô ×;Ñ;Ø&9Ø%:ôð ð/
ð (;Ð"ùòw ?ùò!
ùò

s   ‹IÁ!IÁ6!I"r*   Újson_responseÚprocessed_servicesÚfailed_servicesÚerrorsÚwarningsc                 óâ   — | rm|j                  «        |j                  «        |rdnd|d<   ||d<   ||d<   ||d<   ||d<   t        t        j                  |t        j
                  d¬	«      «       y y )
Nr!   ÚfailureÚresultrz   r{   r|   r}   T)ÚclsÚ	sort_keys)ÚsortÚprintÚjsonÚdumpsr   ÚDatetimeAwareJSONEncoder)r*   ry   rz   r{   r|   r}   r!   s          r9   Ú_print_json_outputrˆ   Û   s   € ñ Ø×ÑÔ!Ø×ÑÔá/6¡)¸Iˆ�hÑØ.@ˆÐ*Ñ+Ø+:ˆÐ'Ñ(Ø"(ˆ�hÑØ$,ˆ�jÑ!äÜ�J‰JØÜ×1Ñ1Øôõ	
ð r;   r(   r+   Úreturnc	                 ó  ‡‡— t        j                  |«      }	t        j                  | |‰||¬«      }
|
j                  Š|
j
                  }t        ˆˆfd„|D «       d «      }|�t        j                  j                  |¬«      } |	|j                  «        |	t        j                  j                  |¬«      «       t        ddd||j                  |j                  dœ¬«      S |s	 t        | ‰|||‰|¬«       	 |rd }nt        j$                  |¬	«      }‰d
k(  rt'        | |||¬«      }nt)        t+        |‰|¬«      | |¬«      }t-        j,                  | ¬«       |r' |	t        j.                  j                  |¬«      «       n& |	t        j0                  j                  |¬«      «       |j2                  }|r& |	t        j4                  j                  d¬«      «       |j                  D ]
  } |	|«       Œ t        d|d ¬«      S # t        j                  $ re}t         j#                  |«        |	|j                  «        |	t        j                  j                  |¬«      «       t        ddd ¬«      cY d }~S d }~ww xY w# t        j6                  $ rj}|j8                  d   }|d   }|d   }|d   } |	|«        |	t        j                  j                  |¬«      «       t        ddd||||dœ¬«      cY d }~S d }~wt        j                  $ rt} |	|j                  «        |	t        j                  j                  |¬«      «       t        ddd||j                  |j:                  |j8                  dœ¬«      cY d }~S d }~ww xY w)N)r%   r)   r+   c              3   óz   •K  — | ]2  }|j                   ‰k(  r!‰r|j                  r|j                  ‰k(  r|–— Œ4 y ­wrV   r`   )rW   rX   Ú	real_namer%   s     €€r9   rY   z&_enable_one_service.<locals>.<genexpr>  s<   øè ø€ ò 	
àØ�v‰v˜Ò"áØ×%Ò%¨!¯.©.¸GÒ*Cô ñ	
ùs   ƒ8;)ÚtitleFrB   )ÚtyperB   rM   Úmessage_code)r!   r"   r#   )r?   r%   rS   )r&   r>   )r+   r<   )rB   r%   r)   )r<   ©r$   Úinstall)Ú	operationTrC   Úcoder�   Úadditional_info©rŽ   rB   rM   r�   r”   )r   r.   r   Úentitlement_factoryr4   r�   rc   r   ÚALREADY_ENABLEDri   r]   ÚENABLE_FAILEDr    rx   r   ÚUbuntuProErrorÚLOGÚ	exceptionÚCLIEnableDisableProgressrR   r   r   r   ÚACCESS_ENABLED_TMPLÚENABLED_TMPLrF   ÚENABLE_REBOOT_REQUIRED_TMPLrO   r”   Úmsg_code)r$   r(   r%   r)   r&   r*   r+   r,   r-   r5   ÚentÚ	ent_titleÚalready_enabledr]   rQ   rA   Úenable_resultr"   rM   rC   Úerr_codeÚerr_msgÚerr_inforŒ   s     `                    @r9   r3   r3   ÷   s‰  ù€ ô &×LÑLØóÐô ×
*Ñ
*ØØØØØô€Cð —‘€IØ—	‘	€Iäô	
à%ô	
ð 	ó€Oð Ð"Ü×&Ñ&×-Ñ-°IÐ-Ó>ˆÙ˜sŸw™wÔ'Ùœx×5Ñ5×<Ñ<À9Ð<ÓMÔNÜ&ØØà!Ø#ØŸ7™7Ø #§¡ñ	ô	
ð 		
ñ ð	Ü*ØØØ Ø Ø$ØØ'õð*S
ÙØ‰Hä×8Ñ8ÀJÔOˆHà˜Ò#Ü-ØØØ%Ø (ô	‰Mô $ÜØ$Ø#Ø +ôð
 Ø (ôˆMô 	�‰˜#ÕáÙ"Ü×,Ñ,×3Ñ3¸)Ð3ÓDõñ #Ü×%Ñ%×,Ñ,°9Ð,Ó=ôð %×4Ñ4ˆÙÙ"Ü×4Ñ4×;Ñ;Ø'ð <ó ôð %×-Ñ-ò 	,ˆGÙ" 7Õ+ð	,ô 'ØØ%Øô
ð 	
øôu ×(Ñ(ò 
	Ü�M‰M˜!ÔÙ" 1§5¡5Ô)Ù"Ü×&Ñ&×-Ñ-°IÐ-Ó>ôô +ØØ"Øôõ ûð
	ûô@ ×0Ñ0ò 
Ø×"Ñ" 8Ñ,ˆØ˜&‘>ˆØ˜‘/ˆØÐ+Ñ,ˆÙ˜wÔ'Ùœx×5Ñ5×<Ñ<À9Ð<ÓMÔNÜ&ØØà!Ø#Ø"Ø (Ø#+ñô

õ 
	
ûô ×$Ñ$ò 
Ù˜qŸu™uÔ%Ùœx×5Ñ5×<Ñ<À9Ð<ÓMÔNÜ&ØØà!Ø#ØŸ5™5Ø !§
¡
Ø#$×#4Ñ#4ñô

õ 
	
ûð
úsR   Ã$H Ã7D	I< ÈI9ÈAI4É.I9É4I9É<M>ÊAK4Ë.M>Ë4M>Ì
A)M9Í3M>Í9M>c                ód  — g }g }g }g }t         j                  ddœ}| j                  dk(  }t        j                  |«      }	t        | dd«      }
| j                  }| j                  }| j                  }|
r|rt        j                  dd¬«      ‚|
r|rt        j                  dd	¬«      ‚|r|rt        j                  dd	¬«      ‚ |	t        j                  «       	 t        j                  |d¬
«       t/        |«      j0                  sbt        j2                  «       } |	|j*                  «       |j'                  d|j*                  |j4                  dœ«       t7        ||||||d¬«       y|rt9        |dd|¬«      S t        | dg «      }|st        j:                  «       ‚t=        j>                  ||«      \  }}tA        |«      jB                  }tE        |«      jF                  }d}t=        jH                  ||«      D ]�  }tK        |||
||||jM                  d«      ||«	      }|jN                  r$|j'                  |«       |jP                  sŒOd|d<   ŒUd}|j'                  |«       |jR                  €Œu|j'                  |jR                  «       Œ‘ |red}||z  }t=        jT                  ||¬«      } |	|j*                  «       |j'                  dd|j*                  |j4                  |jV                  dœ«       t        jX                  |«      }|j[                  «        t7        |||||||¬«       |rdS dS # t        j                  t        j                   f$ r` t"        j%                  dd¬«       |j'                  dt        j(                  j*                  t        j(                  j,                  dœ«       Y �Œ¾w xY w)z^Perform the enable action on a named entitlement.

    @return: 0 on success, 1 otherwise
    F)Ú_schema_versionr"   r…   r%   Ú ú--access-onlyú	--variant)Úoption1Úoption2ú--auto)ÚverbosezFailed to refresh contractT)Úexc_infoÚsystem)rŽ   rM   r�   )r!   é   )r$   r%   r&   r*   rB   r+   r"   Nr�   r•   r   ).r   ÚJSON_SCHEMA_VERSIONri   r   r.   Úgetattrr)   r&   Úautor   ÚInvalidOptionCombinationr   ÚREFRESH_CONTRACT_ENABLEr
   ÚrefreshÚConnectivityErrorr™   rš   ÚwarningÚappendÚE_REFRESH_CONTRACT_FAILUREr]   r4   r   Úis_attached_and_contract_validÚContractExpiredErrorr    rˆ   r:   ÚNoServicesToEnabler   Úget_valid_entitlement_namesr   r,   r   r2   Úorder_entitlements_for_enablingr3   Úgetr!   r"   r#   Ú*create_enable_entitlements_not_found_errorr”   ÚUAContractClientÚupdate_activity_token)Úargsr$   Úkwargsrz   r{   r|   r}   ry   r*   r5   r%   r)   r&   r¶   Úexpired_errÚnamesÚentitlements_foundÚentitlements_not_foundr,   r-   Úretr(   r€   ÚerrÚcontract_clients                            r9   Úaction_enablerÐ   ™  s²  € ð ÐØ€OØ€FØ€Hô (×;Ñ;Øñ€Mð
 —+‘+ Ñ'€Kô
 &×LÑLØóÐô �d˜I rÓ*€GØ×"Ñ"€KØ—‘€JØ�9‰9€Dá‘;Ü×1Ñ1Ø#¨[ô
ð 	
ñ ‘4Ü×1Ñ1Ø¨ô
ð 	
ñ ‘tÜ×1Ñ1Ø#¨Xô
ð 	
ñ œ8×;Ñ;Ô<ð
Ü×Ñ˜ eÕ,ô ˜Ó×;Ò;Ü ×5Ñ5Ó7ˆÙ˜{Ÿ™Ô/Ø�‰à Ø&Ÿ?™?Ø +× 4Ñ 4ñô	
ô 	ØØØØØØØõ	
ð áÜ$ØØØØ#ô	
ð 	
ô �D˜) RÓ(€EÙÜ×+Ñ+Ó-Ð-ô
 	×0Ñ0°¸Ó<ñØØä(¨Ó-×>Ñ>ÐÜ$ SÓ)×2Ñ2Ðà
€CÜ ×@Ñ@ØÐóò ,ˆô %ØØØØØØØ�J‰J�|Ó$ØØó

ˆð �>Š>Ø×%Ñ% hÔ/Ø×"Ó"Ø04�˜nÒ-àˆCØ×"Ñ" 8Ô,Ø�|‰|Ñ'Ø—‘˜fŸl™lÕ+ð-,ñ0 ØˆØÐ1Ñ1ˆÜ×EÑEØ"¨ô
ˆñ 	˜sŸw™wÔ'Ø�‰à ØØŸ7™7Ø #§¡Ø#&×#6Ñ#6ñô	
ô ×/Ñ/°Ó4€OØ×)Ñ)Ô+äØØØØØØØõñ ˆ1Ð˜ÐøôU ×(Ñ(¬*×*CÑ*CÐDò 	
ä�‰Ð0¸4ˆÔ@Ø�‰à Ü#×>Ñ>×BÑBÜ (× CÑ C× HÑ Hñ÷	
ð	
ús   ÃL, Ì,A?N/Î.N/rJ   é   z, r�   )ÚoptionsÚstoreÚ*)ÚhelpÚactionÚnargsr«   Ú
store_true)rÕ   rÖ   z--assume-yes)Úcommandr¯   z--betaz--formatÚcli)Údefaultr…   )rÕ   rÖ   ÚchoicesrÛ   r¬   )Ú	arguments)rÕ   ÚdescriptionrÖ   Úhelp_categoryÚhelp_positionÚargument_groupsrV   )Kr…   ÚloggingÚtypingr   r   r   r   r   Úuaclientr   r	   r
   r   r   r   r   r   r   r   Ú+uaclient.api.u.pro.services.dependencies.v1r   r   Ú%uaclient.api.u.pro.services.enable.v1r   r   r   Ú-uaclient.api.u.pro.status.enabled_services.v1r   r   Ú(uaclient.api.u.pro.status.is_attached.v1r   Úuaclient.clir   Úuaclient.cli.commandsr   r   r   Úuaclient.cli.parserr   Úuaclient.filesr   Ú	getLoggerÚreplace_top_level_logger_nameÚ__name__rš   ÚboolÚstrr    ÚUAConfigr:   ÚAbstractProgressrR   rx   rˆ   r3   Úverify_json_format_argsÚassert_rootÚassert_attachedÚ&_raise_enable_disable_unattached_errorÚintrÐ   ÚCLI_ROOT_ENABLEÚCLI_ENABLE_DESCÚ
QUICKSTARTÚCLI_ENABLE_SERVICEri   ÚjoinÚvalid_servicesÚCLI_ENABLE_ACCESS_ONLYÚCLI_ASSUME_YESÚCLI_ENABLE_AUTOÚCLI_ENABLE_BETAÚCLI_FORMAT_DESCÚCLI_ENABLE_VARIANTÚenable_command© r;   r9   ú<module>r     sñ  ðÛ Û ß 8Õ 8÷÷ ÷ ÷÷ñ ÷
õ BÝ !ß KÑ KÝ ,Ý (à€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€á$Øà	�DÐØ	˜ÐØ	�(˜4  S ™>Ñ*Ð+ðóÐ ð 
Ø	�‰ð 
àð 
ð ó 
ðN 7;ñ	)Ø	�‰ð)àð)ð ˜c×2Ñ2Ñ3ó	)ðXYØ	�‰ðYàðYð Ð2Ñ3ðYð ˜>Ñ*ð	Yð
 ðYð ðYð óYðx
Øð
à˜˜S˜‘>ð
ð ˜S™	ð
ð ˜#‘Yð	
ð
 ��c˜3�h‘Ñ ð
ð �4˜˜S˜‘>Ñ"ð
ð ó
ð8_
Ø	�‰ð_
àð_
ð ð_
ð ð	_
ð
 ð_
ð ð_
ð ˜˜c™Ñ#ð_
ð ˜>Ñ*ð_
ð Ð2Ñ3ð_
ð ó_
ðD 
×!Ñ!Ø	×ÑØ€×Ñ˜(×IÑIÓJðY¨Sò Yó Kó ó "ðYñx ØØ	×	!Ñ	!Ø×(Ñ(ØØ×)Ñ)ØááØØ!×4Ñ4×;Ñ;Ø $§	¡	Ø7˜L×7Ñ7¸O¸F¿O¹OÓ<MÔNó!ð <ó ð
 #Øô	ñ Ø#Ø!×8Ñ8Ø'ôñ
 Ø"Ø!×0Ñ0×7Ñ7ÀÐ7ÓIØ'ôñ
 ØØ!×1Ñ1Ø'ôñ
 ØØ!×1Ñ1Ø'ôñ
 ØØ!×1Ñ1×8Ñ8ÀÐ8ÓGØ"Ø" F˜OØ!ôñ ØØ!×4Ñ4Ø"ôðM+ô-	
ð/ô7�r;   