
    g                       S r SSKJr  SSKJr  SSKJrJr  SSKrSSKrSSK	r	SSK
r
SSKJrJr  SSKrSSKJrJrJr  SSKJr  SSKrSS	KJrJr  S
SKJr  S
SKJrJr  S
SK J!r!J"r"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.J/r/J0r0  S
SK1J2r2  S
SK3J4r4  S
SK5J6r6  S
SK7J8r8  S
SK9J:r:  S
SK;J<r<  S
SK=J>r>  S
SK?J@r@JArA  S
SKBJCrC  S
SKDJErEJFrF  S
SKGJHrH  \(       a  S
SKIJJrJ  SrKS S!S"S#S$S%S&S'S(S)S*S+S,S-/ 44rLS./ 4S/4rM " S0 S15      rN\R                  " S2S39 " S4 S55      5       rP\R                  " S2S39 " S6 S75      5       rQ " S8 S95      rR " S: S;5      rS " S< S=5      rT " S> S?5      rUg)@zRepository.    )annotations)sleep)UTCdatetimeN)TYPE_CHECKINGAny)AIOGitHubAPIException AIOGitHubAPINotModifiedExceptionGitHubReleaseModel)AIOGitHubAPIRepository)device_registryissue_registry   )DOMAIN)HacsDispatchEventRepositoryFile)HacsExceptionHacsNotModifiedExceptionHacsRepositoryArchivedExceptionHacsRepositoryExistException)DownloadableContent)Backup)decode_content)
concurrent)async_existsasync_removeasync_remove_directory)!filter_content_return_one_of_type)GET_REPOSITORY_RELEASES)
json_loads)LOGGER)is_safe)QueueManager)async_remove_store)github_archivegithub_release_asset)Validate)'version_left_higher_or_equal_then_rightversion_left_higher_then_right)DOMAIN_OVERRIDES)HacsBase),zadd-onaddonappzappdaemon-apps	appdaemonzcustom-cardzcustom-cardszcustom-componentzcustom-componentscustomcomponentshacktoberfestzhacs-defaultzhacs-integrationzhacs-repositoryhacshasshassiozhome-assistant-customzhome-assistant-frontendzhome-assistant-hacszhome-assistant-sensorzhome-assistantzhome-automationzhomeassistant-componentszhomeassistant-integrationzhomeassistant-sensorhomeassistanthomeautomationintegrationzlovelace-uilovelacezmedia-playermediaplayerpluginpython_scriptzpython-scriptpythonsensorz
smart-home	smarthometemplate	templatesthemethemes)description )	downloadsr   )domainN)etag_releasesN)etag_repositoryN)	full_namerC   )last_commitN)last_updatedr   )last_versionN)manifest_nameN)open_issuesr   )
prereleaseN)stargazers_countr   topicscountry)nameNc                      \ rS rSrSrS rSrg)FileInformation   zFileInformation.c                (    Xl         X l        X0l        g N)download_urlpathrR   )selfurlrY   rR   s       3/config/custom_components/hacs/repositories/base.py__init__FileInformation.__init__   s    		    )rX   rR   rY   N)__name__
__module____qualname____firstlineno____doc__r]   __static_attributes__ r_   r\   rT   rT      s
    r_   rT   T)auto_attribsc                  $   \ rS rSr% SrSrS\S'   / rS\S'   SrS	\S
