
    i                         d dl Z d dlZd dlZd dlmZmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddiZ G d d          Z e            ZdS )    N)IOAnyLiteral)urljoin)	HTTPErrorResponseSession)HTTPAdapterRetry   )sso)OAuth1TokenOAuth2Token)GarthHTTPError)asdictz
User-AgentzGCM-iOS-5.7.2.1c                   B   e Zd ZU eed<   eed<   dZeed<   dZe	e
d         z  dz  ed<   dZeeeef         z  dz  ed<   d	Zeed
<   dZeed<   dZeedf         ed<   dZeed<   d	Zeed<   d	Zeed<   dZeeef         dz  ed<   d9dedz  fdZ	 	 	 	 	 	 	 	 	 	 	 d:de	dz  dedz  dedz  deeef         dz  dedz  d
edz  dedz  deedf         dz  dedz  dedz  dedz  fdZed             Zed             Zed             Zddi fdedeez  d ed!ed"ed#ed$efd%Z d$efd&Z!d$efd'Z"d$efd(Z#d$efd)Z$d* Z%d+ Z&d, Z'	 d;d#ed$eeef         e(eeef                  z  dz  fd.Z)d#ed$e*fd/Z+	 d<d#ed1e,e*         d$eeef         fd2Z-d3efd4Z.d$efd5Z/d3efd6Z0d7efd8Z1dS )=Clientsess	last_respz
garmin.comdomainN	needs_mfaoauth1_tokenoauth2_token
   timeout   retries)i  i  i  i  i  i  .status_forcelistg      ?backoff_factorpool_connectionspool_maxsize_user_profilesessionc                     |r|nt                      | _        | j        j                            t                      | j        d| j        | j        | j        | j	        d| d S )N)r   r   r   r    )
r	   r   headersupdate
USER_AGENT	configurer   r   r   r   )selfr#   kwargss      E/root/projects/butler/venv/lib/python3.11/site-packages/garth/http.py__init__zClient.__init__!   sy    &5GGGII		  ,,, 	
LL!2.		
 	

 	
 	
 	
 	
 	
    proxies
ssl_verifyc                   ||| _         ||| _        |r|| _        || j        j                            |           ||| j        _        ||| _        ||| _        ||| _	        |	|	| _
        |
|
| _        ||| _        t          | j        | j	        | j
                  }t          || j        | j                  }| j                            d|           d S )N)totalr   r   )max_retriesr    r!   https://)r   r   r   r   r/   r'   verifyr   r   r   r   r    r!   r   r
   mount)r*   r   r   r   r/   r0   r   r   r   r   r    r!   retryadapters                 r,   r)   zClient.configure,   s    # ,D# ,D 	! DKI$$W---!)DI"DL"DL'$4D!%"0D'$4D!# ,D,!2.
 
 

 !2*
 
 

 		
G,,,,,r.   c                     | j         s>|                     d          | _         t          | j         t                    s
J d            | j         S )Nz"/userprofile-service/socialProfilezNo profile from connectapi)r"   
connectapi
isinstancedictr*   s    r,   user_profilezClient.user_profile^   s_    ! 	!%4" "D d0$77  ,   !!r.   c                     | j         S Nr>   r=   s    r,   profilezClient.profilei   s      r.   c                     | j         d         S )NuserNamerA   r=   s    r,   usernamezClient.usernamem   s     ,,r.   Fapireferrerr&   method	subdomainpathreturnc                   d| d| j          }t          ||          }|du r| j        r| j        j        |d<   |rb| j        s
J d            t          | j        t                    r| j        j        r| 	                                 t          | j                  |d<    | j        j        ||f|| j        d|| _        	 | j                                         n## t          $ r}	t!          d|		          d }	~	ww xY w| j        S )
Nr4   .Trefererz)OAuth1 token is required for API requestsAuthorization)r&   r   zError in request)msgerror)r   r   r   urlr   r;   r   r   expiredrefresh_oauth2strr   requestr   raise_for_statusr   r   )
r*   rH   rI   rJ   rF   rG   r&   r+   rR   es
             r,   rV   zClient.requestq   sa    322T[22c4  t!%!3GI 		>$  ;   t0+>>&$,& ##%%%'*4+<'='=GO$**
 L	
 

 
 
	N++---- 	 	 	 &   	
 ~s   >C 
C8"C33C8c                 $     | j         dg|R i |S )NGETrV   r*   argsr+   s      r,   getz
Client.get   $    t|E3D333F333r.   c                 $     | j         dg|R i |S )NPOSTr[   r\   s      r,   postzClient.post   s$    t|F4T444V444r.   c                 $     | j         dg|R i |S )NDELETEr[   r\   s      r,   deletezClient.delete   s$    t|H6t666v666r.   c                 $     | j         dg|R i |S )NPUTr[   r\   s      r,   putz
Client.put   r_   r.   c                 b    t          j        |i |d| i\  | _        | _        | j        | j        fS )Nclient)r   loginr   r   r\   s      r,   rk   zClient.login   sN    /2y0
0
 0
