
    f$                     2   d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlZd dl	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mZ d d	lmZmZmZmZmZmZ d d
l m!Z!  ejD                   ejF                  e$            Z% G d de      Z& G d de      Z'dedee&   de(fdZ)de j                   dee j                      de(fdZ*de+de(fdZ,de'de(fdZ-dedee.   dee'   fdZ/edefd       Z0dedee+   fdZ1dedee+   fdZ2de+de+fd Z3defd!Z4y)"    N)ListOptional)defaultsmessagessystemutil)_is_attached)ensure_apt_pkg_init)get_cloud_type)UAConfig)ContractExpiryStatusget_contract_expiry_status)BoolDataValue
DataObjectDatetimeDataValueFieldStringDataValue	data_list)state_filesc                       e Zd Z ed ee      d       ed ee      d       eded      gZdddddee	e
      dee	e
      dee   fdZy)	AptNewsMessageSelectors	codenamesFrequiredcloudsproNr   r   r   c                .    || _         || _        || _        y Nr   )selfr   r   r   s       3/usr/lib/python3/dist-packages/uaclient/apt_news.py__init__z AptNewsMessageSelectors.__init__$   s     #    )__name__
__module____qualname__r   r   r   r   fieldsr   r   strboolr"    r#   r!   r   r      s{    k9_5Fh	/2UCe]U3F *.&*"	 DI&	 c#		
 d^	r#   r   c            
           e Zd Z ede       eded       eded       ed ee            gZdddde	j                  de
e	j                     de
e   dee   fd	Zy)
AptNewsMessagebeginendFr   	selectorslinesN)r.   r/   c                <    || _         || _        || _        || _        y r   )r-   r.   r/   r0   )r    r-   r.   r/   r0   s        r!   r"   zAptNewsMessage.__init__8   s      
"
r#   )r$   r%   r&   r   r   r   r   r   r'   datetimer   r   r(   r"   r*   r#   r!   r,   r,   0   s    g()e&7k2UCgy12	F ,07;    h''(	
 34 Cyr#   r,   cfgr/   returnc                 ,   |y|j                   +t        j                         j                  |j                   vry|j                  t               \  }}|y||j                  vry|j                  #|j                  t        |       j                  k7  ryy)NTF)	r   r   get_release_infoseriesr   r   r   r	   is_attached)r3   r/   cloud_idfails       r!   do_selectors_applyr;   F   s     &""$++93F3FF#')$9+++}} ==L-999r#   r-   r.   c                     t         j                   j                  t         j                  j                        }|| k  ry| t        j                  d      z   }|||kD  r|}n|}||kD  ryy)NF   )daysT)r2   nowtimezoneutc	timedelta)r-   r.   r?   one_month_after_begin
end_to_uses        r!   do_dates_applyrE   ^   sk     



 1 1 5 5
6C
U{!H$6$6B$??
{c11*


Zr#   cc                 8    t        j                  |       d   dk(  S )Nr   C)unicodedatacategory)rF   s    r!   is_control_charrK   p   s    "1%,,r#   msgc           	          t        | j                        dk  ryt        | j                        dkD  ry| j                  D ]6  }t        |D cg c]  }t        |       c}      r yt        |      dkD  s6 y yc c}w )N   F   M   T)lenr0   anyrK   )rL   linerF   s      r!   is_message_validrT   t   sn    
399~
399~		 D1q"12t9r>	  2s   A9
r   c                    |D ]  }	 t         j                  |      }t        |      st        j	                  d|       ;t        |j                  |j                        st        j	                  d|       rt        | |j                        st        j	                  d|       |c S  y # t        $ r }t        j	                  d|       Y d }~d }~ww xY w)Nzmsg failed parsing: %rzmsg not valid: %rzmsg dates don't apply: %rzmsg selectors don't apply: %r)r,   	from_dict	ExceptionLOGdebugrT   rE   r-   r.   r;   r/   )r3   r   msg_dictrL   es        r!   select_messager\      s      	 **84C  $II)3/cii1II137!#s}}5II5s;
    	II.2	s   B((	C1CCc                 ~   t        j                  t        j                  d       t	        j
                         }t	        j                  || j                  dt        j                        }|j                          t        j                  |j                        }t        j                  |t        j                        S )NT)exist_ok )hashdestdir)cls)osmakedirsr   UAC_RUN_PATHapt_pkgAcquireAcquireFileapt_news_urlrunr   	load_filedestfilejsonloadsr   DatetimeAwareJSONDecoder)r3   acqapt_news_fileapt_news_contentss       r!   fetch_aptnews_jsonrs      s    KK%%5
