Current File : //usr/lib/python3/dist-packages/uaclient/__pycache__/apt_news.cpython-312.pyc
�

��g�!��D�ddlZddlZddlZddlZddlZddlZddlmZmZddl	Z	ddl
mZmZm
Z
mZddlmZmZddlmZmZmZddlmZddlmZddlmZmZmZmZmZm Z dd	l!m"Z"m#Z#m$Z$ejJejLe'��Z(Gd
�de�Z)Gd�d
e�Z*d�Z+dedee)de,fd�Z-dejdeejde,fd�Z.de/de,fd�Z0de*de,fd�Z1dedee2dee*fd�Z3edefd��Z4dedee/fd�Z5dedee/fd�Z6de/de/fd �Z7defd!�Z8y)"�N)�List�Optional)�defaults�messages�system�util)�ContractExpiryStatus�_is_attached)�ensure_apt_pkg_init�get_pkg_version�version_compare)�get_cloud_type)�UAConfig)�
BoolDataValue�
DataObject�DatetimeDataValue�Field�StringDataValue�	data_list)�
machine_token�notices�state_filesc��eZdZedee�d��edee�d��eded��edee�d��edeee��d��gZdddddd	�dee	e
dee	e
deedee	e
dee	e	e
f
d
�Zy)�AptNewsMessageSelectors�	codenamesF��required�clouds�pro�
architectures�packagesN�rrrr r!c�J�||_||_||_||_||_y�Nr")�selfrrrr r!s      �3/usr/lib/python3/dist-packages/uaclient/apt_news.py�__init__z AptNewsMessageSelectors.__init__+s(��#���������*��� ��
�)
�__name__�
__module__�__qualname__rrrr�fieldsrr�str�boolr'�r(r&rr s���
�k�9�_�5��F�
�h�	�/�2�U�C�
�e�]�U�3�
�o�y��9�E�J�
��	�)�O�"<�=��	
��F�*.�&*�"�-1�.2�
!��D��I�&�
!���c��#�	
!�
�d�^�
!� ��S�	�*�

!��4��S�	�?�+�
!r(rc
��eZdZede�eded��eded��edee��gZddd�de	jde
e	jde
edeefd	�Z
y)
�AptNewsMessage�begin�endFr�	selectors�linesN)r3r4c�<�||_||_||_||_yr$)r2r3r4r5)r%r2r3r4r5s     r&r'zAptNewsMessage.__init__Cs ����
����"�����
r()r)r*r+rrrrrr,�datetimerrr-r'r/r(r&r1r1;s���
�g�(�)�
�e�&��7�
�k�2�U�C�
�g�y��1�2�	�F�,0�7;��� � ���h�'�'�
(�	�
�3�4���C�y�
r(r1c���	|\}}}t|�}|�yt	||�}t|dk(xr|dv|dkxr|dv|dkDxr|dvg�S#t$rtjd|�YywxYw)NzInvalid package selector: %rFr)z==�<=�>=)�<r9)�>r:)�
ValueError�LOG�warningrr
�any)�package_selector�package_name�version_operator�package_version�installed_package_version�version_comparisons      r&�_does_package_selector_applyrGQs����:J�7��&��!0�� =�� �(��(�!�?����#�a�'�;�$�(:�:�
�!�
#�
G�(8�K�(G�
�!�
#�
G�(8�K�(G�
	
�	�	�������2�4D�E���s�A�A-�,A-�cfgr4�returnc��|�y|j�+tj�j|jvry|j�t�\}}|�y||jvry|j�#|jt|�jk7ry|j�!tj�|jvry|j�-t|jD�cgc]
}t|���c}�syycc}w)NTF)rr�get_release_info�seriesrrrr
�is_attachedr �
get_dpkg_archr!r@rG)rHr4�cloud_id�failrAs     r&�do_selectors_applyrQis���������&��"�"�$�+�+�9�3F�3F�F�����#�'�)���$�����9�+�+�+���}�}� ��=�=�L��-�9�9�9�����*����!��)@�)@�@�����%��)2�(:�(:�
�$�-�-=�>�
�
����
s�!C<r2r3c���tjjtjj�}||kry|tjd��z}|�||kDr|}n|}||kDryy)NF�)�daysT)r7�now�timezone�utc�	timedelta)r2r3rU�one_month_after_begin�
end_to_uses     r&�do_dates_applyr[�sk���
�
�
�
�� 1� 1� 5� 5�
6�C�
�U�{��!�H�$6�$6�B�$?�?��
�{�c�1�1�*�
��
�
�Z���r(�cc�8�tj|�ddk(S)Nr�C)�unicodedata�category)r\s r&�is_control_charra�s������"�1�%��,�,r(�msgc	��t|j�dkryt|j�dkDry|jD]6}t|D�cgc]
}t|���c}�ryt|�dkDs�6yycc}w)N�F��MT)�lenr5r@ra)rb�liner\s   r&�is_message_validri�sn��
�3�9�9�~����
�3�9�9�~�����	�	����D�1�q���"�1�2���t�9�r�>��	���2s�A9
rc��|D]�}	tj|�}t|�stj	d|��;t
|j|j�stj	d|��rt||j�stj	d|���|cSy#t$r }tj	d|�Yd}~��d}~wwxYw)Nzmsg failed parsing: %rzmsg not valid: %rzmsg dates don't apply: %rzmsg selectors don't apply: %r)r1�	from_dict�	Exceptionr>�debugrir[r2r3rQr4)rHr�msg_dictrb�es     r&�select_messagerp�s������	� �*�*�8�4�C� ��$��I�I�)�3�/���c�i�i����1��I�I�1�3�7��!�#�s�}�}�5��I�I�5�s�;���
�� ���	��I�I�.��2���	�s�B(�(	C�1C�Cc���tjtjd��t	j
tjd��t
j�}t
j||jdtj��}|j�tj|j�}tj|t j"��S)NT)�exist_ok�_apt)�user�)�hash�destdir)�cls)�os�makedirsr�
APT_NEWS_PATH�shutil�chown�apt_pkg�Acquire�AcquireFile�apt_news_url�runr�	load_file�destfile�json�loadsr�DatetimeAwareJSONDecoder)rH�acq�
apt_news_file�apt_news_contentss    r&�fetch_aptnews_jsonr��s����K�K��&�&��6�
�L�L��'�'�f�5�
�/�/�
�C��'�'��S�
�
�B��0F�0F��M��G�G�I��(�(��)?�)?�@���:�:���)�)��r(c��t|�}t||jdg��}tj	d|�|�dj|j�Sy)Nrz
using msg: %r�
)r�rp�getr>rm�joinr5)rH�	news_dictrbs   r&�fetch_and_process_apt_newsr��sL��"�3�'�I�
��i�m�m�J��;�
<�C��I�I�o�s�#�
���y�y����#�#�r(c��t|�}|j}|j}tj|�}|t
jjk(r=tjtjj�tjStjtjj�|t
jjk(r/tjj!|�j#|��S|t
j$jk(ret&j(|z}|j*}|�d}n|j-d�}tj.j!|�j#||��Sy)z4
    :return: str if local news, None otherwise
    )�remaining_daysN�Unknownz%d %b %Y)�expired_dater�)r
