
    Jh              
          d dl Z d dl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 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 j<                   e	j>                  e             Z! G d de      Z" G d dee      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jR                  dfejT                  dfejV                  dfejX                  dfejZ                  d fgd!d"d#Z.y)%    N)ListOptional)entitlementslockmessagesstatusutil)AbstractProgressProgressWrapper
exceptions)APIEndpoint)AdditionalInfo)_enabled_services)_is_attached)UAConfig)BoolDataValue
DataObjectFieldStringDataValue	data_listc                   P    e Zd Z eded       ededd      gZdddedefdZ	y	)
DisableOptionsservicezPro service to disabledocpurgeFzqAlso remove all packages that were installed from this service. Only supported by some services. (default: false))r   c                     || _         || _        y N)r   r   )selfr   r   s      H/usr/lib/python3/dist-packages/uaclient/api/u/pro/services/disable/v1.py__init__zDisableOptions.__init__$   s    
    N)
__name__
__module____qualname__r   r   r   fieldsstrboolr!    r"   r    r   r      sE    i.FGN	
F 7< 3 t r"   r   c                   B    e Zd Z ed ee      d      gZdee   fdZ	y)DisableResultdisabledzList of services disabledr   c                    || _         y r   r,   )r   r,   s     r    r!   zDisableResult.__init__2   s	     r"   N)
r#   r$   r%   r   r   r   r&   r   r'   r!   r)   r"   r    r+   r+   )   s/    o&+	
F!DI !r"   r+   cfgreturnc                 f    t        |       j                  D cg c]  }|j                   c}S c c}w r   )r   enabled_servicesname)r/   ss     r    _enabled_services_namesr5   6   s%    -c2CCDqAFFDDDs   .optionsprogress_objectc                 .    t        | t               |      S )N)r7   )_disabler   )r6   r7   s     r    disabler:   :   s     GXZIIr"   c                    t        |      }t        j                         st        j                         t        |      j                  st        j                         t        j                  || j                  | j                        }t        |      }| j                  |vrt        g       S |j                  }||}|j                         |_        d}d}	 t#        j$                  d      5  |j'                  |      \  }}ddd       |sL||j,                  |j,                  }
nt.        j0                  }
t        j2                  | j                  |
      t        |      }t5        j4                  |       |j7                          t        t9        t;        t=        |      j?                  t=        |                              S # 1 sw Y   xY w# t(        $ r}	t#        j*                          |	d}	~	ww xY w)	zt
    Disable a Pro service. This will automatically disable any services that
    depend on the target service.
    )r/   r3   r   r.   NFzu.pro.services.disable.v1)lock_holder)r   reason)r/   ) r   r	   we_are_currently_rootr   NonRootUserErrorr   is_attachedUnattachedErrorr   entitlement_factoryr   r   r5   r+   enabled_variantcalculate_total_disable_stepstotal_stepsr   	RetryLockr:   	Exceptionclear_lock_file_if_presentmessager   GENERIC_UNKNOWN_ISSUEEntitlementNotDisabledErrorr   finishsortedlistset
difference)r6   r/   r7   progressentitlementenabled_services_beforevariantsuccessfail_reasoner=   enabled_services_afters               r    r9   r9   @   s    /H%%'))++((((**22__mmK 6c: 55
 	
 ))G&DDFHGK^^3
 	A $/#6#6x#@ G[	A "{':':'F ((F33F44OOF
 	
 5S9
MMcOO+,77./
 -	A 	A  '')s0   G .G	G 	GG 	G9G44G9v1DisableServiceT)versionr3   fnoptions_clssupports_progress32z|
from uaclient.api.u.pro.services.disable.v1 import disable, DisableOptions
result = disable(DisableOptions(service="usg"))
zWhen called as non-root userzCWhen called on a machine that is not attached to a Pro subscriptionz9When the service argument is not a valid Pro service namez8When another Ubuntu Pro related operation is in progressz!When the service fails to disablez4pro api u.pro.services.disable.v1 --args service=usgz+
{
    "disabled": [
        "usg"
    ]
}
)introduced_inrequires_networkexample_pythonresult_classr   example_cliexample_jsonr   )/loggingtypingr   r   uaclientr   r   r   r   r	   uaclient.apir
   r   r   uaclient.api.apir   uaclient.api.data_typesr   -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   r+   r'   r5   r:   r9   endpointr?   rA   EntitlementNotFoundErrorLockHeldErrorrK   _docr)   r"   r    <module>rw      s    ! ? ? F F ( 2 K A $  g:::8DEZ &
!J 
!E Ed3i E
 LPJJ.67G.HJJ 37II	I ./I 	IX 	  "		$	$&DE&& 	
 //G	

 $$F	

 22/	
#, J?&r"   