o Hcf8@snddlZddlZddlmZmZmZddlmZmZm Z m Z m Z m Z m Z mZmZddlmZmZddlmZmZddlmZddlmZmZddlmZmZeee Z!d ej"d e#d eed eed e#de#de#fddZ$de%dee#efdee#dee#deee#efdeee#efde%fddZ&ej'ej(e)ej*e+dde,fddZ-d ej"fdd Z.dS)!N)AnyDictList) apiconfigcontract entitlements event_logger exceptionsmessagesstatusutil)ServiceWithDependencies _dependencies)EnabledService_enabled_services) _is_attached)cli_util constants)CanEnableFailureCanEnableFailureReasoncfgserviceall_dependenciesenabled_services called_namevariant service_titlecsg}g}dd|Dtfdd|Dd} | dur/fdd| jD}fdd| jD}|D]'} tj|jdd} t|| } tj j || d } | sQtj | d sXt j || d q1|D]}t||}tjj ||d } tj | d sxt j||d q[tfd d|Dd}|durdurt|}t||j}tj|jdd} tj j ||d } | stj | d st j ||d dSdSdS) NcSsg|]}|jqSname.0srr5/usr/lib/python3/dist-packages/uaclient/cli/enable.py -sz2prompt_for_dependency_handling..c3s|] }|jkr|VqdSNrr!)rrr$ 0sz1prompt_for_dependency_handling..csg|] }|jvr|jqSrrr!enabled_service_namesrr$r%3  csg|] }|jvr|jqSrrr!r(rr$r%8r*z features.block_disable_on_enable)r path_to_value)service_being_enabledincompatible_service)msg)r,required_servicec3s.|]}|jkr|jr|jkr|VqdSr&)r variant_enabled variant_namer!)rrrr$r'_s  )nextincompatible_with depends_onr is_config_value_truerr get_titler INCOMPATIBLE_SERVICEformatprompt_for_confirmationr IncompatibleServiceStopsEnableREQUIRED_SERVICERequiredServiceStopsEnabler1)rrrrrrrincompatible_servicesrequired_services dependenciesr-cfg_block_disable_on_enableincompatible_service_titleuser_msgr/required_service_titler0to_be_enabled_titleenabled_variant_titler)r)rrr$prompt_for_dependency_handling"s        rF json_output json_responseprocessed_servicesfailed_serviceserrorswarningssuccesscCsb|r/|||rdnd|d<||d<||d<||d<||d<ttj|tjdd dSdS) NrMfailureresultrIrJrKrLT)cls sort_keys)sortprintjsondumpsr DatetimeAwareJSONEncoder)rGrHrIrJrKrLrMrrr$print_json_output~s  rWz pro enablereturnc Ksg}g}g}g}tjddd}|jdk}t|} t|dd} |j} | r-| r-tjddd | t j zt |Wn!tj tjfyZtjd d d |d t jjt jjdYnwt|jst} | | j|d | j| jdt||||||dddSt|dg} t| |\}}t|j}t|j}d }t ||D]]}tj!||| d||j"|j#|| |$dd}t%d|t%d| |j}|j&}|j"sz t'|||||| |dWn)tjy}zt(|| |j| t j)j|dd}WYd}~qd}~wwz|rt*+}nt*+t,}|-|_.|/|\}}t0j0|d|sl|durlt1|t2rl|j3durU| |j3j|||d||j3j|j3jd|j4t5j6kra||| t j)j|j&dnW|r|||jr| t j7j|j&dn | t j8j|j&d|9}|rd |d<| t j:jdd|;d|j<$d n|s|dur||| t j)j|j&d||M}Wqtjy}z)||| |j| t j)j|d|d||j|j|j=d!d}WYd}~qd}~ww|r%d}||7}tj>|||j#d"}| |j|d d|j|j|j=d!t ?|}|@t|||||||d|r>d#SdS)$z^Perform the enable action on a named entitlement. @return: 0 on success, 1 otherwise rMF)_schema_versionrO needs_rebootrTr --access-only --variant)option1option2zFailed to refresh contractT)exc_infosystem)typemessage message_code)rMr)r extra_args) assume_yes allow_betar access_onlyrfzEnabling entitlement %sz Variant: %s)rrr)titleNr)rbrrcrdrZinstall) operationmessage_operation post_enable)rbrrcrdadditional_info)rrhr)Ar JSON_SCHEMA_VERSIONr8r&create_interactive_only_print_functiongetattrrir InvalidOptionCombinationr REFRESH_CONTRACT_ENABLErrefreshConnectivityErrorUbuntuProErrorLOGwarningappendE_REFRESH_CONTRACT_FAILUREr.r ris_attached_and_contract_validContractExpiredErrormsg_coderWrget_valid_entitlement_namesrrrservicesorder_entitlements_for_enablingentitlement_factoryrgbetagetdebugrjrF exception ENABLE_FAILEDrProgressWrapperCLIEnableDisableProgresscalculate_total_enable_steps total_stepsenabler isinstancerrcreasonrIS_BETAACCESS_ENABLED_TMPL ENABLED_TMPL_check_for_rebootENABLE_REBOOT_REQUIRED_TMPLemit messagingrp*create_enable_entitlements_not_found_errorUAContractClientupdate_activity_token)argsrkwargsrIrJrKrLrHrGinteractive_only_printrri expired_errnamesentitlements_foundentitlements_not_foundrrretent_nameent real_name ent_titleeprogressent_retrent_reboot_requirederrcontract_clientrrr$ action_enables                                      rc Cs|jdtjd}|jtdtj|_tjj tj dd|_ d|_ tj |j_tj|j_|jdddtjj d tj|d d d |jd dtjj ddd|jddtjd|jddtjd|jddddgdtjj ddd|jddtjd|S)Nr)help)actionzenable [])r commandrstore+z, rk)options)rnargsrz --assume-yes store_true)r)rrr\z--betaz--formatclirT)default)rchoicesrrr]) add_parserr CLI_ROOT_ENABLE set_defaultsrCLI_ENABLE_DESC descriptionr USAGE_TMPLr8NAMEusageprogCLI_ARGS _positionalsrj CLI_FLAGS _optionals add_argumentCLI_ENABLE_SERVICEjoinrvalid_servicesCLI_ASSUME_YESCLI_ENABLE_ACCESS_ONLYCLI_ENABLE_BETACLI_FORMAT_DESCCLI_ENABLE_VARIANT) subparsersrparserrrr$rsR      r)/rTloggingtypingrrruaclientrrrrr r r r r +uaclient.api.u.pro.services.dependencies.v1rr-uaclient.api.u.pro.status.enabled_services.v1rr(uaclient.api.u.pro.status.is_attached.v1r uaclient.clirr(uaclient.entitlements.entitlement_statusrr getLoggerreplace_top_level_logger_name__name__ryUAConfigstrrFboolrWverify_json_format_args assert_rootassert_attached&_raise_enable_disable_unattached_errorassert_lock_fileintrrrrrr$s^,   \   f