Ë
    GKÕië"  ã                   óô  — d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ eeeeeeeejX                  ejZ                  ej\                  e e"e$e(e)gZ/	 	 	 	 d0dede0de0de1de1deee0      defd„Z2d1dede1dee0   fd„Z3dedee0   dee0   fd„Z4e jj                   G d „ d!e jl                  «      «       Z7dedee0   fd"„Z8dedee0   fd#„Z9ded$ee   d%e7d&ee0e1f   d'ee0   f
d(„Z:ded%e7dee0   fd)„Z;d*ee0   defd+„Z<dede
jz                  fd,„Z>dede1fd-„Z?d2ded.e0fd/„Z@y)3é    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ÚcfgÚnameÚvariantÚpurgeÚaccess_onlyÚ
extra_argsÚreturnc                 óÜ   — t         D ]X  } || ||||¬«      }||j                  v sŒ|s|c S ||j                  v r |j                  |   | |||¬«      c S t        |¬«      ‚ t        |¬«      ‚)a1  Returns 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.
    )r   r   Úcalled_namer   r    )r   r#   r   r    )Úentitlement_name)ÚENTITLEMENT_CLASSESÚvalid_namesÚvariantsr   )r   r   r   r   r   r    Ú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        |«      S t        |D �cg c]  } || ¬«      j                  ‘Œ c}«      S c c}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)r   r-   ÚentitlementsÚnamesÚentitlement_clss        r*   Úvalid_servicesr6   Z   sx   € ô '€LÙØˆØ+ò 	?ˆOØ�L‰L™¨SÔ1×=Ñ=Õ>ð	?ô �e‹}Ðäð $0ö	
àñ  Ô$×6Ó6ò	
óð ùò	
s   ÁA)Úentsc                 óF   ‡‡— t        | «      Šˆfd„Št        |ˆfd„¬«      S )zR
    A function to sort entitlments for enabling that preserves invalid names
    c                 ó\   •— 	 ‰j                  | «      S # t        $ r t        ‰«      cY S w xY w©N)ÚindexÚ
ValueErrorÚlen)r)   Úvalid_ents_ordereds    €r*   Ú sort_order_with_nonexistent_lastzIorder_entitlements_for_enabling.<locals>.sort_order_with_nonexistent_lasty   s4   ø€ ð	+Ø%×+Ñ+¨CÓ0Ð0øÜò 	+ÜÐ)Ó*Ò*ð	+ús   ƒ ”+ª+c                 ó   •—  ‰| «      S r:   © )r)   r?   s    €r*   ú<lambda>z1order_entitlements_for_enabling.<locals>.<lambda>   s   ø€ Ñ(HÈÓ(M€ r,   )Úkey)Úentitlements_enable_orderr1   )r   r7   r?   r>   s     @@r*   Úorder_entitlements_for_enablingrE   q   s%   ù€ ô 3°3Ó7Ðô+ô �$ÓMÔNÐNr,   c                   ó(   — e Zd Z e«       Z e«       Zy)Ú	SortOrderN)Ú__name__Ú
__module__Ú__qualname__ÚobjectÚREQUIRED_SERVICESÚDEPENDENT_SERVICESrA   r,   r*   rG   rG   ‚   s   „ á›ÐÙ›Ñr,   rG   c                 ó8   — t        | t        j                  ¬«      S )zR
    Return the entitlements disable order based on dependent services logic.
    ©r   Ú
sort_order)Ú_sort_entitlementsrG   rM   r/   s    r*   Úentitlements_disable_orderrR   ˆ   s   € ô  #´)×2NÑ2NÔOÐOr,   c                 ó8   — t        | t        j                  ¬«      S )zP
    Return the entitlements enable order based on required services logic.
    rO   )rQ   rG   rL   r/   s    r*   rD   rD   �   s   € ô  #´)×2MÑ2MÔNÐNr,   Úent_clsrP   ÚvisitedÚorderc                 ó˜  — |j                   |v ry  || «      }|t        j                  k(  r$|j                  D �cg c]  }|j                  ‘Œ }}nt        |j                  «      }|D ]!  }|j                   |vsŒt        | ||||¬«       Œ# |j                  t        |j                   «      «       d|t        |j                   «      <   y c c}w )N©r   rT   rP   rU   rV   T)
