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

��g@"����ddlZddlZddlmZddlmZmZmZmZddl	m
Z
ddlmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZmZdd
lmZddlmZddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&ddl'm(Z(eeeeeejRejTejVeee!e%e&g
Z,				d/dede-de-de.de.deee-defd�Z/d0dede.dee-fd�Z0dedee-dee-fd�Z1ejdGd�d ejf��Z4dedee-fd!�Z5dedee-fd"�Z6ded#eed$e4d%ee-e.fd&ee-f
d'�Z7ded$e4dee-fd(�Z8d)ee-defd*�Z9dede
jtfd+�Z;dede.fd,�Z<d1ded-e-fd.�Z=y)2�N)�defaultdict)�Dict�List�Optional�Type)�
exceptions)�UAConfig)�fips)�AnboxEntitlement)�
UAEntitlement)�CommonCriteriaEntitlement)�CISEntitlement)�ApplicabilityStatus)�ESMAppsEntitlement�ESMInfraEntitlement)�LandscapeEntitlement)�LivepatchEntitlement)�RealtimeKernelEntitlement)�RepoEntitlement)�ROSEntitlement�ROSUpdatesEntitlement)�EntitlementNotFoundError�cfg�name�variant�purge�access_only�
extra_args�returnc���tD]X}||||||��}||jvs�|s|cS||jvr|j|||||��cSt|���t|���)a1Returns a UAEntitlement object based on the provided name.

    :param cfg: UAConfig instance
    :param name: The name of the entitlement to return
    :param variant: The variant name to be used
    :param purge: If purge operation is enabled
    :param access_only: If entitlement should be set with access only
    :param extra_args: Extra parameters to create the entitlement

    :raise EntitlementNotFoundError: If no entitlement with the given name is
      found, or if the entitlement exists but no variant with the specified
      name is found.
    )rr�called_namerr)rr!rr)�entitlement_name)�ENTITLEMENT_CLASSES�valid_names�variantsr)rrrrrr�entitlement�ents        �@/usr/lib/python3/dist-packages/uaclient/entitlements/__init__.py�entitlement_factoryr)'s���,+�I����#���!�
���3�?�?�"���
��C�L�L�(�,�s�|�|�G�,�� $��)�	��/��H�H�'I�(#�D�
9�9��	all_namesc���t}|r6g}|D]$}|j||��j��&t|�St|D�cgc]}||��j��c}�Scc}w)z�Return a list of valid services.

    :param cfg: UAConfig instance
    :param all_names: if we should return all the names for a service instead
        of just the presentation_name
    �r)r#�extendr$�sorted�presentation_name)rr+�entitlements�names�entitlement_clss     r(�valid_servicesr4Tsx��'�L����+�	?�O��L�L��S�1�=�=�>�	?��e�}���$0�	
��
��$�6�6�	
����	
s�A)�entsc�F���t|���fd��t|�fd���S)zR
    A function to sort entitlments for enabling that preserves invalid names
    c�\��	�j|�S#t$rt��cYSwxYw�N)�index�
ValueError�len)r'�valid_ents_ordereds �r(� sort_order_with_nonexistent_lastzIorder_entitlements_for_enabling.<locals>.sort_order_with_nonexistent_lastss4���	+�%�+�+�C�0�0���	+��)�*�*�	+�s��+�+c����|�Sr8�)r'r=s �r(�<lambda>z1order_entitlements_for_enabling.<locals>.<lambda>ys
���(H��(M�r*)�key)�entitlements_enable_orderr/)rr5r=r<s  @@r(�order_entitlements_for_enablingrCks%���3�3�7��+��$�M�N�Nr*c�(�eZdZe�Ze�Zy)�	SortOrderN)�__name__�
__module__�__qualname__�object�REQUIRED_SERVICES�DEPENDENT_SERVICESr?r*r(rErE|s�������r*rEc�8�t|tj��S)zR
    Return the entitlements disable order based on dependent services logic.
    �r�
sort_order)�_sort_entitlementsrErKr-s r(�entitlements_disable_orderrP�s���#�)�2N�2N�O�Or*c�8�t|tj��S)zP
    Return the entitlements enable order based on required services logic.
    rM)rOrErJr-s r(rBrB�s���#�)�2M�2M�N�Nr*�ent_clsrN�visited�orderc��|j|vry||�}|tjk(r$|jD�cgc]}|j��}}nt|j�}|D]!}|j|vs�t|||||���#|jt|j��d|t|j�<ycc}w)N�rrRrNrSrTT)
rrErJ�required_servicesr&�list�dependent_services�_sort_entitlements_visit�append�str)	rrRrNrSrTr'�e�cls_list�cls_dependencys	         r(rZrZ�s����|�|�w���
�#�,�C��Y�0�0�0�+.�+@�+@�A�a�A�M�M�A��A���.�.�/��"����<�<�w�&�$��&�%���
��
�L�L��W�\�\�"�#�!%�G�C�������Bs�Cc�D�g}i}tD]}t|||||���|S)NrV)r#rZ)rrNrTrSrRs     r(rOrO�s9���E��G�&�
�� ���!���	
�
��Lr*r2c��g}|D]#}|t|d��vs�|j|��%tt|�t|�z
�}||fS)z�Return a list of valid entitlement names.

    :param names: List of entitlements to validate
    :return: a tuple of List containing the valid and invalid entitlements
    T)rr+)r4r[r/�set)r2r�entitlements_found�ent_name�entitlements_not_founds     r(�get_valid_entitlement_namesrf�s^�����0���~�#��>�>��%�%�h�/�0�$�C��J��5G�1H�$H�I���5�5�5r*c���t|��}dj|�}djtjd|zdzddd���}t	j
d	dj|�|�
�S)z{
    Constructs the MESSAGE_INVALID_SERVICE_OP_FAILURE message
    based on the attempted services and valid services.
    r-�, �
zTry �.�PF)�width�break_long_words�break_on_hyphens�enable)�	operation�invalid_service�service_msg)r4�join�textwrap�wrapr�InvalidServiceOpError)rer�valid_services_namesr$rrs     r(�*create_enable_entitlements_not_found_errorrx�sv��*�c�2���)�)�0�1�K��)�)��
�
��[� �3�&��"�"�		
��K��+�+���	�	�"8�9���r*c�j�tt�}t|�D�]}t||�}t	|t
�s�!|j
�\}}|tjk(rW|j}|jxsd}|D]6}|jj||�}	||	j|||d���8|j�D]e\}
}t|�dkDs�|dd}|dd}
t!j"|j$dj't)d�|D���||
�	����y
)Nr?)�from�apt_url�suite�rr{r|rhc3�8K�|]}t|d����y�w)rzN)r\)�.0r's  r(�	<genexpr>z>check_entitlement_apt_directives_are_unique.<locals>.<genexpr>
s����I�C�s�3�v�;�/�I�s�)�urlr2r{r|T)rrXr4r)�
isinstancer�applicability_statusr�
APPLICABLEr{�
apt_suites�repo_policy_check_tmpl�formatr[�itemsr;r�%EntitlementsAPTDirectivesAreNotUnique�contract_urlrsr/)r�entitlement_directivesrdr'r��_r{r�r|�entitlement_directive�def_path�
ent_directive�ent_apt_url�	ent_suites              r(�+check_entitlement_apt_directives_are_uniquer��sS��)��.��"�3�'�$��!�#�x�0���#��/��"%�":�":�"<���a��#6�#A�#A�A��k�k�G����-�2�J�#�

��(+�(B�(B�(I�(I��U�)�%�'�'<�=�D�D� (�#*�!&���	

�(>�'C�'C�'E�	�#�H�m��=�!�A�%�+�A�.�y�9��)�!�,�W�5�	� �F�F��(�(��)�)��I�=�I�I��(�#�
��	�1$�Lr*rdc�j�	t|||��jS#tj$r|cYSwxYw)N)r)r)�titler�UbuntuProError)rrdrs   r(�	get_titler�s6���"�3��'�B�H�H�H���$�$�����s��2�2)�FFN)F)r�)>�enumrt�collectionsr�typingrrrr�uaclientr�uaclient.configr	�uaclient.entitlementsr
�uaclient.entitlements.anboxr�uaclient.entitlements.baser�uaclient.entitlements.ccr
�uaclient.entitlements.cisr�(uaclient.entitlements.entitlement_statusr�uaclient.entitlements.esmrr�uaclient.entitlements.landscaper�uaclient.entitlements.livepatchr�uaclient.entitlements.realtimer�uaclient.entitlements.repor�uaclient.entitlements.rosrr�uaclient.exceptionsr�FIPSEntitlement�FIPSUpdatesEntitlement�FIPSPreviewEntitlementr#r\�boolr)r4rC�unique�EnumrErPrBrZrOrfr�rxr�r�r?r*r(�<module>r�s>����#�-�-��$�&�8�4�>�4�H�M�@�@�D�6�K�8����������������������(���&*�
*:�	�*:�

�*:��*:��	*:�
�*:���c��#�
*:��*:�Z���T��d�3�i��.O�	�O��c��O�	�#�Y�O�"���"��	�	�"�
�"�
P�H�P��c��P�O�8�O��S�	�O�&�	�&�
�-�
 �&��&��#�t�)�_�	&�
��9�&�>
�H�
�)�
��S�	�
� 6�t�C�y�6�x�6�"�!)������0+�	�+�	�+�\�8��s�r*