
    g                        S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr  S	S
KJrJrJr  S	SKJr  S	SKJrJr  \(       a  S	SKJr  S	SKJr  SS jr " S S\5      r " S S\5      r " S S\5      r  " S S\\   \5      r!g)zHACS Base entities.    )annotations)TYPE_CHECKINGAny)callback)DeviceEntryType)async_dispatcher_connect)Entity)BaseCoordinatorEntity   )DOMAINHACS_SYSTEM_ID
NAME_SHORT)HacsUpdateCoordinator)HacsDispatchEventHacsGitHubRepo)HacsBase)HacsRepositoryc                v    [         [        41[        SS[        U R                  5      S[
        R                  S.$ )zReturn system info.zhacs.xyz zhomeassistant://hacs)identifiersnamemanufacturermodel
sw_versionconfiguration_url
entry_type)r   r   r   strversionr   SERVICEhacss    (/config/custom_components/hacs/entity.pysystem_infor#      s:      01"$,,'3%--     c                  6    \ rS rSr% SrSrS\S'   SrS	S jrSr	g)
HacsBaseEntity#   zBase HACS entity.NzHacsRepository | None
repositoryFc                    Xl         g)Initialize.Nr    )selfr!   s     r"   __init__HacsBaseEntity.__init__)   s    	r$   r    )r!   r   returnNone)
__name__
__module____qualname____firstlineno____doc__r(   __annotations___attr_should_pollr,   __static_attributes__ r$   r"   r&   r&   #   s    (,J%,r$   r&   c                  T    \ rS rSrSrS	S jr\S	S j5       rS	S jr\S
S j5       r	Sr
g)HacsDispatcherEntity.   z1Base HACS entity listening to dispatcher signals.c                   #    U R                  [        U R                  [        R                  U R
                  5      5        g7f)zRegister for status events.N)async_on_remover   hassr   
REPOSITORY_update_and_write_stater+   s    r"   async_added_to_hass(HacsDispatcherEntity.async_added_to_hass1   s4     $		!,,,,	
s   A Ac                    g)zUpdate the sensor.Nr8   rA   s    r"   _updateHacsDispatcherEntity._update;   s    r$   c                ,   #    U R                  5         g7f)zManual updates of the sensor.N)rE   rA   s    r"   async_update!HacsDispatcherEntity.async_update?   s     s   c                D    U R                  5         U R                  5         g)z"Update the entity and write state.N)rE   async_write_ha_state)r+   _s     r"   r@   ,HacsDispatcherEntity._update_and_write_stateC   s     	!!#r$   r8   Nr.   r/   )rL   r   r.   r/   )r0   r1   r2   r3   r4   rB   r   rE   rH   r@   r7   r8   r$   r"   r:   r:   .   s7    ;
 ! ! $ $r$   r:   c                  4    \ rS rSrSrSr\r\SS j5       r	Sr
g)HacsSystemEntityJ   zBase system entity.z	hacs:hacsc                ,    [        U R                  5      $ )%Return device information about HACS.)r#   r!   rA   s    r"   device_infoHacsSystemEntity.device_infoP   s     499%%r$   r8   Nr.   zdict[str, any])r0   r1   r2   r3   r4   
_attr_iconr   _attr_unique_idpropertyrT   r7   r8   r$   r"   rP   rP   J   s!    J$O& &r$   rP   c                  t    \ rS rSrSr      S
S jr\SS j5       r\SS j5       r\	SS j5       r
SS jrSrg	)HacsRepositoryEntityV   zBase repository entity.c                "   [         R                  " XR                  UR                  R                     5        [
        R                  XS9  X l        [        UR                  R                  5      U l	        UR                  R                  U l        g)r*   r    N)r
   r,   coordinatorsdatacategoryr&   r(   r   idrX   last_fetched_repo_last_fetched)r+   r!   r(   s      r"   r,   HacsRepositoryEntity.__init__Y   sf     	&&t->->z?W?W-XY0$":??#5#56",//">">r$   c                    U R                   R                  R                  [        U R                  R
                  R                  5      S9$ )z#Return True if entity is available.)repository_id)r!   repositoriesis_downloadedr   r(   r_   ra   rA   s    r"   	availableHacsRepositoryEntity.availablee   s7     yy%%33#dooFZFZF]F]B^3__r$   c                  ^  T R                   R                  R                  [        R                  :X  a  [        T R                  5      $ U 4S jn[        [        T R                   R                  R                  5      41T R                   R                  T R                   R                  R                  U" 5       ST R                   R                  R                   3[        R                  S.$ )rS   c                    > TR                   R                  R                  =n (       a  SR                  S U  5       5      $ TR                   R                  R                  R                  S5      S   $ )Nz, c              3  D   #    U  H  oR                  S S5      v   M     g7f)@r   N)replace).0authors     r"   	<genexpr>JHacsRepositoryEntity.device_info.<locals>._manufacturer.<locals>.<genexpr>r   s      OwVR!8!8ws    /r   )r(   r_   authorsjoin	full_namesplit)ru   r+   s    r"   _manufacturer7HacsRepositoryEntity.device_info.<locals>._manufacturerp   sY    //..666w6yy Ow OOO??''1177<Q??r$   z homeassistant://hacs/repository/)r   r   r   r   r   r   )r(   r_   rw   r   INTEGRATIONr#   r!   r   r   ra   display_namer`   r   r   )r+   ry   s   ` r"   rT    HacsRepositoryEntity.device_infoj   s     ??))^-G-GGtyy))	@ $S)=)=)@)@%ABCOO00__))22)O#CDOODXDXD[D[C\!])11
 	
r$   c                (   U R                   bP  U R                  R                  R                  b/  U R                   U R                  R                  R                  :  a  gU R                  R                  R                  U l         U R	                  5         g)z)Handle updated data from the coordinator.N)rc   r(   r_   rb   rK   rA   s    r"   _handle_coordinator_update/HacsRepositoryEntity._handle_coordinator_update~   sk     ##/$$11=''4??+?+?+L+LL"&//"6"6"C"C!!#r$   c                   #    g7f)zDUpdate the entity.

Only used by the generic entity update service.
Nr8   rA   s    r"   rH   !HacsRepositoryEntity.async_update   s     s   )rX   rc   r(   N)r!   r   r(   r   r.   r/   )r.   boolrV   rN   )r0   r1   r2   r3   r4   r,   rY   ri   rT   r   r   rH   r7   r8   r$   r"   r[   r[   V   si    !
?
? #
? 
	
? ` ` 
 
& 
$ 
$r$   r[   N)r!   r   r.   dict)"r4   
__future__r   typingr   r   homeassistant.corer   %homeassistant.helpers.device_registryr    homeassistant.helpers.dispatcherr   homeassistant.helpers.entityr	   (homeassistant.helpers.update_coordinatorr
   constr   r   r   coordinatorr   enumsr   r   baser   repositories.baser   r#   r&   r:   rP   r[   r8   r$   r"   <module>r      sq     " % ' A E / J 5 5 . 41
V $> $8	&+ 	&901FG 9r$   