r   rG   rL   Úrequired_servicesr(   ÚlistÚdependent_servicesÚ_sort_entitlements_visitÚappendÚstr)	r   rT   rP   rU   rV   r)   ÚeÚcls_listÚcls_dependencys	            r*   r\   r\   –   s¹   € ð ‡|�|�wÑØá
�#‹,€Cà”Y×0Ñ0Ò0Ø+.×+@Ñ+@ÖA a�A—M“MÐAˆÑAä˜×.Ñ.Ó/ˆà"ò ˆØ�<‰<˜wÒ&Ü$ØØ&Ø%ØØöðð 
‡L�L”�W—\‘\Ó"Ô#Ø!%€GŒC�—‘ÓÒùò Bs   ¹Cc                 óD   — g }i }t         D ]  }t        | ||||¬«       Œ |S )NrX   )r%   r\   )r   rP   rV   rU   rT   s        r*   rQ   rQ   µ   s9   € Ø€EØ€Gä&ò 
ˆÜ ØØØ!ØØö	
ð
ð €Lr,   r4   c                 óž   — g }| D ]#  }|t        |d¬«      v sŒ|j                  |«       Œ% t        t        | «      t        |«      z
  «      }||fS )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)r   r-   )r6   r]   r1   Úset)r4   r   Úentitlements_foundÚent_nameÚentitlements_not_founds        r*   Úget_valid_entitlement_namesrh   Å   s^   € ð Ðàò 0ˆØ”~¨#¸Ô>Ò>Ø×%Ñ% hÕ/ð0ô $¤C¨£J´Ð5GÓ1HÑ$HÓIÐàÐ5Ð5Ð5r,   c                 óæ   — t        |¬«      }dj                  |«      }dj                  t        j                  d|z   dz   ddd¬«      «      }t	        j
                  d	dj                  | «      |¬
«      S )z{
    Constructs the MESSAGE_INVALID_SERVICE_OP_FAILURE message
    based on the attempted services and valid services.
    r/   ú, ú
zTry ú.éP   F)ÚwidthÚbreak_long_wordsÚbreak_on_hyphensÚenable)Ú	operationÚinvalid_serviceÚservice_msg)r6   ÚjoinÚtextwrapÚwrapr   ÚInvalidServiceOpError)rg   r   Úvalid_services_namesr&   rt   s        r*   Ú*create_enable_entitlements_not_found_errorrz   Ö   sv   € ô *¨cÔ2ÐØ—)‘)Ð0Ó1€KØ—)‘)Ü�‰Ø�[Ñ  3Ñ&ØØ"Ø"ô		
ó€Kô ×+Ñ+ØØŸ	™	Ð"8Ó9Øôð r,   c                 ój  — t        t        «      }t        | «      D �]  }t        | |«      }t	        |t
        «      sŒ!|j                  «       \  }}|t        j                  k(  rW|j                  }|j                  xs d}|D ]6  }|j                  j                  ||«      }	||	   j                  |||dœ«       Œ8 |j                  «       D ]e  \  }
}t        |«      dkD  sŒ|d   d   }|d   d   }t!        j"                  | j$                  dj'                  t)        d„ |D «       «      «      ||¬	«      ‚ �Œ y
)NrA   )ÚfromÚapt_urlÚsuiteé   r   r}   r~   rj   c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)r|   N)r^   )Ú.0r)   s     r*   ú	<genexpr>z>check_entitlement_apt_directives_are_unique.<locals>.<genexpr>  s   è ø€ ÒI°Cœs 3 v¡;×/ÑIùs   ‚)Úurlr4   r}   r~   T)r   rZ   r6   r+   Ú
isinstancer   Úapplicability_statusr   Ú
APPLICABLEr}   Ú
apt_suitesÚrepo_policy_check_tmplÚformatr]   Úitemsr=   r   Ú%EntitlementsAPTDirectivesAreNotUniqueÚcontract_urlru   r1   )r   Úentitlement_directivesrf   r)   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,   rf   c                 ój   — 	 t        | ||¬«      j                  S # t        j                  $ r |cY S w xY w)N)r   )r+   Útitler   ÚUbuntuProError)r   rf   r   s      r*   Ú	get_titler˜     s6   € ðÜ" 3¨¸'ÔB×HÑHÐHøÜ×$Ñ$ò ØŠðús   ‚ š2±2)Ú FFN)F)r™   )AÚenumrv   Úcollectionsr   Útypingr   r   r   r   Úuaclientr   Úuaclient.configr	   Úuaclient.entitlementsr
   Úuaclient.entitlements.anboxr   Úuaclient.entitlements.baser   Úuaclient.entitlements.ccr   Úuaclient.entitlements.cisr   Ú(uaclient.entitlements.entitlement_statusr   Úuaclient.entitlements.esmr   r   Ú uaclient.entitlements.esm_legacyr   r   Úuaclient.entitlements.landscaper   Úuaclient.entitlements.livepatchr   Úuaclient.entitlements.realtimer   Úuaclient.entitlements.repor   Úuaclient.entitlements.rosr   r   Úuaclient.exceptionsr   ÚFIPSEntitlementÚFIPSUpdatesEntitlementÚFIPSPreviewEntitlementr%   r^   Úboolr+   r6   rE   ÚuniqueÚEnumrG   rR   rD   r\   rQ   rh   r—   rz   r”   r˜   rA   r,   r*   ú<module>r³      sL  ðÛ Û Ý #ß -Ó -å Ý $Ý &Ý 8Ý 4Ý >Ý 4Ý Hß M÷õ AÝ @Ý 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,   