Your IP : 216.73.216.172


Current Path : /lib/python3/dist-packages/uaclient/entitlements/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/uaclient/entitlements/__pycache__/__init__.cpython-38.pyc

U

���h�"�@sFddlZddlZddlmZddlmZmZmZmZddl	m
Z
ddlmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZmZdd
lmZmZddlm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(m)Z)ddl*m+Z+eeeeeeeej,ej-ej.e e"e$e(e)gZ/d6ee0e0e1e1eee0ed�dd�Z2d7ee1ee0d�dd�Z3eee0ee0d�dd�Z4ej5Gdd �d ej6��Z7eee0d!�d"d#�Z8eee0d!�d$d%�Z9eeee7ee0e1fee0d&�d'd(�Z:ee7ee0d)�d*d+�Z;ee0ed,�d-d.�Z<ee
j=d!�d/d0�Z>ee1d!�d1d2�Z?d8ee0d3�d4d5�Z@dS)9�N)�defaultdict)�Dict�List�Optional�Type)�
exceptions)�UAConfig)�fips)�AnboxEntitlement)�
UAEntitlement)�CommonCriteriaEntitlement)�CISEntitlement)�ApplicabilityStatus)�ESMAppsEntitlement�ESMInfraEntitlement)�ESMAppsLegacyEntitlement�ESMInfraLegacyEntitlement)�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_namesr!csFt}|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>js�z"valid_services.<locals>.<listcomp>)r#�extendr$�sorted)rr*Zentitlements�namesr-r'r+r(�valid_servicesZs
��r2)r�entsr!cs(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_lastyszIorder_entitlements_for_enabling.<locals>.sort_order_with_nonexistent_lastcs�|�Sr4r'r8)r:r'r(�<lambda>�z1order_entitlements_for_enabling.<locals>.<lambda>)�key)�entitlements_enable_orderr0)rr3r')r:r9r(�order_entitlements_for_enablingqsr?c@seZdZe�Ze�ZdS)�	SortOrderN)�__name__�
__module__�__qualname__�object�REQUIRED_SERVICES�DEPENDENT_SERVICESr'r'r'r(r@�sr@)rr!cCst|tjd�S)zR
    Return the entitlements disable order based on dependent services logic.
    �r�
sort_order)�_sort_entitlementsr@rFr+r'r'r(�entitlements_disable_order�srJcCst|tjd�S)zP
    Return the entitlements enable order based on required services logic.
    rG)rIr@rEr+r'r'r(r>�sr>�r�ent_clsrH�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>rKT)	rr@rEZrequired_services�listZdependent_services�_sort_entitlements_visit�append�str)rrLrHrMrNr&Zcls_listZcls_dependencyr'r'r(rQ�s"



�rQ)rrHr!cCs(g}i}tD]}t|||||d�q|S)NrK)r#rQ)rrHrNrMrLr'r'r(rI�s�rI)r1rcCsDg}|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*)r2rRr0�set)r1rZentitlements_found�ent_name�entitlements_not_foundr'r'r(�get_valid_entitlement_names�srWcCsJt|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)r2�join�textwrapZwraprZInvalidServiceOpError)rVrZvalid_services_namesr$r^r'r'r(�*create_enable_entitlements_not_found_error�s


���rac	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�rrcrdrXcss|]}t|d�VqdS)rbN)rS)r,r&r'r'r(�	<genexpr>sz>check_entitlement_apt_directives_are_unique.<locals>.<genexpr>)Zurlr1rcrdT)rrPr2r)�
isinstancer�applicability_statusrZ
APPLICABLErc�
apt_suitesZrepo_policy_check_tmpl�formatrR�itemsr7rZ%EntitlementsAPTDirectivesAreNotUniqueZcontract_urlr_r0)rZentitlement_directivesrUr&rh�_rcrirdZentitlement_directiveZdef_pathZ
ent_directiveZent_apt_urlZ	ent_suiter'r'r(�+check_entitlement_apt_directives_are_unique�sB



�����
	rm)rrUcCs2zt|||d�jWStjk
r,|YSXdS)N)r)r)�titler�UbuntuProError)rrUrr'r'r(�	get_titlesrp)rFFN)F)r)A�enumr`�collectionsr�typingrrrrZuaclientrZuaclient.configrZuaclient.entitlementsr	Zuaclient.entitlements.anboxr
Zuaclient.entitlements.baserZuaclient.entitlements.ccrZuaclient.entitlements.cisr
Z(uaclient.entitlements.entitlement_statusrZuaclient.entitlements.esmrrZ uaclient.entitlements.esm_legacyrrZuaclient.entitlements.landscaperZuaclient.entitlements.livepatchrZuaclient.entitlements.realtimerZuaclient.entitlements.reporZuaclient.entitlements.rosrrZuaclient.exceptionsrZFIPSEntitlementZFIPSUpdatesEntitlementZFIPSPreviewEntitlementr#rS�boolr)r2r?�unique�Enumr@rJr>rQrIrWrorarmrpr'r'r'r(�<module>s���
�-�
���.