o
    ÙKÕió  ã                
   @   sz  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  e	 e ¡¡Z!G dd„ deƒZ"G dd„ deeƒZ#dedee$ fdd„Z%	d'de"dee de#fdd„Z&	d'de"dedee de#fdd„Z'edde'e"dd�Z(ddde#ej)dfej*d fej+d!fej,d"fej-d#fgd$d%d&œZ.dS )(é    N)ÚListÚOptional)ÚentitlementsÚlockÚmessagesÚstatusÚutil)ÚAbstractProgressÚProgressWrapperÚ
exceptions)ÚAPIEndpoint)ÚAdditionalInfo)Ú_enabled_services)Ú_is_attached)ÚUAConfig)ÚBoolDataValueÚ
DataObjectÚFieldÚStringDataValueÚ	data_listc                   @   sB   e Zd Zededd�ededdd�gZddœdedefdd	„Z	d
S )Ú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                C   s   || _ || _d S ©N)r   r   )Úselfr   r   © r   úH/usr/lib/python3/dist-packages/uaclient/api/u/pro/services/disable/v1.pyÚ__init__$   s   
zDisableOptions.__init__N)
Ú__name__Ú
__module__Ú__qualname__r   r   r   ÚfieldsÚstrÚboolr   r   r   r   r   r      s    ûþr   c                   @   s2   e Zd Zedeeƒdd�gZdee fdd„Z	dS )ÚDisableResultÚdisabledzList of services disabledr   c                C   s
   || _ d S r   ©r'   )r   r'   r   r   r   r   2   s   
zDisableResult.__init__N)
r    r!   r"   r   r   r   r#   r   r$   r   r   r   r   r   r&   )   s    ýÿr&   ÚcfgÚreturnc                 C   s   dd„ t | ƒjD ƒS )Nc                 S   s   g | ]}|j ‘qS r   )Úname)Ú.0Úsr   r   r   Ú
<listcomp>7   s    z+_enabled_services_names.<locals>.<listcomp>)r   Úenabled_services©r)   r   r   r   Ú_enabled_services_names6   s   r1   ÚoptionsÚprogress_objectc                 C   s   t | tƒ |d�S )N)r3   )Ú_disabler   )r2   r3   r   r   r   Údisable:   s   r5   c              
   C   sR  t |ƒ}t ¡ st ¡ ‚t|ƒjst ¡ ‚tj	|| j
| jd�}t|ƒ}| j
|vr-tg d�S |j}|dur6|}| ¡ |_d}d}ztjdd�� | |¡\}}W d  ƒ n1 sXw   Y  W n typ }	 zt ¡  |	‚d}	~	ww |s‹|dur€|jdur€|j}
ntj}
tj| j
|
d�‚t|ƒ}tj|d� | ¡  tttt|ƒ t|ƒ¡ƒƒd�S )	zt
    Disable a Pro service. This will automatically disable any services that
    depend on the target service.
    )r)   r+   r   r(   NFzu.pro.services.disable.v1)Úlock_holder)r   Úreasonr0   ) r
   r   Úwe_are_currently_rootr   ÚNonRootUserErrorr   Úis_attachedÚUnattachedErrorr   Úentitlement_factoryr   r   r1   r&   Úenabled_variantÚcalculate_total_disable_stepsÚtotal_stepsr   Ú	RetryLockr5   Ú	ExceptionÚclear_lock_file_if_presentÚmessager   ÚGENERIC_UNKNOWN_ISSUEÚEntitlementNotDisabledErrorr   ÚfinishÚsortedÚlistÚsetÚ
difference)r2   r)   r3   ÚprogressÚentitlementÚenabled_services_beforeÚvariantÚsuccessÚfail_reasonÚer7   Úenabled_services_afterr   r   r   r4   @   sh   	
ý
ÿ
ÿý€€þÿÿÿÿÿr4   Úv1ÚDisableServiceT)Úversionr+   Ú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$   r1   r5   r4   Úendpointr9   r;   ÚEntitlementNotFoundErrorÚLockHeldErrorrE   Ú_docr   r   r   r   Ú<module>   sx    ÿÿÿ
þ	ýÿþý
üLû	ýþþþï
á