�contract_status�contract_remaining_daysr�get_machine_token_filer	�EXPIRED�valuer�add�Notice�CONTRACT_EXPIREDr�remove�ACTIVE_EXPIRED_SOON�CONTRACT_EXPIRES_SOON�	pluralize�format�EXPIRED_GRACE_PERIODr�!CONTRACT_EXPIRY_GRACE_PERIOD_DAYS�contract_expiry_datetime�strftime�CONTRACT_EXPIRED_GRACE_PERIOD)rH�is_attached_info�
expiry_statusr��machine_token_file�grace_period_remaining�exp_dt�
exp_dt_strs        r&�local_apt_newsr��sJ��$�C�(��$�4�4�M�%�=�=�N�&�=�=�c�B���,�4�4�:�:�:����G�N�N�3�3�4��(�(�(��N�N�7�>�>�2�2�3��,�@�@�F�F�F��-�-�7�7��G�N�N�)�O�
�	
��,�A�A�G�G�G��6�6��G�	�$�<�<���>�"�J�����4�J��5�5�?�?��
�
�&�#�4J��
�	
�r(�newsc�h�d}|jd�D]}|dj|�z
}�|dz
}|S)Nz#
r�z# {}
)�splitr�)r��resultrhs   r&�format_news_for_apt_updater�	s@��
�F��
�
�4� �(���(�/�/�$�'�'��(�
�e�O�F��Mr(c��	t|�}|st|�}|rJtjj	|�t|�}tjj	|�ytjj�tjj�y#t$r\}tjd|�tjj�tjj�Yd}~yd}~wwxYw)Nz2something went wrong while processing apt_news: %r)r�r�r�apt_news_raw_file�writer��apt_news_contents_file�deleterlr>rm)rHr��apt_update_formatted_newsros    r&�update_apt_newsr�s���/��c�"���-�c�2�D���)�)�/�/��5�(B�4�(H�%��.�.�4�4�5N�O��.�.�5�5�7��)�)�0�0�2���/��	�	�F��J��*�*�1�1�3��%�%�,�,�.�.��/�s�A#B#�&<B#�#	D�,AD�D)9r7r��loggingryr|r_�typingrrr~�uaclientrrrr�(uaclient.api.u.pro.status.is_attached.v1r	r
�uaclient.aptrrr
�uaclient.clouds.identityr�uaclient.configr�uaclient.data_typesrrrrrr�uaclient.filesrrr�	getLogger�replace_top_level_logger_namer)r>rr1rGr.rQr[r-rari�dictrpr�r�r�r�r�r/r(r&�<module>r�s������	�
��!��5�5��O�N�3�$���?�>��g���:��:�:�8�D�E��!�j�!�6�Z��,�0"�	�"�&�'>�?�"�	�"�J�����#+�H�,=�,=�#>��	��$-�s�-�t�-��.��T���	��!�$�Z��
�n���,�
�H�
��
� �H���#���#��#�X�c�]�#�L�S��S��/��/r(