
    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	r
SSKJrJr  SSKJr  SS	KJrJrJr  \\S
.r " S S5      rg)HACS Data client.    )annotationsN)Any)ClientSessionClientTimeout   )HacsExceptionHacsNotModifiedException)LOGGER)(VALIDATE_FETCHED_V2_CRITICAL_REPO_SCHEMA'VALIDATE_FETCHED_V2_REMOVED_REPO_SCHEMAVALIDATE_FETCHED_V2_REPO_DATA)criticalremovedc                  P    \ rS rSrSrS	S jr S
     SS jjrSS jrSS jrSr	g)HacsDataClient   r   c                *    X l         0 U l        Xl        g)zInitialize.N_client_name_etags_session)selfsessionclient_names      -/config/custom_components/hacs/data_client.py__init__HacsDataClient.__init__   s    '    Nc           	     j  #    SR                  X!4 Vs/ s H	  o3c  M  UPM     sn5      n U R                  R                  SU 3[        SS9U R                  U R
                  R                  US5      S.S9I Sh  vN nUR                  S	:X  a  [        5       SeUR                  5         UR                  R                  S5      U R
                  U'   UR                  5       I Sh  vN $ s  snf  Nt! [         a    e [         a    [        S
5      Se[         a  n[        SU 35      UeSnAff = f NK7f)zDo request./Nzhttps://data-v2.hacs.xyz/<   )total )z
User-AgentzIf-None-Match)timeoutheadersi0  zTimeout of 60s reachedzError fetching data from HACS: etag)joinr   getr   r   r   statusr
   raise_for_statusTimeoutErrorr	   	Exceptionr&   json)r   filenamesectionvendpointresponse	exceptions          r   _do_requestHacsDataClient._do_request"   s0     88(;M(;1Q(;MN	^!]]..+H:6%B/"&"3"3%)[[__Xr%B /  H #%.0d:%%' !) 0 0 4 4V <H]]_$$- N ( 	 	D 89tC 	^"A) MNT]]	^
 %sV   D3C*C*D3AC1 :C/;/C1 *;D3%D1&	D3/C1 1)D.D))D..D3c          	     f  #    U R                  SUS9I Sh  vN nU(       d  U$ U[        ;   a/  0 nUR                  5        H  u  pV [        U   " U5      XE'   M     U$ [        R                  U5      =n(       d  [        SU 35      e/ nU H  n UR                  U" U5      5        M     U$  N! [        R                   a3  n[
        R                  " SUR                  SU5      U5         SnAM  SnAff = f! [        R                   a"  n[
        R                  " SX5         SnAM  SnAff = f7f)z	Get data.z	data.jsonr/   r0   NzGot invalid data for %s (%s)	full_namezDo not know how to validate )r5   r   itemsvolInvalidr   infor)   CRITICAL_REMOVED_VALIDATORS
ValueErrorappend)	r   r0   validatedata	validatedkey	repo_datar4   	validators	            r   get_dataHacsDataClient.get_data@   s"    %%{G%LLK33I"&**,%B7%KI%VIN #/ 8<<WEE	E;G9EFF	I  9!56  9 M {{ KK6	kSV8WYb 	 ;; :GOsc   D1B,.D1B.7D1C8&D1.C5(C0*D10C55D18D.D)#D1)D..D1c                >   #    U R                  SUS9I Sh  vN $  N7f)zGet repositories.zrepositories.jsonr8   N)r5   )r   r0   s     r   get_repositoriesHacsDataClient.get_repositories`   s"     %%/BG%TTTTs   r   )r   r   r   strreturnNone)N)r/   rL   r0   
str | NonerM   z%dict[str, dict[str, Any]] | list[str])r0   rO   rA   boolrM   zdict[str, dict[str, Any]])r0   rL   rM   z	list[str])
__name__
__module____qualname____firstlineno____doc__r   r5   rG   rJ   __static_attributes__ r   r   r   r      s<      #%% % 
/	%<@Ur   r   )rU   
__future__r   asynciotypingr   aiohttpr   r   
voluptuousr;   
exceptionsr	   r
   utils.loggerr   utils.validater   r   r   r>   r   rW   r   r   <module>r`      sE     "   0  ?    96 IU IUr   