
    #	h                         S SK Jr  S SKJr  SSKJr  SSKJr  Sr	 " S S\
5      rSS
 jr " S S\
5      r " S S\5      rg	)    )Lock)sha256   )_IndividualCache)_ExpiringMappingz,urn:ietf:params:oauth:grant-type:device_codec                   $    \ rS rSrSS jrS rSrg)RetryAfterParser   Nc                 (    Uc  SU l         g UU l         g )N   _default_value)selfdefault_values     L/var/www/html/env/lib/python3.13/site-packages/msal/throttled_http_client.py__init__RetryAfterParser.__init__   s    #0#8am    c                |   Un[        US0 5      R                  5        VVs0 s H  u  pEUR                  5       U_M     nnnUR                  S:X  d  UR                  S:  d  SU;   d  gUR	                  SU R
                  5      n [        U5      n[        SU5      $ s  snnf ! [         a    U R
                  n N*f = f)zReturn seconds to throttleheadersi  i  retry-afterr   i  )	getattritemslowerstatus_codegetr   int
ValueErrormin)	r   resultignoredresponsekvlowercase_headersretry_afterdelay_secondss	            r   parseRetryAfterParser.parse   s    6=i7%%*UW7- . 7-daQWWY\ 7- . $$+x/C/Cs/J $55'++M4;N;NO	0  ,M 4''.  	0 //M	0s   BB" "B;:B;r   N)__name__
__module____qualname____firstlineno__r   r(   __static_attributes__ r   r   r	   r	      s    L(r   r	   Nc                 v    U R                  S0 5      n[        U[        5      (       a  UR                  U5      $ U$ )Ndata)r   
isinstancedict)kwargskeydefaultr2   s       r   _extract_datar8   #   s1    ::fb!D&tT22488C=??r   c                   H    \ rS rSrSrSS.S jrS rS rS r\	S	 5       r
S
rg)ThrottledHttpClientBase(   a  Throttle the given http_client by storing and retrieving data from cache.

This wrapper exists so that our patching post() and get() would prevent
re-patching side effect when/if same http_client being reused.

The subclass should implement post() and/or get()
N)
http_cachec                J    Xl         [        Ub  UO0 S[        5       S9U l        g )Ni   )mappingcapacitylock)http_clientExpiringMappingr   _expiring_mapping)r   rA   r<   s      r   r    ThrottledHttpClientBase.__init__0   s'    &!0","8Jb"r   c                 :    U R                   R                  " U0 UD6$ r*   )rA   postr   argsr5   s      r   rF   ThrottledHttpClientBase.post8   s    $$d5f55r   c                 :    U R                   R                  " U0 UD6$ r*   )rA   r   rG   s      r   r   ThrottledHttpClientBase.get;   s    ##T4V44r   c                 6    U R                   R                  5       $ r*   )rA   close)r   s    r   rM   ThrottledHttpClientBase.close>   s    %%''r   c                 d    [        [        U 5      R                  S5      5      R                  5       $ )Nzutf-8)r   reprencode	hexdigest)raws    r   _hashThrottledHttpClientBase._hashA   s%    d3i&&w/0::<<r   )rC   rA   )r+   r,   r-   r.   __doc__r   rF   r   rM   staticmethodrT   r/   r0   r   r   r:   r:   (   s4     37 65( = =r   r:   c                   0   ^  \ rS rSrSS.U 4S jjrSrU =r$ )ThrottledHttpClientF   N)default_throttle_timec                t  >^  [         [        T ]
  " U40 UD6  UR                  n[	        T R
                  U 4S j[        U=(       d    S5      R                  S9" U5      n[	        T R
                  U 4S jSS jS9" U5      nUT l        [	        T R
                  U 4S jS	S jS9" UR                  5      T l        g )
Nc                    > SR                  US   [        US5      [        US5      TR                  [        US[        US[        US5      5      5      5      5      $ )Nz9POST {} client_id={} scope={} hash={} 429/5xx/Retry-Afterr   	client_idscoperefresh_tokencodeusername)formatr8   rT   funcrH   r5   r   s      r   <lambda>.ThrottledHttpClient.__init__.<locals>.<lambda>P   s_    KRRG!&+6!&'2JJ &fo)&& -fj ACD	E	r   r   )r>   	key_maker
expires_inc                    > SR                  US   TR                  [        UR                  S5      5      [        UR                  S5      5      -   5      5      $ )NzPOST {} hash={} 400r   paramsr2   )rc   rT   strr   rd   s      r   rf   rg   b   sK    1F1M1MQ

 

8,-FJJv4F0GGI2r   c           	         U R                   S:X  aq  [        UR                  S5      [        5      (       a  US   R                  S5      [        :X  d1  S[        S [        U S0 5      R                  5        5       5      ;  a  S$ S$ )	Ni  r2   
grant_typer   c              3   @   #    U  H  oR                  5       v   M     g 7fr*   )r   ).0hs     r   	<genexpr>AThrottledHttpClient.__init__.<locals>.<lambda>.<locals>.<genexpr>   s      -N'L!GGII'Ls   r   <   r   )r   r3   r   r4   DEVICE_AUTH_GRANTsetr   keys)r    r5   r!   s      r   rf   rg   t   s    %%, vzz&1488v**<8<MM! -N'.vy"'E'J'J'L-N *N N   r   c           	      l   > SR                  US   TR                  UR                  SS5      5      5      $ )NzGET {} hash={} 2xxr   rk    )rc   rT   r   rd   s      r   rf   rg      s/    1E1L1LQ

6::h342r   c                 :    SU R                   s=::  a  S:  a  S$   S$ )N   i,  iQ r   )r   )r    r!   s     r   rf   rg      s"    &"4"4:s:A:Ar   )NNr*   )	superrY   r   rF   IndividualCacherC   r	   r(   r   )r   rA   r[   r5   _post	__class__s   `    r   r   ThrottledHttpClient.__init__G   s    !41+HH   ** ((=(BCII#$ %(  **$)#F G#J 	"**B oor   )r   rF   )r+   r,   r-   r.   r   r/   __classcell__)r   s   @r   rY   rY   F   s    =A H Hr   rY   r*   )	threadingr   hashlibr   individual_cacher   r}   r   rB   ru   objectr	   r8   r:   rY   r0   r   r   <module>r      sG      A A C (v (.@
=f =<I1 Ir   