'   Sr	S\S'   Sr
S	\S'   SrS	\S'   SrS	\S'   SrS\S'   SrS	\S'   SrS	\S'   SrS	\S'   SrS\S'   SrS	\S'   SrS\S'   SrS\S'   SrS\S'   SrS	\S'   SrS	\S'   SrS\S'   SrS	\S'   SrS \S!'   SrS	\S"'   SrS	\S#'   SrS	\S$'   SrS\S%'   SrS\S&'   Sr S	\S''   / r!S\S('   Sr"S\S)'   Sr#S	\S*'   Sr$S\S+'   Sr%S\S,'   / r&S\S-'   \'S. 5       r(S/ r)\*S3S4S0 jj5       r+S3S5S1 jjr,S2r-g)6RepositoryData   zRepositoryData class.Fboolarchived	list[str]authorsrC   strcategoryconfig_flowNdefault_branchrB   rE   r   intrD   rG   rF   	file_namefirst_installrH   hideT
has_issuesidinstalled_commitinstalled_version	installedrI   r   last_fetchedrJ   rK   rL   newrM   rN   published_tagsreleasesselected_tag	show_betarO   rP   c                v    U R                   S:X  a  U R                  $ U R                  R                  S5      S   $ )zReturn the name.r6   /)rp   rE   rH   splitrZ   s    r\   rR   RepositoryData.name   s4     ==M);;~~##C(,,r_   c                .    [         R                  " U S S9$ )Export to json.c                     U R                   S:g  $ )Nr|   rR   )attrvalues     r\   <lambda>(RepositoryData.to_json.<locals>.<lambda>   s    DII<Wr_   )filterr   asdictr   s    r\   to_jsonRepositoryData.to_json   s    {{4(WXXr_   c                <    [        5       nUR                  X5        U$ )Set attributes from dicts.)ri   update_data)sourceactiondatas      r\   create_from_dictRepositoryData.create_from_dict   s     (r_   c           
        UR                  5        H  u  p4X0R                  ;  a  M  US:X  a<  [        U[        5      (       a'  [	        X[
        R                  " U[        5      5        MX  US:X  a  [	        X[        U5      5        Mu  US:X  a2  [        U[        5      (       a  [	        XU/5        M  [	        XU5        M  US:X  a1  U(       d*  [	        XU Vs/ s H  oU[        ;  d  M  UPM     sn5        M  [	        XU5        M     gs  snf )zUpdate data of the repository.r|   rx   rQ   rP   N)
items__dict__
isinstancefloatsetattrr   fromtimestampr   ro   TOPIC_FILTER)rZ   r   r   keyr   topics         r\   r   RepositoryData.update_data   s    **,JC--'n$E5)A)A8#9#9%#EF3u:.	!eS))Dw/Du-u#Zue\@YEu#Z[ 5)# ' $[s   D&Drf   F)r   dictr   rk   returnri   )r   r   r   rk   r   None).r`   ra   rb   rc   rd   rl   __annotations__rn   rp   rq   rr   rB   rE   rD   rG   rF   rt   ru   rH   rv   rw   rx   ry   rz   r{   rI   r|   rJ   rK   rL   r}   rM   rN   r~   r   r   r   rO   rP   propertyrR   r   staticmethodr   r   re   rf   r_   r\   ri   ri      s   HdGYHcKNCKFCIsOSM3IsM4IsD$JBK c !s!ItK!L(!L#L#M3CKJ "NI"HdL#ItcFI- -Y  * *r_   ri   c                      \ rS rSr% SrSrS\S'   / rS\S'   SrS	\S
'   Sr	S	\S'   Sr
S\S'   SrS	\S'   0 rS\S'   SrS	\S'   SrS	\S'   SrS\S'   SrS\S'   S r\SS j5       rSS jrSrg)HacsManifest   zHacsManifest class.Frk   content_in_rootrm   rQ   Nro   filenamer1   hide_default_branchr4   r   manifestrR   persistent_directoryrender_readmezip_releasec                .    [         R                  " U 5      $ )r   r   r   s    r\   to_dictHacsManifest.to_dict   s    {{4  r_   c                   U c  [        S5      e[        5       nU R                  5        VVs0 s H.  u  p#X!R                  ;   d  M  X1R	                  U5      :w  d  M,  X#_M0     snnUl        UR
                  R                  5        HL  u  pEUS:X  a$  [        U[        5      (       a  [        XU/5        M/  XAR                  ;   d  M@  [        XU5        MN     U$ s  snnf )r   zMissing manifest datarQ   )	r   r   r   r   __getattribute__r   r   ro   r   )r   manifest_datakvr   r   s         r\   	from_dictHacsManifest.from_dict   s      788$ !("
(*** /04R4RST4U/U AD("
 (00668JCiJuc$:$:UG4...E2	 9
 "
s   CCCc                    UR                  5        HZ  u  p#X R                  ;  a  M  US:X  a2  [        U[        5      (       a  [	        XU/5        M@  [	        XU5        MN  [	        XU5        M\     g)zUpdate the manifest data.rQ   N)r   r   r   ro   r   )rZ   r   r   r   s       r\   r   HacsManifest.update_data  sV    **,JC--'ieS))Dw/Du-5) 'r_   rf   )r   r   )r   r   r   r   )r`   ra   rb   rc   rd   r   r   rQ   r   r1   r   r4   r   rR   r   r   r   r   r   r   r   re   rf   r_   r\   r   r      s    !OT!GYHcD# %%M3HdD# $#$M4K!  &*r_   r   c                  <    \ rS rSr% SrSrSr/ r/ rS\	S'   Sr
SrSrg)RepositoryReleasesi  zRepositoyReleases.Nlist[GitHubReleaseModel]objectsFrf   )r`   ra   rb   rc   rd   last_releaselast_release_objectr~   r   r   r   rD   re   rf   r_   r\   r   r     s*    LN(*G%*HIr_   r   c                  6    \ rS rSr% SrSrS\S'   SrS\S'   Srg)RepositoryPathi  zRepositoryPath.N
str | Nonelocalremoterf   )	r`   ra   rb   rc   rd   r   r   r   re   rf   r_   r\   r   r     s    E:FJr_   r   c                  4    \ rS rSr% SrSrS\S'   / r/ rSr	Sr
g)RepositoryContenti"  zRepositoryContent.NzRepositoryPath | NonerY   Frf   )r`   ra   rb   rc   rd   rY   r   filesr   singlere   rf   r_   r\   r   r   "  s    "&D
&EGFr_   r   c                  b   \ rS rSrSrSCS jrSDS jr\SDS j5       r\SDS j5       r	\SES j5       r
\SDS j5       r\SDS	 j5       r\SDS
 j5       r\SDS j5       r\SES j5       r\SES j5       r\SFS j5       r\SES j5       rSGS jr\" SSS9SHSGS jj5       rSISJS jjrSGS jr\" SSS9SKSES jj5       rSLS jr      SMS jrSNSOS jjrS rSNSPS jjrSS.SQS jjrSGS  jrSGS! jr SGS" jr!SGS# jr"\" SS$9SNSGS% jj5       r#SGS& jr$SGS' jr%SGS( jr&SS.SRS) jjr'SGS* jr(S+ r)S, r*SGS- jr+SS.SRS. jjr, SN   SSS/ jjr-SGS0 jr.STS1 jr/SUSVS2 jjr0    SW     SXS3 jjr1SYS4 jr2SNSZS5 jjr3\" SS$9S[S6 j5       r4SGS7 jr5SDS8 jr6SSS9.     S\S: jjr7S]S; jr8S^S< jr9SS=.S_S> jjr:S?S@.S`SA jjr;SBr<g)aHacsRepositoryi+  zHacsRepository.c                   Xl         SU l        [        5       U l        [	        5       U l        [        5       U R
                  l        SU l        SU l	        SU l
        SU l        0 U l        [        R                  0 5      U l        [!        5       U l        [%        5       U l        SU l        / U l        / U l        SU l        [0        U l        g)zSet up HacsRepository.rC   NF)r1   additional_infori   r   r   contentr   rY   repository_objectupdated_infostateforce_branchintegration_manifestr   r   repository_manifestr'   validater   r   pending_restarttree	treefilesrefr!   logger)rZ   r1   s     r\   r]   HacsRepository.__init__.  s    	!"$	(**,@D!
!$&!#/#9#9"#=  
*,$	r_   c                    U R                   $ )1Return a string representation of the repository.)stringr   s    r\   __str__HacsRepository.__str__C  s    {{r_   c                    SU R                   R                  R                  5        SU R                   R                   S3$ )r   < >)r   rp   titlerH   r   s    r\   r   HacsRepository.stringG  s8     499%%++-.a		0C0C/DAFFr_   c                   U R                   R                  b  U R                   R                  $ U R                  R                  S:X  aL  U R                  R                  b  U R                  R                  $ SU R
                  ;   a  U R
                  S   $ U R                  R                  R                  S5      S   R                  SS5      R                  SS5      R                  5       $ )zReturn display name.r6   rR   r   r   -r   _)
r   rR   r   rp   rL   r   rH   r   replacer   r   s    r\   display_nameHacsRepository.display_nameL  s     ##((4++00099.yy&&2yy...2220088yy""((-b199#sCKKCQTU[[]]r_   c                >   U R                   R                  (       a  gU R                  R                  R                  R                  5       nUS:X  a  gU R                  R                  =(       d    /  Vs/ s H  o"R                  5       PM     nnU(       d  gX;  $ s  snf )z!Return True if hidden by country.Fall)r   r{   r1   configurationrQ   lowerr   )rZ   r   entryr   s       r\    ignored_by_country_configuration/HacsRepository.ignored_by_country_configurationZ  s     99		//77==?E!/3/G/G/O/O/USU/UV/UeKKM/UV,, Ws   3Bc                    U R                   R                  (       a  SnU$ U R                  (       a  SnU$ U R                  (       a  SnU$ U R                   R                  (       a  SnU$ SnU$ )zReturn display_status.r}   zpending-restartzpending-upgrader{   default)r   r}   r   pending_updater{   )rZ   statuss     r\   display_statusHacsRepository.display_statush  sp     99==F  !!&F    &F
 	 YY   F  Fr_   c                    U R                   R                  b  U R                   R                  nO0U R                   R                  b  U R                   R                  nOSn[        U5      $ zReturn display_authorsrC   )r   rz   ry   ro   )rZ   r{   s     r\   display_installed_version(HacsRepository.display_installed_versionw  sQ     99&&2		33Iyy))5 II66		9~r_   c                f   U R                   R                  (       a.  U R                   R                  b  U R                   R                  nO^U R                   R                  b  U R                   R                  nO0U R                   R                  b  U R                   R                  nOSn[        U5      $ r  )r   r   rN   rK   rI   ro   )rZ   	availables     r\   display_available_version(HacsRepository.display_available_version  s|     99499#7#7#C		,,IYY##/		..Iyy$$0 II11		9~r_   c                H    U R                   R                  (       a  SnU$ SnU$ )z-Does the repositoriy use releases or commits?versioncommit)r   r   )rZ   version_or_commits     r\   display_version_or_commit(HacsRepository.display_version_or_commit  s-     99 ) !  !)  r_   c                   U R                   R                  (       a  U R                   R                  b^  U R                   R                  U R                   R                  :X  a0  U R                   R                  U R                   R
                  :w  a  ggU R                  S:X  a&  [        U R                  U R                  5      =n b  U$ U R                  U R                  :w  a  gg)zReturn True if pending update.TFr  )
