
    g#                        S r SSKJr  SSK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  \R"                  " S5      r\(       a  SSKJr  SSKJr   " S S\5      rg)zClass for plugins in HACS.    )annotationsN)TYPE_CHECKING   )HacsCategoryHacsDispatchEvent)HacsException)
concurrent)
json_loads   )HacsRepositoryz\D+)ResourceStorageCollection)HacsBasec                     ^  \ rS rSrSrSU 4S jjr\S 5       rS rS r	S r
\" SS	S
9SS j5       rS rSS jrSS jrSS jrSS jrSS jrSS jrSS jrSrU =r$ )HacsPluginRepository   zPlugins in HACS.c                (  > [         TU ]  US9  X R                  l        UR	                  5       U R                  l        SU R                  l        [        R                  U R                  l	        U R                  U R                  R                  l        g)zInitialize.)hacsN)super__init__data	full_namelowerfull_name_lower	file_namer   PLUGINcategory	localpathcontentpathlocal)selfr   r   	__class__s      5/config/custom_components/hacs/repositories/plugin.pyr   HacsPluginRepository.__init__   sd    d#'		$-OO$5		!"		)00		"&..    c                    U R                   R                  R                   SU R                  R                  R                  S5      S    3$ )zReturn localpath.z/www/community//)r   coreconfig_pathr   r   splitr!   s    r#   r   HacsPluginRepository.localpath"   sA     ))..,,-_TYY=P=P=V=VWZ=[\^=_<`aar%   c                  #    U R                  5       I Sh  vN   U R                  5         U R                  R                  R                  c5  [        U R                   SU R                  R                  SS5       S35      eU R                  R                  R                  S:X  a  SU R                  l	        U R                  R                  (       ak  U R                  R                   HQ  nU R                  R                  R                  (       a  M*  U R                  R!                  SU R                  U5        MS     U R                  R"                  $  GN<7f)	z	Validate.N Repository structure for tags/  is not compliantreleaseTz%s %s)common_validateupdate_filenamesr   r   remoter   stringrefreplacesinglevalidateerrorsr   statusstartuploggererrorsuccess)r!   r@   s     r#   validate_repository(HacsPluginRepository.validate_repository'   s     ""$$$ 	<<##+;;-9$((:J:J7SU:V9WWhi  <<##y0"&DLL ==--yy''///KK%%gt{{EB . }}$$$% 	%s   EEC6EAEc                   #    U R                   R                  5       I Sh  vN   U R                  5       I Sh  vN   g N N7f)zRun post installation steps.N)r   $async_setup_frontend_endpoint_pluginupdate_dashboard_resourcesr,   s    r#   async_post_installation,HacsPluginRepository.async_post_installation>   s5     ii<<>>>--/// 	?/s   A>AA A Ac                @   #    U R                  5       I Sh  vN   g N7f)zRun post uninstall steps.N)remove_dashboard_resourcesr,   s    r#   async_post_uninstall)HacsPluginRepository.async_post_uninstallC   s     --///s   
      )concurrenttasksbackoff_timec                  #    U R                  X5      I Sh  vN (       d  U(       d  gU R                  5         U R                  R                  R                  cO  U R
                  R                  R                  U R                   SU R                  R                  SS5       S35        U R                  R                  R                  S:X  a  SU R                  l        U R                  R                  (       aX  U R                  R                  [         R"                  SS	U R                  R$                  U R                  R&                  S
.5        gg GN;7f)zUpdate.Nr/   r0   r1   r2   r3   Ti9  update)idaction
repositoryrepository_id)common_updater5   r   r   r6   r;   r<   appendr7   r8   r9   r:   r   	installedr   async_dispatchr   
REPOSITORYr   rS   )r!   ignore_issuesforces      r#   update_repository&HacsPluginRepository.update_repositoryG   s     ''===e 	<<##+MM  '';;-9$((:J:J7SU:V9WWhi <<##y0"&DLL 99II$$!,,&"&))"5"5%)YY\\	  >s   EED;Ec                   #     U R                   R                  SU R                  5      I Sh  vN n[        UR                  5      nU(       a  US   U R
                  l        gg N6! [         a     gf = f7f)zGet package content.zpackage.jsonNauthor)repository_objectget_contentsr8   r
   r   r   authorsBaseException)r!   packages     r#   get_package_content(HacsPluginRepository.get_package_contentd   sl     	 22??PTPXPXYYG 1G$+H$5		!  Z
  		s8   A6)A& A$4A& "A6$A& &
