o
    (f$                     @   s  d Z ddlZddlZddlmZmZmZ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 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! 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, ddl-m.Z. ddl/m0Z0 e1 Z2e3e4e5Z6dZ7eeeeeeeeee!e&e(e*e,gZ8dd Z9d$d%ddZ:d%ddZ;dd Z<dd  Z=e=d$d!d"Z>e5d#kre?e>  dS dS )&z2Client to manage Ubuntu Pro services on a machine.    N)
aptdefaultsevent_logger
exceptionshttplocklogmessagesutilversion)api_command)attach_command)auto_attach_command)collect_logs_command)config_command)detach_command)disable_command)enable_command)fix_command)help_command)HelpCategoryProArgumentParser)refresh_command)security_status_command)status_command)system_command)UAConfig)get_user_or_root_log_file_pathproc                  C   s   t tdtjjtddd} | tjdtjjtd | j	ddtj
d	 | tjdtj
 | j	d
dt tjjtdd | tjd
tjjtd | jtjddd}d|_tD ]}|| qW| S )NFz	<command>)namecommand)proguse_main_helpepilogz
-h, --help)r   z--debug
store_true)actionhelp	--versionr   )r%   r   r&   r    )titledestmetavarT)r   NAMEr	   CLI_HELP_EPILOGformatadd_help_entryr   FLAGSCLI_HELP_FLAG_DESCadd_argumentCLI_ROOT_DEBUGr   get_versionCLI_ROOT_VERSIONadd_subparsersCLI_AVAILABLE_COMMANDSrequiredCOMMANDSregister)parser
subparsersr     r<   7/usr/lib/python3/dist-packages/uaclient/cli/__init__.py
get_parser;   sH   
r>   returnc                 C   s\   | r| j dkst| dddv rd S t }|r,td| tjtj	j
|dtjd d S d S )Napir-    jsonyamlzNew version available: %s)r   	file_type)r    getattrr   check_for_new_versionLOGwarningeventinfor	   WARN_NEW_VERSION_AVAILABLE_CLIr-   sysstderr)cmd_argsnew_versionr<   r<   r=   _warn_about_new_versiong   s   

rR   c                 C   s^   | j dv r+tj s-t| dr| jdv rdS td tj	t
jj| j dtjd dS dS dS )z4Warn users that the user readable output may change.)statuszsecurity-statusr-   rB   Nz.Not in a tty and human-readable command called)r    rE   )r    rN   stdoutisattyhasattrr-   rI   rJ   rK   rL   r	   WARNING_HUMAN_READABLE_OUTPUTrO   rP   r<   r<   r=   _warn_about_output_redirection}   s   


rY   c                 C   s`   | j dv r*t| j  t| dr,| jdkrttjj | jdkr.ttjj	 dS dS dS dS )z3Set the right event mode based on the args provided)attachdetachenabledisablerS   r-   rC   rD   N)
r    rK   set_commandrV   r-   set_event_moder   EventLoggerModeJSONYAMLrX   r<   r<   r=   r_      s   



r_   c                    s    fdd}|S )Nc               
      s  z | i |W S  t y(   td ttjtjd t	  t
d Y d S  tjy } zgdt|v r[tj}tdrAtj}|j|jd}tj|j|jd tj|jtjd n%tjd	|j|d
 tjj|j|jd}tj|j|jd tj|jtjd t	  t  t  t
d W Y d }~d S d }~w tjy } z;tj}tdrtj}|j|jd}tj|j|jd tj|jtjd t	  t  t  t
d W Y d }~d S d }~w tjy+ } z<t|j tj|j|j|j d tjd|jtjd t!|tj"st	  t  t  t
|j# W Y d }~d S d }~w t$yr } z;td t	  tjtj%jt|t& djtjd tjt'|dt|dd t  t  t
d W Y d }~d S d }~ww )NKeyboardInterrupt)file   CERTIFICATE_VERIFY_FAILEDzca-certificates)url)	error_msg
error_code)info_msgrF   zFailed to access URL: %s)exc_info)rg   cause_error)rh   ri   additional_infoz{}z&Unhandled exception, please file a bug)rh   log_pathmsg	exception)rh   
error_type)(rc   rI   errorprintr	   CLI_INTERRUPT_RECEIVEDrN   rO   r   clear_lock_file_if_presentexitr   ConnectivityErrorstr&SSL_VERIFICATION_ERROR_CA_CERTIFICATESr   is_installed%SSL_VERIFICATION_ERROR_OPENSSL_CONFIGr-   rg   rK   ro   r   rL   rp   E_CONNECTIVITY_ERRORrl   process_eventsrR   PycurlCACertificatesErrorUbuntuProErrormsg_coderm   
isinstanceLockHeldError	exit_code	ExceptionUNEXPECTED_ERRORr   rG   )argskwargsexctmplro   efuncr<   r=   wrapper   s   



z#main_error_handler.<locals>.wrapperr<   )r   r   r<   r   r=   main_error_handler   s   Sr   c                 C   sn  t tjd tjd  t }t |j|j | stj} t	 }| dd  }|s0|
  td |d dkr:d|d< d|v rR|d}|d | }||d d  }n|}g }|j|d}|jrsttj}|tj td	| t| |j}	|j}
tj|	|
d
 td|   |  dd tt   D }|rtd|  t!| |j"|||d}t#| |S )N	log_levellog_filere   r   r   r'   z--)r   	ubuntupro)
http_proxyhttps_proxyzExecuted with sys.argv: %rc                 S   s   g | ]
\}}d  ||qS )z{}={})r-   ).0kvr<   r<   r=   
<listcomp>  s    
zmain.<locals>.<listcomp>z'Executed with environment variables: %r)cfg
extra_args)$r   setup_cli_loggingr   CONFIG_DEFAULTSr   r   r   rN   argvr>   
print_helprv   index
parse_argsdebugloggingStreamHandlerrO   setLevelDEBUG	getLogger
addHandlerr_   r   r   r   configure_web_proxyrI   warn_about_invalid_keyssortedr
   get_pro_environmentitemsrY   r%   rR   )sys_argvr   r:   cli_argumentsdouble_dash_indexpro_cli_argsr   r   console_handlerr   r   pro_environmentreturn_valuer<   r<   r=   main   sR   

r   __main__)N)r?   N)@__doc__r   rN   uaclientr   r   r   r   r   r   r   r	   r
   r   uaclient.cli.apir   uaclient.cli.attachr   uaclient.cli.auto_attachr   uaclient.cli.collect_logsr   uaclient.cli.configr   uaclient.cli.detachr   uaclient.cli.disabler   uaclient.cli.enabler   uaclient.cli.fixr   uaclient.cli.helpr   uaclient.cli.parserr   r   uaclient.cli.refreshr   uaclient.cli.security_statusr   uaclient.cli.statusr   uaclient.cli.systemr   uaclient.configr   uaclient.logr   get_event_loggerrK   r   replace_top_level_logger_name__name__rI   r+   r8   r>   rR   rY   r_   r   r   rv   r<   r<   r<   r=   <module>   sb    0,
W>