r   r{   r   rr   ry   rI   r  r)   r
  r  )rZ   results     r\   r   HacsRepository.pending_update  s     99yy%%199))TYY-E-EEyy11TYY5J5JJ# --:<6666 F  "M--1O1OOr_   c                   U R                   R                  bi  U R                  R                  (       aN  [	        U R
                  R                  R                  R                  U R                   R                  5      (       d  gg)zReturn True if we can download.FT)	r   r4   r   r   r(   r1   core
ha_versionr   r   s    r\   can_downloadHacsRepository.can_download  s^     ##11=yy!!>IINN--44,,::  !r_   c                    g)zReturn localpath.Nrf   r   s    r\   	localpathHacsRepository.localpath  s     r_   c                   U R                   R                  (       aO  U R                   R                  R                  S5      (       a%  U R                  U R
                  R                  :w  a  gU R                  U R
                  R                  :X  a  gU R
                  R                  S;  a  gU R
                  R                  (       d  gg)z@Return a boolean indicating whether to download releases or not.z.zipTF)r9   r@   )	r   r   r   endswithr   r   rr   rp   r   r   s    r\   should_try_releases"HacsRepository.should_try_releases  s     ##//''0099&AA88tyy77788tyy///99%88yy!!r_   c                   #    g7f)z	Validate.Nrf   r   s    r\   validate_repository"HacsRepository.validate_repository          
      )concurrenttasksbackoff_timec                   #    g7f)zUpdate the repositoryNrf   )rZ   ignore_issuesforces      r\   update_repository HacsRepository.update_repository  r$  r%  c                f  #    U R                   R                  R                  5         U R                  R	                  SU R
                  5        U R                  US9I Sh  vN   [        R                  U R                   Vs/ s H  o"R                  PM     sn;   a  U R                  5       I Sh  vN =n(       ak  [        R                  U5      U l        U R                  R!                  U R                  R#                  5       U R$                  R&                  R(                  S9  ggg Ns  snf  N7f)z*Common validation steps of the repository.z%s Checking repository.)r+  Nr   )r   errorsclearr   debugr   common_update_datar   	HACS_JSONr   r   async_get_hacs_jsonr   r   r   r   r   r   r1   systemr   )rZ   r+  xr   s       r\   common_validateHacsRepository.common_validate  s     ""$ 	3T[[A%%M%BBB ##DII'FIq

I'FF!%!9!9!;;;x;+7+A+A(+K(		%%,,44699++22 &  < G 	C (G;s1   AD1D( !D1D*D1/D/0A9D1*D1c                  #    U R                   c   U R                  U R                  R                  (       a  SOU R                  R                  S9I Sh  vN u  U l         nU R                  R                  U R                   R                  U R                  R                  R                  S9  XR                  l        U R                   (       a_  U R                   R                  R                  SS5      U R                  l        [         R"                  " [$        5      U R                  l        gg N! [         a)    U R                  R                  SU R                  5         gf = f7f)z,Common registration steps of the repository.Netagr0  +%s Did not update, content was not modified	pushed_atr   )r   "async_get_legacy_repository_objectr   r{   rG   r   
attributesr1   r7  r   r   r   r3  r   getrJ   r   nowr   r|   )rZ   r=  s     r\   common_registration"HacsRepository.common_registration  s     !!)595\5\!%!4!4$)):S:S 6] 6 0,& 		%%**5599++22 &  -1		)
 !!%)%;%;%F%F%J%J;XY%ZDII"%-\\#%6DII" "0 , !!"OQUQ\Q\]s=   E&AD0 D.A(D0 =A1E&.D0 00E# E&"E##E&c                  #    U R                   R                  SU R                  5        U R                  R                  n U R                  UUUS9I Sh  vN   U R                  R                  (       dG  X@R                  R                  :X  a.  U(       d'  U R                   R                  SU R                  5        gU R                  (       a|  U R                  R                  R                  SS5      U R                  l        U R                  R#                  5       I Sh  vN   U R                  R$                  U R                  l        [&        R(                  U R*                   Vs/ s H  oUR,                  PM     sn;   a  U R/                  5       I Sh  vN =n(       aj  [0        R3                  U5      U l        U R                  R7                  U R4                  R9                  5       U R                  R:                  R<                  S	9  U R?                  5       I Sh  vN U l         [B        RD                  " [F        5      U R                  l$        g
 GN! [         ab    U R                  R                  R                  U R                  R                     U R                  l
        U R                  XS9I Sh  vN     GNe[         a    U(       d	  U(       d   g GNf = f GNs  snf  GNS N7f)z2Common information update steps of the repository.z!%s Getting repository information)r+  r,  skip_releasesN)r+  r,  Fr>  r?  r   r0  T)%r   r3  r   r   rG   r4  r   r1   commonrenamed_repositoriesrH   r   r{   r   rA  rB  rJ   set_last_commitrI   r   r5  r   r   r6  r   r   r   r   r   r7  r   async_get_info_file_contentsr   r   rC  r   r|   )rZ   r+  r,  rG  current_etagr8  r   s          r\   common_updateHacsRepository.common_update  s6     	=t{{K yy00	))++ *    yy""		8Q8Q(Q[`KKKT[[Y !!%)%;%;%F%F%J%J;XY%ZDII" ((88:::$($:$:$F$FDII! ##DII'FIq

I'FF!%!9!9!;;;x;+7+A+A(+K(		%%,,44699++22 &  &*%F%F%HH "*c!2		Q
 , 	T"&))"2"2"G"G		H[H["\DII)))SSS 	 	 ; (G;  Is   =K+ I II CK+KAK+%K!:K+K&BK+K)3K+I A"K5J86K;K+>KK+KK+!K+)K+c                z  #     U R                  [        U R                  R                  [	        U R
                  R                  U R                  U R                  R                  S9S9U5      I Sh  vN   g N! [         a6    UR                  R                  SU R                  R                   S35         gf = f7f)-Download ZIP archive from repository release.)
repositoryr  r   )rR   r[   NzDownload of z was not completed)async_download_zip_filer   r   r   r&   r   rH   r   BaseExceptionr1  append)rZ   r   s     r\   download_zip_files!HacsRepository.download_zip_files/  s     	..#11::,#'99#6#6 $!%!9!9!B!B 
 
 
  	OO"",,5576HJ	s;   B;A,A8 0A61A8 5B;6A8 8=B85B;7B88B;c                  ^ ^^#     T R                   R                  US   5      I Sh  vN nUc"  UR                  R                  SUS    35        gT R                   R                  R                  [        R                  5      I Sh  vN mT ST R                  R                   3mT R                   R                  TU5      I Sh  vN nU U4S jnT R                   R                  R                  U5      I Sh  vN   U U4S jnU(       aX  T R                  R                  ST R                  US   5        T R                   R                  R                  U5      I Sh  vN   gUR                  R                  S	US    S
35        g GNa GN N N N2! [         a    UR                  R                  S5         gf = f7f)rP  r[   NzFailed to download r   c                    > [         R                  " TS5       n U R                  TR                  R                  R
                  5        S S S 5        g ! , (       d  f       g = f)Nr)zipfileZipFile
extractallr   rY   r   )zip_filerZ   	temp_files    r\   _extract_zip_fileAHacsRepository.async_download_zip_file.<locals>._extract_zip_fileW  s=    __Y4''(9(9(?(?@ 544s   0A
A c                    > [         R                  R                  T5      (       a>  T R                  R	                  ST R
                  T5        [        R                  " T5        ggzCleanup temp_dir.z%s Cleaning up %sNosrY   existsr   r3  r   shutilrmtreerZ   temp_dirs   r\   cleanup_temp_dir@HacsRepository.async_download_zip_file.<locals>.cleanup_temp_dir]  sB    77>>(++KK%%&94;;QMM(+ ,r_   %s Download of %s completedrR   [z] was not downloadedzDownload was not completed)r1   async_download_filer1  rT  r2   async_add_executor_jobtempfilemkdtempr   r   async_save_filer   infor   rS  )	rZ   r   r   filecontentr  r_  rj  ri  r^  s	   `      @@r\   rR  &HacsRepository.async_download_zip_fileE  sy     	A $		 = =gen MMK"&&)<WU^<L'MN!YY^^BB8CSCSTTH#*Ad&>&>&G&G%HII9944YLLFA ))..778IJJJ,   !>WU[_]iinn;;<LMMMOO""Qwv&77K#LM9 N U M K N
  	AOO""#?@	As   G !F F	(F G 6F F	>F F3F ;F<A$F  F!F %G &"F G 	F F F F F %F=:G <F==G Nc                  #    SnU R                   R                  (       d|  U R                  R                  (       da  U R                  R
                  R                  b@  U R                  R                  SU R                  5         U R                  5       I Sh  vN   gU R                   R                  (       a;  U R                  R                  SU R                  U R                   R                  5        U R                  R
                  R                  S:X  a  Ub  U R                  U5      I Sh  vN nU(       d  U R!                  5       nU(       d  [        S5      e[#        U R$                  R&                  S9nU H  nU R                   R(                  (       aA  U R                   R                  (       a&  UR*                  U R                   R                  :w  a  M_  UR-                  U R/                  U5      5        M     UR1                  5       I Sh  vN   g GN! [         a&  nU R                  R                  U5         SnAGNSnAff = f GN N>7f)z$Download the content of a directory.Nz!%s Downloading repository archive%s %sreleasezNo content to downloadr2   )r   r   r   rt   r   rY   r   r   rs  r   download_repository_zipr   	exceptionr   r3  release_contentsgather_files_to_downloadr#   r1   r2   r   rR   adddowload_repository_contentexecute)rZ   r  contentsr{  download_queuer   s         r\   download_contentHacsRepository.download_contentm  s    15((44II''!!((4KK@$++N122444 ##,,KKgt{{D4L4L4U4UV<<##y0W5H!227;;H446H 899%499>>:G''77D<T<T<]<]<<4#;#;#D#DDt>>wGH	   $$&&&3 5  1%%i001 <  	'sb   B IH HH BI-I.C"IIIH 
I	#I>II		IIc                (  ^ ^^#    T R                    R                  SS5      nU(       d  [        S5      eT R                  R	                  [        T R                  R                  USS9SSS9I Sh  vN nUc?  T R                  R	                  [        T R                  R                  US	S9SS
9I Sh  vN nUc  [        ST  S35      eT R                  R                  R                  [        R                  5      I Sh  vN mT ST R                  R                   3mT R                  R                  TU5      I Sh  vN nU(       d  [        S5      eU U4S jnT R                  R                  R                  U5      I Sh  vN   U U4S jnT R                  R                  R                  U5      I Sh  vN   T R                  R!                  ST R"                  T R$                  R&                  R(                  5        g GN GNT GN
 N N NW7f)z+Download the zip archive of the repository.tags/rC   zMissing required elements.tags)rQ  r  variantT)keep_urlnologNheads)r  rm  z] Failed to download zipballr   zCould not save ZIP filec                   > [         R                  " TS5       n / nU R                   H  nSR                  UR                  R                  S5      SS  5      nUR                  TR                  R                  R                  5      (       d  Mf  UTR                  R                  R                  :w  d  M  UR                  TR                  R                  R                  S5      Ul        UR                  S:X  a  M  UR                  U5        M     [        U5      S:X  a  [        S5      eU R                  TR                  R                  R                  U5        S S S 5        g ! , (       d  f       g = f)NrY  r      rC   r   zNo content to extract)rZ  r[  filelistjoinr   r   
startswithr   rY   r   r   rT  lenr   r\  r   )r]  extractablerY   r   rZ   r^  s       r\   r_  AHacsRepository.download_repository_zip.<locals>._extract_zip_file  s   C0H $--D"xx(;(;C(@(DEH ++DLL,=,=,D,DEE$(9(9(@(@@(0(8(89J9J9Q9QSU(V==C/$#**40 . {#q('(?@@##DLL$5$5$;$;[I! 100s   A1E#"E#4B&E##
E1c                    > [         R                  R                  T5      (       a>  T R                  R	                  ST R
                  T5        [        R                  " T5        ggrb  rc  rh  s   r\   rj  @HacsRepository.download_repository_zip.<locals>.cleanup_temp_dir  sB    ww~~h''!!"5t{{HMh' (r_   z%s Content was extracted to %s)r   r   r   r1   rn  r%   r   rH   r2   ro  rp  rq  r   r   rr  r   rs  r   r   rY   r   )rZ   r   rt  r  r_  rj  ri  r^  s   `     @@r\   rz  &HacsRepository.download_repository_zip  s    
##GR0 <== II99dii&9&93PVW : 
 
  $		 = =$))*=*=sT[\ !> ! K !D6)E FGG>>x?O?OPPj$":":"C"C!DE	yy00KHH 9::	J& iinn334EFFF	( iinn334DEEE94;;HYHYH_H_`a
 QH. 	G 	Fsp   A+H0H1AH2H3AH?H	 >H>H?AHH3H8H9AHH	HHHHc                  #     U R                   R                  " SU R                   R                  R                  R                  R
                  SU R                  R                  [        R                  S.SSU=(       d    U R                  5       00D6I Sh  vN nU(       a(  [        [        UR                  R                  5      5      $ g N4! [         a     gf = f7f)z&Get the content of the hacs.json file.F)methodraise_exceptionrQ  rY   paramsr   Nrf   )r1   async_github_api_method	githubapireposr  rB  r   rH   r   r5  version_to_downloadr    r   r   rS  )rZ   r   responses      r\   r6  "HacsRepository.async_get_hacs_json  s     	!YY>> yy**0099== %99..#--	
 eS%FD,D,D,FGH H !.1F1F"GHH   		s;   CBC C2C 
CC 
CCCCr  c                  #    SS jnU" 5        Vs/ s H  oDU R                   ;   d  M  UPM     nnU(       d  gU R                  US   US9I Sh  vN =(       d    S$ s  snf  N7f)z$Get the content of the info.md file.c                     Sn U R                  5        S3U  S3U  S3U R                  5        S3U R                  5       U 4$ )Nreadmez.mdz.MD)upperr   s    r\   _info_file_variantsHHacsRepository.async_get_info_file_contents.<locals>._info_file_variants  sO     D::<.$&&::<.$

 r_   rC   r   r   r  N)r   ztuple[str, ...])r   get_documentation)rZ   r  kwargsr  r   
info_filess         r\   rK  +HacsRepository.async_get_info_file_contents  sg     		 0C/Dc/D8TXTbTbHbh/D
c++Z]G+TTZXZZ d
 Us    A#AA A#A!A#c                &   U R                   R                  R                  [        U R                  R
                  5      S9(       aL  U R                  R                  SU R                  5        U R                   R                  R                  U 5        gg)zRun remove tasks.)repository_idz%s Starting removalN)
r1   repositoriesis_registeredro   r   rx   r   rs  r   
unregisterr   s    r\   removeHacsRepository.remove  sa    99!!//c$)),,>O/PKK2DKK@II""--d3 Qr_   c                >  #    U R                   R                  SU R                  5        U R                  5       I Sh  vN (       d  [	        S5      eSU R
                  l        U R                  5       I Sh  vN   [        U R                  R                  SU R
                  R                   S35      I Sh  vN   SU R
                  l        SU R
                  l        U R                  R                  [        R                   SSU R
                  R"                  U R
                  R                  S	.5        U R%                  5       I Sh  vN   [&        R(                  " U R                  R                  [*        S
U R
                  R                   35        g GNW GN! N NT7f)zRun uninstall tasks.z%s RemovingNzCould not uninstallFzhacs/z.hacs9  	uninstallrx   r   rQ  r  removed_)r   rs  r   remove_local_directoryr   r   r{   _async_post_uninstallr$   r1   r2   rx   rz   ry   async_dispatchr   
REPOSITORYrH   async_remove_entity_deviceirasync_delete_issuer   r   s    r\   r  HacsRepository.uninstall  s'    400222 566#		((*** 5e1LMMM&*		#%)		"		  ((%"ii11!%		
 --///
diinnf6OP' 3 	+M 	0sG   :FF8F5F6?F5F6BFFAFFFFc                  #     U R                   R                  S:X  a;  U R                  R                  R                   SU R                   R
                   3nGOU R                   R                  S:X  a;  U R                  R                  R                   SU R                   R
                   3nGOU R                   R                  S:X  a  U R                  R                  R                   SU R                  R                  R                   SU R                   R                   S3n[        U R                  R                  USS9I Sh  vN   U R                  R                  R                  nGOU R                   R                  S	:X  a  U R                   R                  (       d  [        R                   " U R                   R"                  5      =n(       a6  X0R                   l        U R$                  U R                  R                  l        O'U R&                  R)                  S
U R*                  5        gU R                  R                  R                  nO U R                  R                  R                  n[-        U R                  R                  U5      I Sh  vN (       GaE  [/        U R                  U5      (       d(  U R&                  R)                  SU R*                  U5        gU R&                  R1                  SU R*                  U5        U R                   R                  S;   a)  [        U R                  R                  U5      I Sh  vN   O([3        U R                  R                  U5      I Sh  vN   [-        U R                  R                  U5      I Sh  vN (       aB  [5        S5      I Sh  vN   [-        U R                  R                  U5      I Sh  vN (       a  MB  gU R&                  R1                  SU R*                  U5         g GN GN| N N N Ni NC! [6         a2  nU R&                  R1                  SU R*                  WU5         SnAgSnAff = f7f)zCheck the local directory.r:   r   r>   r@   z.yamlT)
missing_okNr6   z%s Missing domainFz"%s Path %s is blocked from removalz%s Removing %s)r:   r>   r  z0%s Presumed local content path %s does not existz%s Removing %s failed with %s)r   rp   r   rY   r   rt   r1   r  config_pathr   
theme_pathrR   r   r2   rE   r*   rB  rH   r  r   errorr   r   r"   r3  r   r   rS  )rZ   
local_pathrY   rE   r{  s        r\   r  %HacsRepository.remove_local_directory  s    0	yy!!_4 $ 1 1 7 78$)):M:M9NO
##z1 $ 1 1 7 78$)):M:M9NO
##w.yy~~112!yy..99:!yy~~&e- 
 #499>>4DIII!\\..44
##}4yy''!1!5!5dii6I6I!JJvJ+1		(26..))/))*=t{{K$!\\..44
!\\..44
!$))..*===tyy*55KK%%&JDKKYcd !!"2DKKL99%%)FF&tyy~~zBBB0LLL(DDD(NN )DDD  !!FU_ M J > CLD" E 	 KK=t{{JXab	s   QEP PC(P .Q/A$P PAP  Q!A$P P(P .P/'P PP .P/'P P	P "Q#'P 
QP P P P P P P 
Q&(QQQQc                   #    g7f)zRun pre registration steps.Nrf   r   s    r\   async_pre_registration%HacsRepository.async_pre_registrationD  r$  r%  )r(  c                r  #    U R                  5       I Sh  vN   Ub  XR                  l        Xl        SU l        U R                  5       I Sh  vN (       d  gU R                  5       I Sh  vN   U R                  U R                  R                  l
        U R                  5       I Sh  vN   g N Nb NF N7f)zRun registration steps.NTF)r  r   r   r   r   r"  rD  r  r   rY   r   async_post_registration)rZ   r   s     r\   async_registration!HacsRepository.async_registrationG  s      ))+++?%(II"H $D--/// &&((( #'.. **,,,# 	, 0 	) 	-sE   B7B/7B7B1B7,B3-<B7)B5*B71B73B75B7c                   #    U R                   R                  R                  (       d  gU R                   R                  R	                  U 5      I Sh  vN   g N7f)zRun post registration steps.N)r1   r7  r   
validationasync_run_repository_checksr   s    r\   r  &HacsRepository.async_post_registration]  s9     yy&&ii"">>tDDDs   AAAAc                   #    g7f)Run pre install steps.Nrf   r   s    r\   async_pre_install HacsRepository.async_pre_installc  r$  r%  c                   #    U R                   R                  SU R                  5        U R                  5       I Sh  vN   U R                   R                  SU R                  5        g N+7f)r  z!%s Running pre installation stepsNz#%s Pre installation steps completed)r   rs  r   r  r   s    r\   _async_pre_install!HacsRepository._async_pre_installf  sN     <dkkJ$$&&&>L 	's   :A*A(,A*c                 #    U R                  5       I Sh  vN   U R                  R                  [        R                  U R
                  R                  SS.5        U R                  R                  SU R                  5        U R                  US9I Sh  vN   U R                  R                  [        R                  U R
                  R                  SS.5        U R                  R                  SU R                  5        U R                  5       I Sh  vN   U R                  R                  [        R                  U R
                  R                  SS.5        g GND N NK7f)	zRun install steps.N   rQ  progressz%s Running installation stepsr  Z   z%s Installation steps completedF)r  r1   r  r   REPOSITORY_DOWNLOAD_PROGRESSr   rH   r   rs  r   async_install_repository_async_post_install)rZ   r  r   s      r\   async_installHacsRepository.async_installl  s    %%'''		  ::99..B?	
 	8$++F++G+<<<		  ::99..B?	
 	:DKKH&&(((		  ::99..EB	
 	( 	= 	)s6   E!EA=E!EA>E!EAE!E!E!c                   #    g7f)Run post install steps.Nrf   r   s    r\   async_post_installation&HacsRepository.async_post_installation  r$  r%  c                   #    g7fzRun post uninstall steps.Nrf   r   s    r\   async_post_uninstall#HacsRepository.async_post_uninstall  r$  r%  c                @   #    U R                  5       I Sh  vN   g N7fr  )r  r   s    r\   r  $HacsRepository._async_post_uninstall  s     '')))s   c                  #    U R                   R                  SU R                  5        U R                  5       I Sh  vN   SU R                  l        U R                  R                  [        R                  SSU R                  R                  U R                  R                  S.5        U R                   R                  SU R                  5        g N7f)r  z"%s Running post installation stepsNFr  installr  z$%s Post installation steps completed)r   rs  r   r  r   r}   r1   r  r   r  rH   rx   r   s    r\   r  "HacsRepository._async_post_install  s     =t{{K**,,,				  ((#"ii11!%		
 	?M 	-s   :CCBCc                 #    SnU R                  USL S9I Sh  vN   U R                  R                  R                  c  [	        S5      eU R
                  R                  R                  5         U=(       d    U R                  5       nX@R                  R                  :X  a  X@l        O
SU 3U l        U R                  R                  [        R                  U R                  R                   SS.5        U R"                  R$                  (       a  ['        U R                  R(                  U R                  R                  R                   SU R"                  R$                   35      I Sh  vN (       a  [+        U R                  U R                  R                  R                   SU R"                  R$                   3[,        R.                  " 5       S-   S	9nU R                  R(                  R1                  UR2                  5      I Sh  vN   U R                  R4                  (       a  U R                  R6                  (       di  [+        U R                  U R                  R                  R                  S
9nU R                  R(                  R1                  UR2                  5      I Sh  vN   U R                  R8                  R;                  SU R<                  U R                  R                  R                  5        U R                  R8                  R;                  SU R<                  U R                  R                  R>                  5        U R                  R8                  R;                  SU R<                  U5        U R                  R                  [        R                  U R                  R                   SS.5        U R"                  R@                  (       a?  U R"                  RB                  (       a$  U RE                  U R
                  5      I Sh  vN   OU RG                  U5      I Sh  vN   U R                  R                  [        R                  U R                  R                   SS.5        U R
                  R                  (       a  U R
                  R                   H*  nU RH                  RK                  SU R<                  U5        M,     U R                  R4                  (       a  U R                  R6                  (       dn  U R                  R(                  R1                  WRL                  5      I Sh  vN   U R                  R(                  R1                  URN                  5      I Sh  vN   [	        S5      eU R                  R                  [        R                  U R                  R                   SS.5        U R                  R4                  (       aR  U R                  R6                  (       d7  U R                  R(                  R1                  WRN                  5      I Sh  vN   Ubn  U R                  R(                  R1                  URL                  5      I Sh  vN   U R                  R(                  R1                  URN                  5      I Sh  vN   U R
                  RP                  (       ar  SU R                  l        U R                  RR                  U R                  l*        X@R                  R                  :X  a  SU R                  l+        gX@R                  l+        gg GN GN GN) GN GN' GN GN GN GN N N7f)z,Common installation steps of the repository.Nr,  z%repository.content.path.local is Noner  (   r  r   z/hacs_persistent_directory/)r1   r  backup_path)r1   r  z%s Local path is set to %sz%s Remote path is set to %sz%s Version to install: %s2   F   rw  z'Could not download, see log for detailsP   T),r-  r   rY   r   r   r   r1  r2  r  r   rr   r   r1   r  r   r  rH   r   r   r   r2   r   rp  
gettempdirro  creater{   r   logr3  r   r   r   r   rU  r  r   r  restorecleanupsuccessrI   ry   rz   )rZ   r  r   r   version_to_installbackupr  s          r\   r  'HacsRepository.async_install_repository  s    #$$7d?$;;;<<""* GHH""$$B(@(@(B!9!99)H123DH		  ::99..B?	

 ##88!		<<$$**+1T-E-E-Z-Z,[\   (.))//"101$2J2J2_2_1` b ( 3 3 58U U	($ iinn;;<P<W<WXXX99t||':':t||7H7H7N7NOF))..77FFF		8$++t||GXGXG^G^_		94;;HYHYH`H`a		7FXY		  ::99..B?	

 ##//D4L4L4U4U))$--888''(:;;;		  ::99..B?	

 ==--!!'4;;> .yy""4<<+>+>iinn;;FNNKKKiinn;;FNNKKK IJJ		  ::99..B?	

 99t||':':))..77GGG+))..778L8T8TUUU))..778L8T8TUUU==  "&DII)-)>)>DII&!YY%=%==.2		+.@		+ !Q 	<" Y G 9; LK H VUs   ]\(E]'\+(B]\.B]$\1%E(]\4]'\7(D]4\:56]+\=,B8]$] %9]]6]]B]+].]1]4]7]:]=] ]]]c                  #     U R                   R                  R                  U R                  R                  U5      I Sh  vN nX R                   R                  R
                  R                  R                  4$  N9! [         a  n[        U5      UeSnAf[        [        [        4 a  n[        U5      UeSnAff = f7f)zReturn a repository object.N)r1   githubget_repor   rH   clientlast_responser=  r
   r   
ValueErrorr	   	Exceptionr   )rZ   r=  rQ  r{  s       r\   r@  1HacsRepository.async_get_legacy_repository_object  s     
	:#yy//889L9LdSSJyy//66DDIIII T/ 	E*959D19= 	:	*	9	:sF   B?=A= A;8A= :B?;A= =
B<BB<+B77B<<B?c                    g)zGet the filename to target.Nrf   r   s    r\   update_filenamesHacsRepository.update_filenames  s    r_   c                   #    U R                   c  [        S5      e U R                   R                  U5      I Sh  vN nU$  N! [        [        4 a  n[        U5      UeSnAff = f7f)zReturn the repository tree.NzNo repository_object)r   r   get_treer  r	   )rZ   r   r   r{  s       r\   r  HacsRepository.get_tree  sg     !!) 677	://88==DK >12 	:	*	9	:s8   A'A AA  A'A A$AA$$A'c                  #    U R                   R                  U R                   R                  R                  R                  R
                  U R                  R                  S9I Sh  vN n/ nUR                  =(       d    /  HQ  n[        U5      U:X  a    U$ UR                  (       d  UR                  (       a	  U(       d  M@  UR                  U5        MS     U$  Nr7f)zReturn the repository releases.)r  rQ  N)r1   r  r  r  r   listr   rH   r  draftrN   rT  )rZ   rN   returnlimitr  r   rx  s         r\   get_releasesHacsRepository.get_releases  s     ::99&&,,55::yy** ; 
 
 }}**G8}+  }}!3!3JOOG$ + 