//
C''SB0E0EM GGI(()?)?@::)) r#   c                     t        |       }t        | |j                  dg             }t        j	                  d|       |dj                  |j                        S y )Nr   zusing msg: %r
)rs   r\   getrX   rY   joinr0   )r3   	news_dictrL   s      r!   fetch_and_process_apt_newsry      sL    "3'I
immJ;
<CIIos#
yy##r#   c                    t        |       \  }}|t        j                  k(  r/t        j                  j                  |      j                  |      S |t        j                  k(  rot        j                  |z   }| j                  j                  }|d}n|j                  d      }t        j                  j                  |      j                  ||      S |t        j                  k(  rt        j                  S y)z4
    :return: str if local news, None otherwise
    )remaining_daysNUnknownz%d %b %Y)expired_dater{   )r   r   ACTIVE_EXPIRED_SOONr   CONTRACT_EXPIRES_SOON	pluralizeformatEXPIRED_GRACE_PERIODr   !CONTRACT_EXPIRY_GRACE_PERIOD_DAYSmachine_token_filecontract_expiry_datetimestrftimeCONTRACT_EXPIRED_GRACE_PERIODEXPIREDCONTRACT_EXPIRED)r3   expiry_statusr{   grace_period_remainingexp_dt
exp_dt_strs         r!   local_apt_newsr      s     %?s$C!M>,@@@--77GNN) O 
 	
 ,AAA66G 	 ''@@>"J4J55??

&#4J  
	
 ,444(((r#   newsc                 h    d}| j                  d      D ]  }|dj                  |      z  } |dz  }|S )Nz#
ru   z# {}
)splitr   )r   resultrS   s      r!   format_news_for_apt_updater      s@    F

4  ((//$''(
eOFMr#   c                    	 t        |       }|st        |       }|rJt        j                  j	                  |       t        |      }t        j                  j	                  |       y t        j                  j                          t        j                  j                          y # t        $ r\}t        j                  d|       t        j                  j                          t        j                  j                          Y d }~y d }~ww xY w)Nz2something went wrong while processing apt_news: %r)r   ry   r   apt_news_raw_filewriter   apt_news_contents_filedeleterW   rX   rY   )r3   r   apt_update_formatted_newsr[   s       r!   update_apt_newsr      s    /c"-c2D))//5(B4(H%..445NO..557))002 /		FJ**113%%,,../s   A#B# &<B# #	D,ADD)5r2   rm   loggingrc   rI   typingr   r   rf   uaclientr   r   r   r   (uaclient.api.u.pro.status.is_attached.v1r	   uaclient.aptr
   uaclient.clouds.identityr   uaclient.configr   uaclient.contractr   r   uaclient.data_typesr   r   r   r   r   r   uaclient.filesr   	getLoggerreplace_top_level_logger_namer$   rX   r   r,   r)   r;   rE   r(   rK   rT   dictr\   rs   ry   r   r   r   r*   r#   r!   <module>r      s|      	  !  5 5 A , 3 $ N  'g:::8DEj &Z ,	&'>?	0#+H,=,=#>	$-s -t -. T 	!$Zn, H  H #  Xc] @S S / /r#   