A30A62A33A6c                J   U R                   R                  nU R                   R                  =n(       a  U4nOrU R                  R                  R                  SS5       S3U R                  R                   S3U R                  R                   S3U R                  R                   S34nU(       d  U R                  R                  (       a  U R                  R                  S   nUR                  (       aq  U VVs/ s H*  nUR                    H  nXVR                  :X  d  M  UPM     M,     snn=n(       a0  US   U R                  l	        SU R                  R                  l        gU R                   Vs1 s H  oR                  iM     n	nU H  nXY;   a-  XPR                  l	        SU R                  R                  l          gU(       a  M>  S	U 3U	;   d  MI  UR                  S
5      S   U R                  l	        SU R                  R                  l          g   gs  snnf s  snf )zGet the filename to target.z	lovelace-r1   z.jsz.umd.jsz
-bundle.jsr   r3   Nzdist/r'   r(   dist)repository_manifestcontent_in_rootfilenamer   namer9   releasesobjectsassetsr   r   r   r6   tree	full_pathr+   )
r!   rl   specific_filenamevalid_filenamesr3   rm   asset
assetnamesx	all_pathss
             r#   r5   %HacsPluginRepository.update_filenameso   s   22BB $ 8 8 A AAA02O 99>>))+r:;3?99>>"#&99>>"'*99>>"*-	O }}$$--//2>> )8&(7H%,^^E#zz1 !%3 !(7& z  /9m		+3<))0*.))4)Q[[)	4'H$&.		#+-!!("?xj'9Y'F&.nnS&9"&=		#+1!!( (& 5s   ;#H"
H5H c                    U R                   =(       d)    U R                  R                  =(       d    U R                  nU R                  R                   [
        R                  SU5       3$ )z-Get the HACS tag used by dashboard resources.r1   )display_installed_versionr   selected_tagdisplay_available_versionrS   HACSTAG_REPLACERsub)r!   versions     r#   #generate_dashboard_resource_hacstag8HacsPluginRepository.generate_dashboard_resource_hacstag   sZ     ** .yy%%.-- 	
 )),, 0 4 4R ABCCr%   c                X    SU R                   R                  R                  S5      S    3$ )%Get the dashboard resource namespace.z/hacsfiles/r'   r   )r   r   r+   r,   s    r#   %generate_dashboard_resource_namespace:HacsPluginRepository.generate_dashboard_resource_namespace   s*    TYY0066s;A>?@@r%   c                    U R                   R                  nSU;   a;  U R                  R                  SU R                  U5        UR                  S5      S   nU R                  5        SU SU R                  5        3$ )r   r'   z'%s have defined an invalid file name %sr(   z	?hacstag=)r   r   r?   warningr7   r+   r   r   )r!   rm   s     r#   generate_dashboard_resource_url4HacsPluginRepository.generate_dashboard_resource_url   sx    99&&(?KK I4;;X`a~~c*2.H99;<AhZ@@BCE	
r%   c                0   U R                   R                  R                  =n(       d'  U R                  R	                  SU R
                  5        gUR                  S5      =nc'  U R                  R                  SU R
                  5        gU R                   R                  R                  S:  a  UR                  nOUR                  S5      nUc'  U R                  R                  SU R
                  5        g[        US5      (       a  UR                  c'  U R                  R                  S	U R
                  5        gUR                  R                  S
:w  d  UR                  R                  S:w  a'  U R                  R                  SU R
                  5        gU$ )zGet the resource handler.z%s Can not access the hass dataNlovelacez/%s Can not access the lovelace integration dataz	2025.1.99	resourcesz)%s Can not access the dashboard resourcesstorez/%s YAML mode detected, can not update resourceslovelace_resourcesr   z&%s Can not use the dashboard resources)r   hassr   r?   r@   r7   getr   r)   
ha_versionr   hasattrr   infokeyr   )r!   	hass_datalovelace_datar   s       r#   _get_resource_handler*HacsPluginRepository._get_resource_handler   s=    "YY^^000	0KK?M&]]:66M?KK QSWS^S^_99>>$${2 &//I%))+6IKK KT[[Yy'**ioo.EKKNPTP[P[\??"66)//:Q:QUV:VKK H$++Vr%   c                `  #    U R                  5       =n(       d  gUR                  (       d  UR                  5       I Sh  vN   U R                  5       nU R	                  5       nUR                  5        Hl  nUS   =nR                  U5      (       d  M   XS:w  aG  U R                  R                  SU R                  UU5        UR                  US   SU05      I Sh  vN     g   U R                  R                  SU R                  U5        UR                  SUS.5      I Sh  vN   g N NN N	7f)zUpdate dashboard resources.Nurlz5%s Updating existing dashboard resource from %s to %srS   z%s Adding dashboard resource %smodule)res_typer   )r   loaded
async_loadr   r   async_items
startswithr?   r   r7   async_update_itemasync_create_item)r!   r   	namespacer   entry	entry_urls         r#   rF   /HacsPluginRepository.update_dashboard_resources   s    !7799	9&&(((>>@	224**,E"5\)	55i@@#KK$$O!	 $55eDkE3<PPP - 	:DKKM))x*LMMM' ) Q
 	Ns=   =D.D( AD.AD.D*AD."D,#D.*D.,D.c                  #    U R                  5       =n(       d  gUR                  (       d  UR                  5       I Sh  vN   U R                  5       nUR	                  5        Hd  nUS   R                  U5      (       d  M  U R                  R                  SU R                  US   5        UR                  US   5      I Sh  vN     g   g N N7f)zRemove dashboard resources.Nr   z!%s Removing dashboard resource %srS   )
r   r   r   r   r   r   r?   r   r7   async_delete_item)r!   r   r   r   s       r#   rJ   /HacsPluginRepository.remove_dashboard_resources   s     !7799	9&&(((>>@	**,EU|&&y11  !DdkkSXY^S_`11%+>>>	 -	 ) ?s)   =CC >CACC
CC )r   r   r   str)FF)returnNone)r   r   )r   z ResourceStorageCollection | None)__name__
__module____qualname____firstlineno____doc__r   propertyr   rB   rG   rK   r	   r^   rg   r5   r   r   r   r   rF   rJ   __static_attributes____classcell__)r"   s   @r#   r   r      s}    1 b b%.0
0 3 48	$LDA	
@N6 r%   r   )r   
__future__r   retypingr   enumsr   r   
exceptionsr   utils.decoratorr	   
utils.jsonr
   baser   compiler   +homeassistant.components.lovelace.resourcesr   r   r   r   r%   r#   <module>r      sF      " 	   3 & ( #  ::f% U`> `r%   