s   A$C&C'A3Cc                  #    / n U R                  U(       d  U R                  R                  (       a  SOU R                  R                  S9I Sh  vN u  pgX`l        U R                  R
                  R                  5       UR
                  R                  5       :w  a  UR
                  U R                  R                  R                  U R                  R
                  '   U R                  R                  R                  (       d  [        eU R                  R                  SU R                  UR
                  5        U R                  R!                  UR"                  U R                  R                  R$                  S9  XpR                  l        U R                  R6                  (       a  U(       d  U R0                  R2                  R5                  S5        U R                  R
                  U R                  R                  R8                  ;  aC  U R                  R                  R8                  R;                  U R                  R
                  5        [=        U  S35      eU R                  R>                  RA                  U R                  R
                  5      (       a  U R                  R>                  RC                  U R                  R
                  5      n	U	RD                  S	:w  a:  U(       d3  U R0                  R2                  R5                  S
5        [+        U  S35      eU(       GdO   U RG                  SSS9I Sh  vN nU(       Ga.  SU R                  l$        U Hx  n
U
RJ                  (       a  M  U
RH                  (       a6  U R                  RH                  c  U
RL                  U R                  l$        M[  M]  U
RL                  U R                  l'          O   SU R                  l(        U V
s/ s HF  n
U
RJ                  (       a  M  U R                  RR                  (       d  U
RH                  (       a  MD  U
PMH     nn
XRP                  l*        U Vs/ s H  oRL                  PM     snU R                  l+        U RX                  (       d  U R[                  5       U l.        U R                  RP                  (       a  U RP                  RT                  =(       d    /  Hb  n
U
RL                  U R\                  :X  d  M  U
R^                  =n(       d  M4  [a        [c        U5      5      Rd                  nXR                  l3        Md     O}U R                  R                  R                  (       aX  U R                  (       aG  U R                  Ri                  5       I Sh  vN   U R                  Rj                  U R                  l5        U R                  Rl                  Ro                  SU R                  U R\                  Rq                  SS5      5         U Rs                  U R\                  5      I Sh  vN U l:        U Rt                  (       d  [+        S5      e/ U l;        U Rt                   H(  nU Rv                  R5                  URx                  5        M*     g GN8! [&         a     g[         a    [        Se[(        [*        4 a  nU R                  R,                  R.                  (       a%  U R                  R                  R                  (       a'  U R                  R                  SU R                  U5        U(       d1  U R0                  R2                  R5                  S5        [+        U5      Ue SnAGNSnAff = f GN4s  sn
f s  snf ! [*         a    SU R                  l(         GN$f = f GN GN}! [(        [*        4 Ga  nU(       d  U R\                  b  [{        U5      R}                  S5      (       aw  SU R                  l?        U R[                  5       U l.        U R                  R                  SU R                  U R\                  5        U R                  XS5      I Sh  vN  s SnA$ U R                  R,                  R.                  (       d.  U(       d'  U R                  R                  SU R                  U5        U(       d  [+        U5      Se SnAgSnAff = f7f)zCommon update data.Nr<  z#%s Repository has been renamed - %sr0  rw  zRepository does not exist.zRepository is archived.z Repository is archived.r  z,Repository has been requested to be removed.z- Repository has been requested to be removed.Tr  )rN   r  Fz%s Running checks against %sr  rC   zNo files in treezGitHub returned 404zG%s Selected version/branch %s has been removed, falling back to default)Br@  r   r{   rG   r   rH   r   r1   rH  rI  r7  	generatorr   r   r  r   r   rA  r   r   r	   r   r  startupr   r1  rT  rl   archived_repositoriesr~  r   r  
is_removedremoved_repositoryremoval_typer  rN   r  tag_namerK   r   r   r   r~   r   r  r   assetsnextiterdownload_countrD   rJ  rI   r  r3  r   r  r   r   	full_pathro   r  r   warningr4  )rZ   r+  r,  retryrG  r   r   r=  r{  removedrx  filtered_releasesr8  r  rD   treefiles                   r\   r4  !HacsRepository.common_update_data  sW     	>,0,S,S"dii&9&9Ttyy?X?X -T - '# &7"yy""((*.?.I.I.O.O.QQ%// 		  55dii6I6IJ yy''1166!!94;;HYHcHc II!!!,,yy''.. "  )-II% 99mMM  ''(AByy""$))*:*:*P*PP		  66::499;N;NO1TF:R2STT 99!!,,TYY-@-@AAii,,??		@S@STG##x/$$++,Z[#tf,Y$Z[[ +!%!2!2dPR!2!SS+/DII(#+"==$$//#yy33;7>7G7G		 4  < 6=5E5EDII2! $, *.DII& (0)'/G&}}  26))2E2EWM_M_  '/ & )
 ->MM)DU/VDUq

DU/VDII,
   //1DH99==006B6##txx/!(/v/$(f$6$E$E	.7		+	 7
 YY''D,B,B((88:::$($:$:$F$FDII!		*DKK9I9I'SU9V	
	9"mmDHH55DI99#$677DN II%%h&8&89 &{'$ ( 	+ 	9.D8%}5 	>99##++tyy/?/?/I/I!!'4;;	B $$++,HI#I.I= !	>0 T) 0W  +%*		"+ ; 6 &}5 	9HH(	N--.CDD *.		&335##]KKHH
 "44]4PPPP99##++M!!'4;;	B #I.D8 !#	9s)  cA
Z ZD;Z Fc&]: 9]-:B0]: *]0*]01]07]: ]5"]: 4A;c3cBc^A4c^" "^#A$^" cZ 
]*c]*6B)]%c%]**c-]: 0
]: :^c^c^" "c3BcacccA&ccccc           	        / nU R                   nU R                   R                  SS5      nU R                  R                  nU R
                  R                  nU R                  R                  R                  nU R                  (       a  U=(       d    /  Hj  nX7R                  :X  d  M  UR                  =(       d    /  H=  nUR                  [        UR                  UR                   UR                   5      5        M?     Ml     U(       a  U$ U R                  R"                  (       ak  U Hc  n	U	R$                  U R
                  R&                  :X  d  M)  UR                  [        U	R(                  U	R*                  U	R$                  5      5        Me     U$ US:X  a  U H  n	U	R                  S;   d  M  US:X  a"  U	R$                  R-                  S5      (       d  M=  U(       d4  U	R$                  R/                  S5      (       d  Mf  U	R                  S:w  a  Mx  U	R0                  (       a  M  UR                  [        U	R(                  U	R*                  U	R$                  5      5        M     U(       a  U$ U R2                  R4                  (       a9  U R2                  R$                  (       d  US:X  a  [7        U R                   SSS	5      nU H  n
U
R0                  (       a  M  U
R*                  R-                  U R                  R                  R                  5      (       d  MV  UR                  [        U
R(                  U
R*                  U
R$                  5      5        M     U$ )
z/Return a list of file objects to be downloaded.r  rC   r9   )rC   distr)  z.jsr@   yamlr!  )r   r   r   r   r   r   rp   r   rY   r   r  r  r  rT  rT   browser_download_urlrR   r   r   rt   rX   r!  r  r  is_directoryr   r   r   )rZ   r   r   r   releaseobjectsrp   remotelocationrx  assetr&  rY   s              r\   r}  'HacsRepository.gather_files_to_download  s   yy
##GR0..99%%**11##)/R/***!(!52!5+E,F,F

TYT^T^_ "6 0 << $$		(;(;;LL'$1183E3ExGXGX ! Lx ==L0%/8I8I8T8TU[8\8\ )'0099%@@$#==B.$#000+ ( 5 5x7I7I8K\K\ ! ##33++44w&<TYYFT_`DD  ~~(():):)A)ABB_T->->PTP]P]^_	 
 r_   c           
       #    U R                   R                  U R                   R                  R                  SU R                  R
                   SU 3SS9I Sh  vN nUc  gUR                  R                  S/ 5       Vs/ s H;  n[        UR                  S5      UR                  S5      UR                  S5      S	9PM=     sn$  Nks  snf 7f)
z!Gather the contents of a release.z/repos/z/releases/tags/F)r  endpointr  Nr  r+  rR   )r[   rY   rR   )r1   r  r  genericr   rH   rB  rT   )rZ   r  rx  r/  s       r\   r|  HacsRepository.release_contents  s     		9999&&..tyy223?7)L! : 
 

 ? !))(B7
 8 II45YYv&YYv&
 8
 	


s%   ACC&C ACCCc                @  #     U R                   R                  SU R                  UR                  5        U R                  R                  UR                  5      I Sh  vN nUc4  U R                  R                  R                  SUR                   S35        gU R                  R                  (       d  UR                  c!  U R                  R                  R                  nOUR                  nU R                  R                  (       d1  UR!                  U R                  R                  R"                   S5      nU R                  R                  R                   SU 3nUR%                  S5      nUS	 SR'                  U5      n[(        R*                  " U5      R-                  SSS	9  U SUR                   3R!                  S
S5      nU R                  R/                  XR5      I Sh  vN nU(       a2  U R                   R1                  SU R                  UR                  5        gU R                  R                  R                  SUR                   S35        g GN Nt! [2         a3  nU R                  R                  R                  SU S35         SnAgSnAff = f7f)zDownload content.z%s Downloading %sNrm  z] was not downloaded.rC   r   r   T)parentsexist_okz//rl  zDownload was not completed [])r   r3  r   rR   r1   rn  rX   r   r1  rT  r   r   rY   r   r   r   r   r   r   r  pathlibPathmkdirrr  rs  rS  )rZ   r   rt  local_directory_content_pathlocal_file_pathr  r{  s           r\   r  )HacsRepository.dowload_repository_content  s    &	UKK14;;M $		 = =g>R>R SSK"$$++a~=R,ST ||""gll&:"&,,"3"3"9"9 !(//??$1$9$9T\\=N=N=U=U<VY[$\M%)\\%6%6%<%<$=Q}o"N"1"7"7"<#B'"%((?"; LL)//t/L"1!2!GLL>BKKDRUVO9944_RRF  !>W\\ZMM  ''!GLL>9N(OP; T2 S 	U MM  ''*FykQR(STT		Usl   JAI I:I JEI 'I(<I $J%3I JI I 
J()JJJJc                   #    [         R                  " U R                  R                  S9nUR	                  [
        [        U R                  R                  5      41S9nUc  gUR                  UR                  S9  g7f)zRemove the entity device.ry  )identifiersN)	device_id)
dr	async_getr1   r2   async_get_devicer   ro   r   rx   async_remove_device)rZ   r   devices      r\   r  )HacsRepository.async_remove_entity_device  s`     -/\\tyy~~-N 11DIILLHY?Z>[1\>++fii+@s   A:A<c                   U R                   R                  b  U R                   R                  bk  U R                   R                  U R                   R                  :X  a'  SU R                   l        U R                   R                  $ U R                   R                  $ U R                   R                  $ U R                   R                  b  U R                   R                  U R                   R                  :X  a  U R                   R                  $ U R                   R                  U R                   R                  ;   a  U R                   R                  $ U R                   R                  =(       d    S$ )z$Determine which version to download.Nmain)r   rK   r   rr   r~   r   s    r\   r  "HacsRepository.version_to_download  s    99!!-yy%%199))TYY-C-CC-1DII*99111yy---99)))99!!-yy%%)A)AAyy///yy%%)A)AAyy---yy''161r_   r  c                 #    Uc  gUb  UnOU R                   R                  (       a4  U R                   R                  =(       d    U R                   R                  nOFU R                   R                  =(       d)    U R                   R
                  =(       d    U R                  nU R                  R                  SU R                  UU5        Uc  gU R                  R                  SU R                   R                   SU SU 3SS9I Sh  vN nU(       a/  UR                  SS9R                  S	S
5      R                  SS5      $ S$  N<7f)z(Get the documentation of the repository.Nz3%s Getting documentation for version=%s,filename=%s"https://raw.githubusercontent.com/r   Tr  zutf-8)encodingz<svgz	<disabledz</svgz
</disabled)r   r{   rz   ry   rK   rI   r   r   r3  r   r1   rn  rH   decoder   )rZ   r   r  r  target_versionr  s         r\   r   HacsRepository.get_documentation*  s(     $NYY  !YY88VDII<V<VN!YY33Xtyy7L7LXPTPXPXNAKK		
 !yy440		##1%$%n%5QxjB 5 
 
  MM7M+WV[)WWl+	

 	

s   DEE	=Ec               <  #    U R                   R                  SU R                  U5         U R                  R	                  SU R
                  R                   SU S3SS9I Sh  vN nUc  g[        R                  [        U5      5      $  N&! [         a     gf = f7f)z)Get the hacs.json file of the repository.z#%s Getting hacs.json for version=%srM  r   z
/hacs.jsonTrN  N)r   r3  r   r1   rn  r   rH   r   r   r    r  )rZ   r  r  r  s       r\   get_hacs_jsonHacsRepository.get_hacs_jsonS  s     ?gV
	99884II''5)()'*> 9  F
 ~))*V*<==  		sF   (B8B #B
$B +B,B 	B
B 
BBBBc                  #    SnUc?  U R                   (       d-  [        SU R                  R                  R                   S35      egXR                  R
                  :X  a  U R                  nOU R                  US9I Sh  vN nUc0  [        SU SU R                  R                  R                   S35      eUR                  bG  U R                  R                  R                  UR                  :  a  [        SUR                   S	35      eUR                  b>  U R                  R                  UR                  :  a  [        S
UR                   S	35      egg N7f)z(Ensure that the download can be handled.NzThis z is not available for download.r  zThe version z
 for this z can not be used with HACS.z%This version requires Home Assistant z
 or newer.zThis version requires HACS )r  r   r   rp   r   rK   r   rT  r4   r1   r  r  r  )rZ   r   r  target_manifests       r\   _ensure_download_capabilities,HacsRepository._ensure_download_capabilitiesb  sf    /3;$$#		**0021PR  ))((("66O$($6$6s$6$CCO"se:II&&,,..-HJ  ))5		))O,I,II7#11832<>  +		0A0AODXDX0X"=$$>&%/!1 2 2 1Y+! Ds   A=E?E CE)r   c          
       #    U R                  U5      I Sh  vN   U R                  R                  SU5        U R                  S:X  a  U R                  R                  [        R                  U R                  R                  SS.5        U(       d  U R                  SS9I Sh  vN   OXl        XR                  l        USLU l        U R                  R                  [        R                  U R                  R                  SS.5         U R                  US	9I Sh  vN    SU R                  l        SU l        U R                  R                  [        R                  U R                  R                  SS.5        g GNd N Nd! [         ai  n[        S
U R                  R                   SU=(       d3    U R                  R                   =(       d    U R                  R"                   SU S35      UeSnAff = f! SU R                  l        SU l        U R                  R                  [        R                  U R                  R                  SS.5        f = f7f)z%Download the content of a repository.NzStarting download, %sr  r&  r  Tr     r  zDownloading z with version z failed with ()F)rX  r   rs  r  r1   r  r   r  r   rH   r-  r   r   r   r  r   rK   rI   )rZ   r   r   r{  s       r\   async_download_repository(HacsRepository.async_download_repository  s    005550#6))Y6II$$!>>#yy22C ,,4,888%(II" #4DII$$!>>#yy22C
	$$S$111 &*DII" %DII$$!>>#yy22F9 	6 9 2 	tyy223>J49911JTYY5J5JBLKYZcYddeg 	 &*DII" %DII$$!>>#yy22Fsh   IE;B
I"E>#A%I	F F F !AI>I F 
G5A$G00G55G8 8AIIr  )firstc                  #    U R                   R                  U R                   R                  R                  R                  R
                  U R                  R                  SS0S9I Sh  vN nUR                  $  N7f)z(Get the last x releases of a repository.per_pager  )r  rQ  r  N)r1   r  r  r  r   r  r   rH   )rZ   r_  r  s      r\   async_get_releases!HacsRepository.async_get_releases  sh     ::99&&,,55::yy**# ; 
 

 }}
s   A'A<)A:*A<)r   r   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   )r1   r+   r   r   )r   ro   )r   rk   )r   r   )r   r   )FFr   )r+  rk   r   r   )FFF)r   r'   r   r   )r   r   r   r'   r   r   rW   )r  zstring | Noner   r   )r   ro   r   zdict[str, Any] | None)r  r   r   ro   )r  r   r   r   )r=  r   r   z)tuple[AIOGitHubAPIRepository, Any | None])r   ro   )Fr'  )r   r   )FFFF)r+  rk   r,  rk   r   r   )r   zlist[FileInformation])r  r   r   zlist[FileInformation] | None)r   rT   r   r   )r   r   r  r   r   r   )r  ro   r   zHacsManifest | None)r   r   r  r   r   r   )r   r   r   r   )r_  rs   r   r   )=r`   ra   rb   rc   rd   r]   r   r   r   r   r   r  r  r
  r  r   r  r  r  r"  r   r-  r9  rD  rM  rU  rR  r  rz  r6  rK  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r@  r
  r  r  r4  r}  r|  r  r  r  r  rT  rX  r]  rb  re   rf   r_   r\   r   r   +  s   * G G ^ ^ - -   	 	   ! !  * 	 	     3$ 4$"7* 3/ 4/b,&A$&A &A 
	&AP#'J7ar  KO [*4Q04l* #- $-*E%M <@ 
(&(*N  GK RAl  :: 
3:*:" ${9{9 {9 
{9z:x
& #(U $(UTA2*  $"	'
 '
 	'
 
'
R 2D DH !F 8:  r_   r   )Vrd   
__future__r   asyncior   r   r   rd  r9  rf  rp  typingr   r   rZ  aiogithubapir	   r
   r   aiogithubapi.objects.repositoryr   r   homeassistant.helpersr   rC  r   r  constr   enumsr   r   
exceptionsr   r   r   r   typesr   utils.backupr   utils.decoder   utils.decoratorr   utils.file_systemr   r   r   utils.filtersr   utils.github_graphql_queryr   
utils.jsonr    utils.loggerr!   
utils.pathr"   utils.queue_managerr#   utils.storer$   	utils.urlr%   r&   utils.validater'   utils.versionr(   r)   utils.workaroundsr*   baser+   r   REPOSITORY_KEYS_TO_EXPORTHACS_MANIFEST_KEYS_TO_EXPORTrT   sri   r   r   r   r   r   rf   r_   r\   <module>r     sY    "  " 	    %  
 C  M  5  ( ! ) ( R R = @ # !   . , < % 1-f rN! , O	    TJ* J* J*Z T3* 3* 3*l   C Cr_   