HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/uaclient/entitlements/__pycache__/__init__.cpython-38.pyc
U

��Jh@"�
@s2ddlZddlZddlmZddlmZmZmZmZddl	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,d5ee-e-e.e.eee-ed�dd�Z/d6ee.ee-d�dd�Z0eee-ee-d�dd�Z1ej2Gdd�dej3��Z4eee-d �d!d"�Z5eee-d �d#d$�Z6eeee4ee-e.fee-d%�d&d'�Z7ee4ee-d(�d)d*�Z8ee-ed+�d,d-�Z9ee
j:d �d.d/�Z;ee.d �d0d1�Z<d7ee-d2�d3d4�Z=dS)8�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�returncCsntD]Z}||||||d�}||jkr|s0|S||jkrT|j|||||d�St|d��qt|d��dS)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)Zentitlement_nameN)�ENTITLEMENT_CLASSES�valid_namesZvariantsr)rrrrrr�entitlement�ent�r%�@/usr/lib/python3/dist-packages/uaclient/entitlements/__init__.py�entitlement_factory's(�

�
r')r�	all_namesrcsFt}|r0g}|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))Zpresentation_name)�.0�entitlement_clsr)r%r&�
<listcomp>ds�z"valid_services.<locals>.<listcomp>)r!�extendr"�sorted)rr(Zentitlements�namesr+r%r)r&�valid_servicesTs
��r0)r�entsrcs(t|���fdd��t|�fdd�d�S)zR
    A function to sort entitlments for enabling that preserves invalid names
    cs.z��|�WStk
r(t��YSXdS�N)�index�
ValueError�len�r$)�valid_ents_orderedr%r&� sort_order_with_nonexistent_lastsszIorder_entitlements_for_enabling.<locals>.sort_order_with_nonexistent_lastcs�|�Sr2r%r6)r8r%r&�<lambda>y�z1order_entitlements_for_enabling.<locals>.<lambda>)�key)�entitlements_enable_orderr.)rr1r%)r8r7r&�order_entitlements_for_enablingksr=c@seZdZe�Ze�ZdS)�	SortOrderN)�__name__�
__module__�__qualname__�object�REQUIRED_SERVICES�DEPENDENT_SERVICESr%r%r%r&r>|sr>)rrcCst|tjd�S)zR
    Return the entitlements disable order based on dependent services logic.
    �r�
sort_order)�_sort_entitlementsr>rDr)r%r%r&�entitlements_disable_order�srHcCst|tjd�S)zP
    Return the entitlements enable order based on required services logic.
    rE)rGr>rCr)r%r%r&r<�sr<�r�ent_clsrF�visited�ordercCs�|j|krdS||�}|tjkr2dd�|jD�}n
t|j�}|D] }|j|kr@t|||||d�q@|�t|j��d|t|j�<dS)NcSsg|]
}|j�qSr%)r#)r*�er%r%r&r,�sz,_sort_entitlements_visit.<locals>.<listcomp>rIT)	rr>rCZrequired_services�listZdependent_services�_sort_entitlements_visit�append�str)rrJrFrKrLr$Zcls_listZcls_dependencyr%r%r&rO�s"



�rO)rrFrcCs(g}i}tD]}t|||||d�q|S)NrI)r!rO)rrFrLrKrJr%r%r&rG�s�rG)r/rcCsDg}|D]}|t|dd�kr|�|�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()r0rPr.�set)r/rZentitlements_found�ent_name�entitlements_not_foundr%r%r&�get_valid_entitlement_names�srUcCsJt|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)�widthZbreak_long_wordsZbreak_on_hyphens�enable)Z	operationZinvalid_service�service_msg)r0�join�textwrapZwraprZInvalidServiceOpError)rTrZvalid_services_namesr"r\r%r%r&�*create_enable_entitlements_not_found_error�s


���r_c	Cs�tt�}t|�D]�}t||�}t|t�s*q|��\}}|tjkr~|j	}|j
pNd}|D](}|j�||�}	||	�
|||d��qT|��D]T\}
}t|�dkr�|dd}|dd}
tj|jd�tdd	�|D���||
d
��q�qdS)Nr%)�from�apt_url�suite�rrarbrVcss|]}t|d�VqdS)r`N)rQ)r*r$r%r%r&�	<genexpr>
sz>check_entitlement_apt_directives_are_unique.<locals>.<genexpr>)Zurlr/rarbT)rrNr0r'�
isinstancer�applicability_statusrZ
APPLICABLEra�
apt_suitesZrepo_policy_check_tmpl�formatrP�itemsr5rZ%EntitlementsAPTDirectivesAreNotUniqueZcontract_urlr]r.)rZentitlement_directivesrSr$rf�_rargrbZentitlement_directiveZdef_pathZ
ent_directiveZent_apt_urlZ	ent_suiter%r%r&�+check_entitlement_apt_directives_are_unique�sB



�����
	rk)rrScCs2zt|||d�jWStjk
r,|YSXdS)N)r)r'�titler�UbuntuProError)rrSrr%r%r&�	get_titlesrn)rFFN)F)r)>�enumr^�collectionsr�typingrrrrZuaclientrZuaclient.configrZuaclient.entitlementsr	Zuaclient.entitlements.anboxr
Zuaclient.entitlements.baserZuaclient.entitlements.ccrZuaclient.entitlements.cisr
Z(uaclient.entitlements.entitlement_statusrZuaclient.entitlements.esmrrZuaclient.entitlements.landscaperZuaclient.entitlements.livepatchrZuaclient.entitlements.realtimerZuaclient.entitlements.reporZuaclient.entitlements.rosrrZuaclient.exceptionsrZFIPSEntitlementZFIPSUpdatesEntitlementZFIPSPreviewEntitlementr!rQ�boolr'r0r=�unique�Enumr>rHr<rOrGrUrmr_rkrnr%r%r%r&�<module>s���
�-�
���.