
KeD                 @   s  d  Z  d d l Z d d l Z d d l m Z d d l 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 d d	 l m Z d
 Z d Z e j e
 j e   Z e d d d    Z e e d d d    Z d d   Z  d S)a%  
Update messaging text for use in MOTD and APT custom Ubuntu Pro messages.

Messaging files will be emitted to /var/lib/ubuntu-advantage/message-* which
will be sourced by apt-hook/hook.cc and various /etc/update-motd.d/ hooks to
present updated text about Ubuntu Pro service and token state.
    N)exists)contractdefaultsmessagessystemutil)_updates)_is_attached)UAConfig)ESMAppsEntitlementESMInfraEntitlement)ApplicationStatuszmotd-contract-statusz6/usr/lib/update-notifier/update-motd-updates-available)cfgc             C   s   |  j  } | j d d  } | j d i   j d i   j d d   } t j |   } | j | |  } | j d i   j d i   j d d   } | d  k	 r | |  j j k r | | d d d <|  j j |  d  S)NZmachineToken ZmachineTokenInfoZcontractInfoidZeffectiveTo)machine_tokengetr   ZUAContractClientZget_contract_machinemachine_token_filecontract_expiry_datetimewrite)r   Z
orig_tokenr   Zcontract_idZcontract_clientZrespZresp_expiry r   A/usr/lib/python3/dist-packages/uaclient/timer/update_messaging.pyupdate_contract_expiry   s    	r   )r   returnc             C   s  t  |   j s d St j d  t j j |  j d t  } t	 j
 |   \ } } | t	 j j t	 j j t	 j j f k r t |   t	 j
 |   \ } } | t	 j j t	 j j f k r t j |  n| t	 j j k rt j | t j j |  j d |  d  n| t	 j j k rt j | } |  j j } | d k rEd } n | j d  } t j | t j j |  j d	 | d |  d  n| t	 j j k rd
 } d } t j   rt  |   j!   \ }	 }
 |	 t" j# k r@d } t$ |   j% j& } nK t j'   r@t( |   j!   \ } }
 | t" j# k r@d } t$ |   j% j) } | d k rft j | t j* d  n2 t j | t j+ j |  j d | d |  d  d S)zEmit human-readable status message used by motd.

    Used by /etc/update.motd.d/91-contract-ua-esm-status

    :param cfg: UAConfig instance for this environment.
    Fz&Updating Ubuntu Pro messages for MOTD.r   remaining_daysz

NZUnknownz%d %b %YZexpired_datezn/ar   z	esm-infrazesm-appspkg_numserviceT),r	   Zis_attachedLOGdebugospathjoinZdata_dirMOTD_CONTRACT_STATUS_FILE_NAMEr   Zget_contract_expiry_statusZContractExpiryStatusZACTIVE_EXPIRED_SOONZEXPIRED_GRACE_PERIODZEXPIREDr   ZACTIVEZNONEr   Zensure_file_absentZ
write_filer   ZCONTRACT_EXPIRES_SOONZ	pluralizeformatr   Z!CONTRACT_EXPIRY_GRACE_PERIOD_DAYSr   r   ZstrftimeZCONTRACT_EXPIRED_GRACE_PERIODZis_current_series_active_esmr   Zapplication_statusr   ZENABLEDapi_u_pro_packages_updates_v1ZsummaryZnum_esm_infra_updatesZis_current_series_ltsr   Znum_esm_apps_updatesZCONTRACT_EXPIREDZCONTRACT_EXPIRED_WITH_PKGS)r   Zmotd_contract_status_msg_pathZexpiry_statusr   Zgrace_period_remainingZexp_dtZ
exp_dt_strr   r   Zesm_infra_status_Zesm_apps_statusr   r   r   update_motd_messages6   s|    			
			r&   c              C   s\   t  t  rX y t j t d g  Wn2 t k
 rW }  z t j |   WYd  d  }  ~  Xn Xd  S)Nz--force)r   UPDATE_NOTIFIER_MOTD_SCRIPTr   Zsubp	Exceptionr   Z	exception)excr   r   r   refresh_motd   s
    r*   )!__doc__Zloggingr   os.pathr   Zuaclientr   r   r   r   r   Z&uaclient.api.u.pro.packages.updates.v1r   r$   Z(uaclient.api.u.pro.status.is_attached.v1r	   Zuaclient.configr
   Zuaclient.entitlementsr   r   Z(uaclient.entitlements.entitlement_statusr   r"   r'   Z	getLoggerZreplace_top_level_logger_name__name__r   r   boolr&   r*   r   r   r   r   <module>   s   (_