HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/uaclient/entitlements/__pycache__/__init__.cpython-310.pyc
o

��Jh@"�@sfddlZddlZddlmZddlmZmZmZmZddl	m
Z
ddlmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZmZdd
lmZddlmZddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&ddl'm(Z(eeeeeej)ej*ej+eee!e%e&g
Z,				d<dede-de-de.de.deee-defdd�Z/d=dede.dee-fdd �Z0ded!ee-dee-fd"d#�Z1ej2Gd$d%�d%ej3��Z4dedee-fd&d'�Z5dedee-fd(d)�Z6ded*eed+e4d,ee-e.fd-ee-f
d.d/�Z7ded+e4dee-fd0d1�Z8d2ee-defd3d4�Z9dede
j:fd5d6�Z;dede.fd7d8�Z<d>ded9e-fd:d;�Z=dS)?�N)�defaultdict)�Dict�List�Optional�Type)�
exceptions)�UAConfig)�fips)�AnboxEntitlement)�
UAEntitlement)�CommonCriteriaEntitlement)�CISEntitlement)�ApplicabilityStatus)�ESMAppsEntitlement�ESMInfraEntitlement)�LandscapeEntitlement)�LivepatchEntitlement)�RealtimeKernelEntitlement)�RepoEntitlement)�ROSEntitlement�ROSUpdatesEntitlement)�EntitlementNotFoundError�F�cfg�name�variant�purge�access_only�
extra_args�returncCsjtD]-}||||||d�}||jvr/|s|S||jvr*|j|||||d�St|d��qt|d��)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�ent�r'�@/usr/lib/python3/dist-packages/uaclient/entitlements/__init__.py�entitlement_factory's*�


�
�
r)�	all_namescsFt}|rg}|D]}|�|�d�j�qt|�St�fdd�|D��S)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
    �rcsg|]}|�d�j�qS)r+)�presentation_name)�.0�entitlement_clsr+r'r(�
<listcomp>ds
��z"valid_services.<locals>.<listcomp>)r"�extendr#�sorted)rr*�entitlements�namesr.r'r+r(�valid_servicesTs
��r4�entscs(t|���fdd��t|�fdd�d�S)zR
    A function to sort entitlments for enabling that preserves invalid names
    cs(z��|�WStyt��YSw�N)�index�
ValueError�len�r&)�valid_ents_orderedr'r(� sort_order_with_nonexistent_lastss
�zIorder_entitlements_for_enabling.<locals>.sort_order_with_nonexistent_lastcs�|�Sr6r'r:)r<r'r(�<lambda>ysz1order_entitlements_for_enabling.<locals>.<lambda>)�key)�entitlements_enable_orderr1)rr5r')r<r;r(�order_entitlements_for_enablingksr@c@seZdZe�Ze�ZdS)�	SortOrderN)�__name__�
__module__�__qualname__�object�REQUIRED_SERVICES�DEPENDENT_SERVICESr'r'r'r(rA|s
rAcC�t|tjd�S)zR
    Return the entitlements disable order based on dependent services logic.
    �r�
sort_order)�_sort_entitlementsrArGr+r'r'r(�entitlements_disable_order��rLcCrH)zP
    Return the entitlements enable order based on required services logic.
    rI)rKrArFr+r'r'r(r?�rMr?�ent_clsrJ�visited�ordercCs�|j|vrdS||�}|tjkrdd�|jD�}nt|j�}|D]}|j|vr0t|||||d�q |�t|j��d|t|j�<dS)NcSsg|]}|j�qSr')r%)r-�er'r'r(r/�sz,_sort_entitlements_visit.<locals>.<listcomp>�rrNrJrOrPT)	rrArF�required_services�list�dependent_services�_sort_entitlements_visit�append�str)rrNrJrOrPr&�cls_list�cls_dependencyr'r'r(rV�s$



��rVcCs(g}i}tD]}t|||||d�q|S)NrR)r"rV)rrJrPrOrNr'r'r(rK�s�rKr3cCsDg}|D]}|t|dd�vr|�|�qtt|�t|��}||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*)r4rWr1�set)r3r�entitlements_found�ent_name�entitlements_not_foundr'r'r(�get_valid_entitlement_names�s
�r_cCsJt|d�}d�|�}d�tjd|ddddd��}tjd	d�|�|d
�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)r^r�valid_services_namesr#rjr'r'r(�*create_enable_entitlements_not_found_error�s


���rpc	Cs�tt�}t|�D]f}t||�}t|t�sq|��\}}|tjkr?|j	}|j
p'd}|D]}|j�||�}	||	�
|||d��q*|��D]*\}
}t|�dkrm|dd}|dd}
tj|jd�tdd	�|D���||
d
��qCqdS)Nr')�from�apt_url�suite�rrrrsr`css�|]	}t|d�VqdS)rqN)rX)r-r&r'r'r(�	<genexpr>
s�z>check_entitlement_apt_directives_are_unique.<locals>.<genexpr>)�urlr3rrrsT)rrTr4r)�
isinstancer�applicability_statusr�
APPLICABLErr�
apt_suites�repo_policy_check_tmpl�formatrW�itemsr9r�%EntitlementsAPTDirectivesAreNotUnique�contract_urlrkr1)r�entitlement_directivesr]r&rx�_rrrzrs�entitlement_directive�def_path�
ent_directive�ent_apt_url�	ent_suiter'r'r(�+check_entitlement_apt_directives_are_unique�sD



�������r�r]cCs,z	t|||d�jWStjy|YSw)N)r)r)�titler�UbuntuProError)rr]rr'r'r(�	get_titles
�r�)rFFN)F)r)>�enumrl�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"rX�boolr)r4r@�unique�EnumrArLr?rVrKr_r�rpr�r�r'r'r'r(�<module>s��������
�
�-��
����
�
��
��
�.