U
    Jh*                     @   s  d dl mZmZmZmZ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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mZ d dlmZmZ e  Z!dd Z"dd Z#ej$dd Z%ej$dd Z&edej'ej'e#eedej(ddgdgdZ)edej*ej*e%eedej+j,d-ej.ddgdgdZ/edej0ej0e&eedej1j,d-ej.ddd gdgdZ2ed!ej3ej4e"ej5e)e/e2gd"Z6d#S )$    )apt_newsconfigentitlementsevent_logger
exceptionshttpmessages)_is_attached)AptProxyScope)cli_util)ProArgumentProArgumentGroup
ProCommand)HelpCategory)ApplicationStatus)state_files)LXDGuestAttachEnum)configure_livepatch_proxyunconfigure_livepatch_proxy)configure_snap_proxyunconfigure_snap_proxyc                K   s   ddl m} | d dS )Nr   
get_parserr   )uaclient.clir   print_help_for_command)argscfgkwargsr    r   5/usr/lib/python3/dist-packages/uaclient/cli/config.pyaction_config   s    r    c                K   s   | j rR| j tjkr0tjd| j dtjdtdj| j t|| j dd dS t	t
dd	 tjD d
 }d| d }tjD ]}t|j|t||dd q|js|jr|js|jrttj dS )zPerform the 'config show' action optionally limit output to a single key

    :return: 0 on success
    :raise UbuntuProError: on invalid keys
    z'{}', argchoicesz{key} {value}Nkeyvaluer   c                 S   s   g | ]}t |qS r   )len).0xr   r   r   
<listcomp>6   s     z&action_config_show.<locals>.<listcomp>   z{key: <z	} {value})r&   r   UA_CONFIGURABLE_KEYSr   InvalidArgChoiceformatjoinprintgetattrstrmaxglobal_apt_http_proxyglobal_apt_https_proxyua_apt_http_proxyua_apt_https_proxyr   ZCLI_CONFIG_GLOBAL_XOR_UA_PROXY)r   r   r   Z	col_widthZrow_tmplr&   r   r   r   action_config_show#   s.    

 
r9   c                K   s  ddl m} | }z| jd\}}W n. tk
rT   |d tjd| jdY nX |tj	kr|d tj
ddtj	d	| s|d tj|d
tt||dtkr| dkrtj
ddd	| dk}|dkrZ|dd }|dkrtj}ntj}t||| ||i}tf | tj|}	|	 \}
}|
tjkr~tf | n$||jkr|dd }|dkrtj}ntj }t||| t|j!p|j"}|rt#t$j%j&ddd t'(|t)j*|| d|_!d|_"n||j+|j, krd|krdnd}|dkrtj}ntj }||j+krXt#t$j-j&d&|d&|d d| }t||| t|j.pt|j/}|rt#t$j%j&ddd t'(|t)j0|| d|_.d|_/n|dkrz$t1|}|dk rtd&|W n6 tk
r   |d t#d tj2||dY nX nd|d krB|r6t34| n
t5j67  n<|d!kr~t8|j9s`t: t5j;<t5j=t>?| d" t@||| dS )#zMPerform the 'config set' action.

    @return: 0 on success, 1 otherwise
    r   r   =z
config setz<key>=<value>)ZexpectedZactual<key>r!   r"   )r#   N)trueZfalsez<value>ztrue, falser<   Z
http_proxyZhttps_proxy_r      zpro scoped aptz
global apt)Zcurrent_proxyZprevious_proxyhttpsapt_{}_proxyglobal_apt_{}_proxyoldnewglobal_)Zupdate_messaging_timerZmetering_timerzInvalid interval for {} r%   r   lxd_guest_attachZguest_attach)Ar   r   key_value_pairsplit
ValueErrorr   r   ZGenericInvalidFormatr   r-   r.   r0   stripZEmptyConfigValuetyper2   boollowerr   ZPROXY_VALIDATION_SNAP_HTTP_URLZPROXY_VALIDATION_SNAP_HTTPS_URLZvalidate_proxyr   r   	livepatchLivepatchEntitlementapplication_statusr   ENABLEDr   ua_scoped_proxy_optionsZPROXY_VALIDATION_APT_HTTP_URLZPROXY_VALIDATION_APT_HTTPS_URLr5   r6   r1   r   ZWARNING_APT_PROXY_OVERWRITEr/   r   configure_apt_proxyr
   UACLIENT&deprecated_global_scoped_proxy_optionsglobal_scoped_proxy_optionsWARNING_CONFIG_FIELD_RENAMEr7   r8   GLOBALintZInvalidPosIntConfigValuer   Zupdate_apt_newsr   Zapt_news_contents_filedeleter	   Zis_attachedZUnattachedErrorlxd_pro_config_filewriteLXDProConfigr   Z
from_valuesetattr)r   r   r   r   parserZset_keyZ	set_valueprotocol_typeZvalidate_urlentitlementlivepatch_statusr>   Zunset_currentr   r   r   action_config_setB   s    
 

 

 



    

    


 

rf   c          	      K   s^  ddl m} | jtjkr>| }|d tjddtjd| jdkr| j	dd }t
|d	 tj|}| \}}|tjkrt|d	 n| j|jkrt|tj| jd
 n| j|j|j kr*| j|jkrd| jkrdnd}ttjjd|d|d d| j | _t|tj| jd
 n"| jdkrLtj !tj"t#j$d t%|| jd
 dS )zOPerform the 'config unset' action.

    @return: 0 on success, 1 otherwise
    r   r   zconfig unsetr;   r!   r"   r=   r>   )rc   Nr@   r   rA   rB   rC   rF   rH   rI   )&r   r   r&   r   r-   r   r   r.   r0   rK   r   r   rQ   rR   rS   r   rT   r   rU   r   rV   r
   rW   rX   rY   eventinfor   rZ   r/   r[   r   r^   r_   r`   r   ZOFFra   )	r   r   r   r   rb   rc   rd   re   r>   r   r   r   action_config_unset   sV    
 



   ri   Zshowr&   ?)helpnargs)Z	arguments)rk   descriptionactionZargument_groupssetrJ   r!   )Zoptions)rk   Zunset)rk   metavarr   )rk   rm   rn   Zhelp_categoryZsubcommandsN)7Zuaclientr   r   r   r   r   r   r   Z(uaclient.api.u.pro.status.is_attached.v1r	   Zuaclient.aptr
   r   r   Zuaclient.cli.commandsr   r   r   Zuaclient.cli.parserr   Z(uaclient.entitlements.entitlement_statusr   Zuaclient.filesr   Zuaclient.files.user_config_filer   Zuaclient.livepatchr   r   Zuaclient.snapr   r   Zget_event_loggerrg   r    r9   Zassert_rootrf   ri   ZCLI_CONFIG_SHOW_DESCZCLI_CONFIG_SHOW_KEYZshow_subcommandZCLI_CONFIG_SET_DESCZCLI_CONFIG_SET_KEY_VALUEr/   r0   r-   Zset_subcommandZCLI_CONFIG_UNSET_DESCZCLI_CONFIG_UNSET_KEYZunset_subcommandZCLI_ROOT_CONFIGZCLI_CONFIG_DESCZOTHERZconfig_commandr   r   r   r   <module>   s   $	
 
0  

