o
    (f                     @   s   d dl Z d dlmZmZmZmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZmZ e	 Ze eeZG dd dejZG d	d
 d
eZG dd deZG dd deZ G dd deZ!G dd deZ"dS )    N)AnyDictOptionalTupleType)aptevent_loggermessagessystemutil)repo)EntitlementWithMessageUAEntitlement)MessagingOperationsMessagingOperationsDictStaticAffordancec                   @   s   e Zd ZdZejZejZej	Z
ejjZdZdZdZdZdZdefddZdeeee f fd	d
Zedd Zedeedf fddZedeedf fddZ ede!fddZ"dddZ#dS )RealtimeKernelEntitlementzrealtime-kernelzubuntu-pro-realtime-kernel.gpgTFUbuntuRealtimeKernelreturnc                 C   s(   t jt| jtdgd}t| |S )z%Check if system needs to be rebooted.zlinux-.*-realtime)installed_pkgsinstalled_pkgs_regex)r
   should_rebootsetpackageseventneeds_reboot)selfreboot_required r   @/usr/lib/python3/dist-packages/uaclient/entitlements/realtime.py_check_for_reboot   s   
z+RealtimeKernelEntitlement._check_for_rebootc                 C   s   t jt tjttjttjtiS N)GenericRealtimevariant_nameNvidiaTegraRealtimeRaspberryPiRealtimeIntelIotgRealtimer   r   r   r   _get_variants&   s
   z'RealtimeKernelEntitlement._get_variantsc                 C   s   | j rd S tS r!   )access_onlyr"   r'   r   r   r   default_variant.   s   z)RealtimeKernelEntitlement.default_variant.c                 C   s>   ddl m}m} ddlm} t|tjt|tjt|tj	fS )Nr   )FIPSEntitlementFIPSUpdatesEntitlement)LivepatchEntitlement)
uaclient.entitlements.fipsr+   r,   uaclient.entitlements.livepatchr-   r   r	   REALTIME_FIPS_INCOMPATIBLE"REALTIME_FIPS_UPDATES_INCOMPATIBLEREALTIME_LIVEPATCH_INCOMPATIBLE)r   r+   r,   r-   r   r   r   incompatible_services4   s   z/RealtimeKernelEntitlement.incompatible_servicesc                 C   s   t jdd dffS )Nc                   S   s   t  S r!   )r
   is_containerr   r   r   r   <lambda>N   s    z>RealtimeKernelEntitlement.static_affordances.<locals>.<lambda>F)r	   #REALTIME_ERROR_INSTALL_ON_CONTAINERr'   r   r   r   static_affordancesI   s
   z,RealtimeKernelEntitlement.static_affordancesc                 C   sD   d }| j stjtjddfg}d }| jstjdtjifg}||dS )NT)msgdefaultr8   )
pre_enablepre_disable)r)   r   prompt_for_confirmationr	   REALTIME_PROMPTpurgeREALTIME_PRE_DISABLE_PROMPT)r   r:   r;   r   r   r   	messagingS   s$   

z#RealtimeKernelEntitlement.messagingNc                 C   s@   t | jt t }|rtt|tjj	| j
d d S d S )N)title)r   r   intersectionr   get_installed_packages_namesremove_packageslistr	   DISABLE_FAILED_TMPLformatrA   )r   r   r   r   r   rD   s   s   

z)RealtimeKernelEntitlement.remove_packages)r   N)$__name__
__module____qualname__namer	   REALTIME_TITLErA   REALTIME_DESCRIPTIONdescriptionREALTIME_HELP_TEXT	help_texturlsREALTIME_HOME_PAGEhelp_doc_urlrepo_key_fileapt_noninteractivesupports_access_onlysupports_purgeoriginboolr    r   strr   r   r(   propertyr*   r   r   r3   r   r7   r   r@   rD   r   r   r   r   r      s0    	
	r   c                       s.   e Zd Zedeedf f fddZ  ZS )RealtimeVariantr   .c                    s(   t  fdd j D }t j| S )Nc                    s*   g | ]\}}t |tjj j|jd qS ))servicevariant)r   r	   REALTIME_VARIANT_INCOMPATIBLErG   rA   ).0rK   clsr'   r   r   
<listcomp>   s    z9RealtimeVariant.incompatible_services.<locals>.<listcomp>)tupleother_variantsitemssuperr3   )r   incompatible_variants	__class__r'   r   r3      s   
z%RealtimeVariant.incompatible_services)rH   rI   rJ   r[   r   r   r3   __classcell__r   r   rh   r   r\   ~   s    $r\   c                       s>   e Zd ZdZejZejZdZ	dZ
edef fddZ  ZS )r"   genericTr   c                    sd   t  j}t j}|dkr0|dpg }tjj| j	| j
d|pdd}|tjd|if ||d< |S )Nrk   r:   unknown)r^   r]   base_flavorcurrent_flavorr8   )rf   r@   r
   get_kernel_infoflavorgetr	   #KERNEL_FLAVOR_CHANGE_WARNING_PROMPTrG   r#   rK   appendr   r<   )r   r@   rn   r:   r8   rh   r   r   r@      s"   
zGenericRealtime.messaging)rH   rI   rJ   r#   r	   REALTIME_GENERIC_TITLErA   REALTIME_GENERIC_DESCRIPTIONrN   
is_variantcheck_packages_are_installedr[   r   r@   rj   r   r   rh   r   r"      s    r"   c                   @   s$   e Zd ZdZejZejZdZ	dZ
dS )r$   znvidia-tegraTN)rH   rI   rJ   r#   r	   REALTIME_NVIDIA_TITLErA   REALTIME_NVIDIA_DESCRIPTIONrN   rv   rw   r   r   r   r   r$      s    r$   c                   @   s2   e Zd ZdZejZejZdZ	dZ
defddZdS )r%   raspiTr   c              
   C   s\   d}zt |  }d|v pd|v W S  ty- } ztd| W Y d }~dS d }~ww )Nz/proc/device-tree/modelzraspberry pi 4zraspberry pi 5z)Error while detecting if raspberry pi: %rF)r
   	load_filestriplower	ExceptionLOGinfo)r   proc_file_pathmodeler   r   r   variant_auto_select   s   z'RaspberryPiRealtime.variant_auto_selectN)rH   rI   rJ   r#   r	   REALTIME_RASPI_TITLErA   REALTIME_RASPI_DESCRIPTIONrN   rv   rw   rY   r   r   r   r   r   r%      s    r%   c                   @   sL   e Zd ZdZejZejZdZ	dZ
deeef deeeej f fddZdS )r&   z
intel-iotgTplatform_checksr   c                 C   s@   t  j}|dg }||v rdS dtjj| j|d|dfS )Ncpu_vendor_ids)TNF,)rA   vendorsupported_vendors)	r
   get_cpu_info	vendor_idrq   r	   INAPPLICABLE_VENDOR_NAMErG   rA   join)r   r   r   r   r   r   r   verify_platform_checks   s   
z(IntelIotgRealtime.verify_platform_checksN)rH   rI   rJ   r#   r	   REALTIME_INTEL_TITLErA   REALTIME_INTEL_DESCRIPTIONrN   rv   rw   r   rZ   r   r   rY   r   NamedMessager   r   r   r   r   r&      s    
r&   )#loggingtypingr   r   r   r   r   uaclientr   r   r	   r
   r   uaclient.entitlementsr   uaclient.entitlements.baser   r   uaclient.typesr   r   r   get_event_loggerr   	getLoggerreplace_top_level_logger_namerH   r   RepoEntitlementr   r\   r"   r$   r%   r&   r   r   r   r   <module>   s    m