
    h6                    R   % S 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  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  \(       a  SSKJr  SSKJr  SSKJ r   Sr!S\"S'   SS jr#\$" S5      S.     SS jjr%      SS jr&SS.     S S jjr'g)!zPLow-level remote (the "raw" endpoint JSON) Terms of Service metadata management.    )annotations)datetime)JSONDecodeError)TYPE_CHECKING)context)join_url)get_session)Channel)ValidationError)RequestException   )CondaToSInvalidErrorCondaToSMissingErrorCondaToSPermissionError)RemoteToSMetadata)get_cache_path)Path)Final)Responsez
terms.jsonr   ENDPOINTc                   [        U 5      n U R                  (       d  [        S5      e[        U R                  5      n[	        U R                  [
        5      n[        R                  n S[        l        UR                  USS0[        R                  [        R                  4S9nUR                  5          U[        l        U$ ! [         a  n[        U 5      UeSnAff = f! U[        l        f = f)z0Get the metadata endpoint for the given channel.zd`channel` must have a base URL. (hint: `conda.models.channel.MultiChannel` doesn't have an endpoint)FzContent-Typezapplication/json)headerstimeoutN)r
   base_url
ValueErrorr	   r   r   r   add_anaconda_tokengetremote_connect_timeout_secsremote_read_timeout_secsraise_for_statusr   r   )channelsessionurlsaved_token_settingresponseexcs         9lib/python3.13/site-packages/conda_anaconda_tos/remote.pyget_endpointr(   #   s    gGS
 	

 '**+G
7##X
.C!449
 &+";;#%783300  
 	!!#
 &9"O  5"7+45 &9"s%   (AC 
CCCC   C-infcache_timeoutc               &   U(       d  g[        U 5      n[        U[        [        45      (       d  [	        S5      e UR                  5       R                  n[        R                  " 5       R                  5       nXC-
  U:  a  gU$ ! [         a     gf = f)z5Get the path to cached payload for the given channel.Nz4`cache_timeout` must be an integer, float, or falsy.)r   
isinstanceintfloat	TypeErrorstatst_mtimeFileNotFoundErrorr   now	timestamp)r!   r+   pathmtimer4   s        r'   get_cached_endpointr8   G   s      '"Dmc5\22NOO		$$ ,,.
"
"
$C%K  s   B 
BBc                N   [        U 5      nU(       a   [        U[        5      (       d  [        S5      e UR                  R                  SSS9  U(       a!  UR                  UR                  5       5        U$ UR                  5          U$ ! [         a  n[        X 5      UeSnAff = f)z/Write the metadata cache for the given channel.z'`metadata` must be a RemoteToSMetadata.T)parentsexist_okN)r   r-   r   r0   parentmkdir
write_textmodel_dump_jsontouchPermissionErrorr   )r!   metadatar6   r&   s       r'   write_cached_endpointrC   d   s     '"D
8->??ABB>$6OOH4467 K JJL
 K	  >%d4#=>s   A B	 6B	 	
B$BB$Nc                  [        U [        R                  (       a  [        S5      OUS9nU(       aI   UR	                  5       R                  5       nU(       d  [        U 5      e  [        R                  " U5      $  [        S0 [        U 5      R                  5       D6n[!        X5        U$ ! [         a  n[        U 5      UeSnAf[         a  n[        X 5      UeSnAff = f! [         a  n[        U 5      UeSnAff = f! [         a    [!        U S5        e ["         a1  nSUR$                  S   ;   a  [!        U S5        [        U 5      Uee SnAf[&        [(        [*        [        4 a  n[!        U S5        [        U 5      UeSnAff = f)z0Get the metadata metadata for the given channel.r)   r*   Nzoffline moder    )r8   r   offliner/   	read_textstripr   r3   rA   r   r   model_validate_jsonr   r   r(   jsonrC   RuntimeErrorargsAttributeErrorr0   r   )r!   r+   cachetextr&   rB   s         r'   get_remote_metadatarP   |   sk     &-ooeEl=E 		C??$**,D*733 	9$88>>$D|G'<'A'A'CD( 	g0I ! 	9&w/S8 	C)%9sB	C  	9&w/S8	9    	gt, SXXa[(!'40&w/S8IH 5
 	gt,"7+45s_   0B+ %C" <"D  +
C5CCCC"
C=,C88C=  F ,EF)FF)r!   str | Channelreturnr   )r!   rQ   r+   int | float | NonerR   zPath | None)r!   rQ   rB   zRemoteToSMetadata | NonerR   r   )r!   rQ   r+   rS   rR   r   )(__doc__
__future__r   r   rJ   r   typingr   conda.base.contextr   conda.common.urlr   !conda.gateways.connection.sessionr	   conda.models.channelr
   pydanticr   requests.exceptionsr   
exceptionsr   r   r   modelsr   r6   r   pathlibr   r   requestsr   r   __annotations__r(   r/   r8   rC   rP   rE       r'   <module>rc      s    W "      & % 9 ( $ 0 
 &  !% !N ).e & 	:& 
6 )-77 &7 	7rb   