
    Jh&                        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 d dlmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZm Z m!Z!  e jD                   ejF                  e$            Z% G d de      Z& G d dee      Z'dededejP                  deeejP                        de)deejP                  ee   f   fdZ*dedee+   fdZ,	 d*de&dee   de'fdZ-	 d*de&dedee   de'fdZ. edde.e&d      Z/ddd e'ej`                  d!fejb                  d"fejd                  d#fejf                  d$fejh                  d%fejj                  d&fgd'd(d)Z6y)+    N)IterableListOptionalTupleType)entitlementslockmessagesstatusutil)AbstractProgressProgressWrapper
exceptions)APIEndpoint)AdditionalInfoErrorWarningObject)_enabled_services)_is_attached)UAConfig)BoolDataValue
DataObjectFieldStringDataValue	data_listc                   r    e Zd Z eded       ededd       ededd      gZd	dd
dedee   de	fdZ
y	)EnableOptionsservicezPro service to be enableddocvariantFz2Optional variant of the Pro service to be enabled.access_onlyz^If true and the target service supports it, only enable access to the service (default: false)N)r    r!   c                .    || _         || _        || _        y N)r   r    r!   )selfr   r    r!   s       G/usr/lib/python3/dist-packages/uaclient/api/u/pro/services/enable/v1.py__init__zEnableOptions.__init__*   s     &    )__name__
__module____qualname__r   r   r   fieldsstrr   boolr&    r'   r%   r   r      sq    i.IJD		
 	:	
F. "&!	' 	' #		'
 	'r'   r   c            	           e Zd Z ed ee      d       ed ee      d       eded       ed ee      d	      gZdee	   dee	   de
dee	   fd
Zy)EnableResultenabledz#List of services that were enabled.r   disabledz$List of services that were disabled.reboot_requiredz?True if one of the services that was enabled requires a reboot.r
   zaList of information message strings about the service that was just enabled. Possibly translated.c                <    || _         || _        || _        || _        y r#   r1   r2   r3   r
   )r$   r1   r2   r3   r
   s        r%   r&   zEnableResult.__init__T   s!      . r'   N)r(   r)   r*   r   r   r   r   r+   r   r,   r-   r&   r.   r'   r%   r0   r0   6   s    o&5	

 	o&6	

 			
 	o&:		
'F:! c! s)	!
 ! s)!r'   r0   cfgprogressentitlementavailable_variantsr!   returnc           	         d }|D ]O  } || |      }|j                         d   t        j                  j                  k(  s<|j	                         sM|} n ||j
                  |j                  | |      }||j                  dt        j                  dt        j                  j                  t        j                  j                  |j                  z   t        j                  j                  z         ifg       t        j                   j                  |j                        }|t#        |j$                  |j&                  d|j                  i      fS |d fS )	N)r6   r!   r   message_operationmsg)r    )variant_namer>   )titlecodemeta)applicability_statusr   ApplicabilityStatus
APPLICABLEvariant_auto_selectdefault_variantemitr   prompt_for_confirmationr
   AUTO_SELECTING_VARIANTformatTxtColorBOLDr>   ENDCAUTO_SELECTED_VARIANT_WARNINGr   r=   name)	r6   r7   r8   r9   r!   r    v_clsvwarnings	            r%   _auto_select_variantrS   b   sg    G# c{3""$Q'//::;%%'G ;66B--#;-O 00x>>EE$,$5$5$:$:%22%3&//44%5  F  		
 88?? -- @ 
 *++ '"6"67
 
 	
 D  r'   c                 f    t        |       j                  D cg c]  }|j                   c}S c c}w r#   )r   enabled_servicesrO   )r6   ss     r%   _enabled_services_namesrW      s%    -c2CCDqAFFDDDs   .optionsprogress_objectc                 .    t        | t               |      S )N)rY   )_enabler   )rX   rY   s     r%   enabler\      s     7HJHHr'   c                     t        |      }g }t        j                         st        j                         t        |      j                  st        j                          j                  dk(  rt        j                         t        |      }t         fdt        |      j                  D        d      }|rt        g g dg       S t        j                   | j                   j"                  xs d j$                        }|j'                         \  }}	|j(                  }
t+        |t        j,                  j.                  k(  |j0                   |
g      r>t3        ||||
j5                          j$                        \  }}|r|j7                  |       |j9                         |_        d}d}	 t=        j>                  d	
      5  |jA                  |      \  }}ddd       |sL||jF                  |jF                  }ntH        jJ                  }t        jL                   j                  |      t        |      }|jN                  jQ                  dg       xs g D cg c]  }tS        |tT              r| }}tW        jV                  |       |jY                          t        t[        t]        t_        |      ja                  t_        |                        t[        t]        t_        |      ja                  t_        |                        |jc                         |      }||_2        |S # 1 sw Y   RxY w# tB        $ r}t=        jD                          |d}~ww xY wc c}w )z
    Enable a Pro service. This will automatically disable incompatible services
    and enable required services that that target service depends on.
    	landscapec              3      K   | ]P  }|j                   j                  k(  r5j                  r%|j                  r|j                  j                  k(  r| R y wr#   )rO   r   r    variant_enabledr>   ).0rV   rX   s     r%   	<genexpr>z_enable.<locals>.<genexpr>   sH      	
vv(OO%%!..GOO*K 	
s   AANFr5    )r6   rO   r    r!   )r6   r7   r8   r9   r!   zu.pro.services.enable.v1)lock_holder)r   reasonpost_enable)r6   )3r   r   we_are_currently_rootr   NonRootUserErrorr   is_attachedUnattachedErrorr   NotSupportedrW   nextr   rU   r0   r   entitlement_factoryr    r!   rB   variantsallrC   rD   
is_variantrS   valuesappendcalculate_total_enable_stepstotal_stepsr	   	RetryLockr\   	Exceptionclear_lock_file_if_presentmessager
   GENERIC_UNKNOWN_ISSUEEntitlementNotEnabledError	messagingget
isinstancer,   r   finishsortedlistset
difference_check_for_rebootwarnings)rX   r6   rY   r7   r   enabled_services_beforealready_enabledr8   applicability_r9   auto_select_warningsuccessfail_reasonere   enabled_services_afterr=   post_enable_messagesresults   `                   r%   r[   r[      s6    /HH%%'))++((((**+%%%''5c:	
&s+<<	
 	O !	
 	
 22__%2''	K #779M1$--
\==HHH&&&	
 ,@#188:++,
(( OO/0&CCEHGK^^2
 	@ $/#5#5h#? G[	@ "{':':'F ((F33F33OOF
 	
 5S9  ))--mR@FBc3 	  MMcOO*+66/0
 +,77./
 $557%!F$ FOM_	@ 	@  '')s6   -L5 L(L5 M(L2-L5 5	M>MMv1EnableServiceT)versionrO   fnoptions_clssupports_progress32zw
from uaclient.api.u.pro.services.enable.v1 import enable, EnableOptions
result = enable(EnableOptions(service="usg"))
zWhen called as non-root userzCWhen called on a machine that is not attached to a Pro subscriptionz_When called for a service that doesn't support being enabled via API (currently only Landscape)zxWhen the service argument is not a valid Pro service name or if the variant is not a valid variant of the target servicez8When another Ubuntu Pro related operation is in progressz When the service fails to enablez3pro api u.pro.services.enable.v1 --args service=usgzp
{
    "disabled": [],
    "enabled": [
        "usg"
    ],
    "messages": [],
    "reboot_required": false
}
)introduced_inrequires_networkexample_pythonresult_classr   example_cliexample_jsonr#   )7loggingtypingr   r   r   r   r   uaclientr   r	   r
   r   r   uaclient.apir   r   r   uaclient.api.apir   uaclient.api.data_typesr   r   -uaclient.api.u.pro.status.enabled_services.v1r   (uaclient.api.u.pro.status.is_attached.v1r   uaclient.configr   uaclient.data_typesr   r   r   r   r   	getLoggerreplace_top_level_logger_namer(   LOGr   r0   UAEntitlementr-   rS   r,   rW   r\   r[   endpointrh   rj   rk   EntitlementNotFoundErrorLockHeldErrorrz   _docr.   r'   r%   <module>r      s    8 8 ? ? F F ( F K A $  g:::8DE'J '@)!:~ )!X,!	,!,! ++,! !l&@&@!AB	,!
 ,! <%%x0B'CCD,!^E Ed3i E
 KOII-56F-GII 37{{	{ ./{ 	{| 	  !		$	$&DE&& 	
 ##6	
 //O	
 $$F	

 11.	
7@ I	S3r'   