$(0
 0
 0
,4,  $"333r.   c                 Z    t          j        |i |\  | _        | _        | j        | j        fS r@   )r   resume_loginr   r   r\   s      r,   rm   zClient.resume_login   s=    /2/?0
0
 0
,4,  $"333r.   c                     | j         rt          | j         t                    s
J d            t          j        | j         |           | _        d S )Nz+OAuth1 token is required for OAuth2 refresh)r   r;   r   r   exchanger   r=   s    r,   rT   zClient.refresh_oauth2   s\      	9Z{&
 &
 	9 	98	9 	9 	9
  L):DAAr.   rZ   c                 h     | j         |d|fddi|}|j        dk    rd S |                                S )Nr:   rF   T   )rV   status_codejson)r*   rJ   rH   r+   resps        r,   r:   zClient.connectapi   sG     t|FL$KKDKFKKs""4yy{{r.   c                 2     | j         d|fddi|}|j        S )Nr:   rF   T)r^   content)r*   rJ   r+   rt   s       r,   downloadzClient.download   s*    txd?????|r.   /upload-service/uploadfpc                    t           j                            |j                  }d||fi}|                     |d|          }|
J d            t          |t                    sJ |S )Nfilera   )rH   fileszNo result from upload)osrJ   basenamenamer:   r;   r<   )r*   ry   rJ   fnamer|   results         r,   uploadzClient.upload   s|       ))%% ! 
 

 !!#:!!!&$'''''r.   dir_pathc                 J   t           j                            |          }t          j        |d           t	          t           j                            |d          d          5 }| j        r)t          j        t          | j                  |d           d d d            n# 1 swxY w Y   t	          t           j                            |d          d          5 }| j
        r)t          j        t          | j
                  |d           d d d            d S # 1 swxY w Y   d S )NT)exist_okoauth1_token.jsonw   )indentoauth2_token.json)r}   rJ   
expandusermakedirsopenjoinr   rs   dumpr   r   )r*   r   fs      r,   r   zClient.dump   s   7%%h//
Ht,,,,"',,x)<==sCC 	Bq  B	&!233QqAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B "',,x)<==sCC 	Bq  B	&!233QqAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs$   $1B!!B%(B%1DDDc                 :   g }|                     t          | j                             |                     t          | j                             t	          j        |          }t          j        |                                          	                                S r@   )
appendr   r   r   rs   dumpsbase64	b64encodeencodedecode)r*   rss      r,   r   zClient.dumps   ss    	)**+++	)**+++JqMM

++22444r.   c                 
   t           j                            |          }t          t           j                            |d                    5 }t          di t          j        |          }d d d            n# 1 swxY w Y   t          t           j                            |d                    5 }t          di t          j        |          }d d d            n# 1 swxY w Y   | 	                    |||j
                   d S )Nr   r   r   r   r   r%   )r}   rJ   r   r   r   r   rs   loadr   r)   r   )r*   r   r   oauth1oauth2s        r,   r   zClient.load   s]   7%%h//"',,x)<==>> 	1! 0049Q<<00F	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1"',,x)<==>> 	1! 0049Q<<00F	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1fV] 	 	
 	
 	
 	
 	
s$   A88A<?A<0CC"Cr   c                     t          j        t          j        |                    \  }}|                     t          di |t          di ||                    d                     d S )Nr   r   r%   )rs   loadsr   	b64decoder)   r   r   r^   )r*   r   r   r   s       r,   r   zClient.loads   sv    F$4Q$7$788$..v..$..v..::h'' 	 	
 	
 	
 	
 	
r.   r@   )NNNNNNNNNNN)rZ   )rx   )2__name__
__module____qualname__r	   __annotations__r   r   rU   r   r   r   r   r   r<   r   r   intr   r   tupler   floatr    r!   r"   r-   boolr)   propertyr>   rB   rE   rV   r^   rb   re   rh   rk   rm   rT   listr:   bytesrw   r   r   r   r   r   r   r%   r.   r,   r   r      s        
MMMFC>BL+ 44t;BBB8<L+S#X.5<<<GSGS(FeCHoFFFNEcL#+/M4S>D(///	
 	
$ 	
 	
 	
 	
 ,0+/!)-"&""37'+'+#'0- 0- "D(0- "D(	0-
 d
0- c3h$&0- 4K0- t0- t0-  S/D00- 0- *0- Dj0- 0- 0- 0-d " " X" ! ! X! - - X- $' ' ' *' '' ' 	' 
' ' ' 'R4h 4 4 4 45x 5 5 5 57 7 7 7 74h 4 4 4 44 4 44 4 4B B B !& 	c3h$tCH~.	.	5   S u    
 -E &)U)	c3h   BS B B B B5s 5 5 5 5
S 
 
 
 

s 
 
 
 
 
 
r.   r   )r   rs   r}   typingr   r   r   urllib.parser   requestsr   r   r	   requests.adaptersr
   r    r   auth_tokensr   r   excr   utilsr   r(   r   rj   r%   r.   r,   <module>r      s#     				 # # # # # # # # # #             1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0       1 1 1 1 1 1 1 1             -.
b
 b
 b
 b
 b
 b
 b
 b
J 
r.   