
    h                         d dl Z d dlZd dlZd dlmZmZ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y)    N)IOAnyDictLiteralTuple)urljoin)	HTTPErrorResponseSession)HTTPAdapterRetry   )sso)OAuth1TokenOAuth2Token)GarthHTTPError)asdictz
User-AgentzGCM-iOS-5.7.2.1c                      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<   d7dedz  fdZ	 	 	 	 	 	 	 	 	 	 	 d8d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(	 d9d#ed$eeef   dz  fd-Z)d#ed$e*fd.Z+	 d:d#ed/e,e*   d$eeef   fd0Z-d1efd2Z.d$efd3Z/d1efd4Z0d5efd6Z1y);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                  j                  t                | j
                  d| j                  | j                  | j                  | j                  d| y )N)r   r   r    r!    )
r   r   headersupdate
USER_AGENT	configurer   r   r    r!   )selfr%   kwargss      E/var/www/html/python/myenv/lib/python3.12/site-packages/garth/http.py__init__zClient.__init__!   sd    &GGI			  , 	
LLLL!22..		

 	
    proxies
ssl_verifyc                   ||| _         ||| _        |r|| _        |%| j                  j                  j                  |       ||| j                  _        ||| _        ||| _        ||| _	        |	|	| _
        |
|
| _        ||| _        t        | j                  | j                  | j                        }t        || j                  | j                        }| j                  j                  d|       y )N)totalr    r!   )max_retriesr"   r#   https://)r   r   r   r   r1   r)   verifyr   r   r    r!   r"   r#   r   r   mount)r,   r   r   r   r1   r2   r   r   r    r!   r"   r#   retryadapters                 r.   r+   zClient.configure,   s    # ,D# ,D DKII$$W-!)DII"DL"DL'$4D!%"0D'$4D!# ,D,,!22..

 !22**

 			
G,r0   c                     | j                   s7| j                  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^   sO    !!!%4"D d00$7 ,7 !!!r0   c                     | j                   S Nr@   r?   s    r.   profilezClient.profilei   s       r0   c                      | j                   d   S )NuserNamerC   r?   s    r.   usernamezClient.usernamem   s      ,,r0   Fapireferrerr(   method	subdomainpathreturnc                T   d| d| j                    }t        ||      }|du r%| j                  r| j                  j                  |d<   |rk| j                  sJ d       t        | j                  t              r| j                  j                  r| j                          t        | j                        |d<    | j                  j                  ||f|| j                  d|| _        	 | j                  j                          | j                  S # t        $ r}	t!        d|		      d }	~	ww xY w)
Nr6   .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,   rJ   rK   rL   rH   rI   r(   r-   rT   es
             r.   rX   zClient.requestq   s%    1T[[M2c4 t!%!3!3GI$$ ;$ t00+>$$,,##%'*4+<+<'=GO$***
 LL	

 
	NN++- ~~  	 & 	s   &D 	D'D""D'c                 .     | j                   dg|i |S )NGETrX   r,   argsr-   s      r.   getz
Client.get       t||E3D3F33r0   c                 .     | j                   dg|i |S )NPOSTr]   r^   s      r.   postzClient.post   s    t||F4T4V44r0   c                 .     | j                   dg|i |S )NDELETEr]   r^   s      r.   deletezClient.delete   s    t||H6t6v66r0   c                 .     | j                   dg|i |S )NPUTr]   r^   s      r.   putz
Client.put   ra   r0   c                 ~    t        j                  |i |d| i\  | _        | _        | j                  | j                  fS )Nclient)r   loginr   r   r^   s      r.   rm   zClient.login   sG    /2yy0
0
$(0
,4,   $"3"333r0   c                 v    t        j                  |i |\  | _        | _        | j                  | j                  fS rB   )r   resume_loginr   r   r^   s      r.   ro   zClient.resume_login   sA    /2/?/?0
0
,4,   $"3"333r0   c                     | j                   rt        | j                   t              sJ d       t        j                  | j                   |       | _        y )Nz+OAuth1 token is required for OAuth2 refresh)r   r=   r   r   exchanger   r?   s    r.   rV   zClient.refresh_oauth2   sJ      Z{&
 	98	9 

  LL):):DAr0   c                 p     | j                   |d|fddi|}|j                  dk(  ry |j                         S )Nr<   rH   T   )rX   status_codejson)r,   rL   rJ   r-   resps        r.   r<   zClient.connectapi   s?     t||FL$KDKFKs"yy{r0   c                 F     | j                   d|fddi|}|j                  S )Nr<   rH   T)r`   content)r,   rL   r-   rv   s       r.   downloadzClient.download   s(    txxd???||r0   fpc                    t         j                  j                  |j                        }d||fi}| j	                  |d|      }|J d       |S )Nfilerc   )rJ   fileszNo result from upload)osrL   basenamenamer<   )r,   rz   rL   fnamer}   results         r.   uploadzClient.upload   s_       )%% ! 

 !:#::!r0   dir_pathc                 H   t         j                  j                  |      }t        j                  |d       t	        t         j                  j                  |d      d      5 }| j                  r+t        j                  t        | j                        |d       d d d        t	        t         j                  j                  |d      d      5 }| j                  r+t        j                  t        | j                        |d       d d d        y # 1 sw Y   txY w# 1 sw Y   y xY w)NT)exist_okoauth1_token.jsonw   )indentoauth2_token.json)r~   rL   
expandusermakedirsopenjoinr   ru   dumpr   r   )r,   r   fs      r.   r   zClient.dump   s    77%%h/
Ht,"'',,x)<=sC 	Bq  		&!2!23QqA	B "'',,x)<=sC 	Bq  		&!2!23QqA	B 	B	B 	B	B 	Bs   !8D8DDD!c                 "   g }|j                  t        | j                               |j                  t        | j                               t	        j
                  |      }t        j                  |j                               j                         S rB   )
appendr   r   r   ru   dumpsbase64	b64encodeencodedecode)r,   rss      r.   r   zClient.dumps   sb    	))*+	))*+JJqM
+2244r0   c                    t         j                  j                  |      }t        t         j                  j	                  |d            5 }t        di t        j                  |      }d d d        t        t         j                  j	                  |d            5 }t        di t        j                  |      }d d d        | j                  |j                         y # 1 sw Y   xxY w# 1 sw Y   4xY w)Nr   r   r   r   r   r'   )r~   rL   r   r   r   r   ru   loadr   r+   r   )r,   r   r   oauth1oauth2s        r.   r   zClient.load   s    77%%h/"'',,x)<=> 	1! 0499Q<0F	1"'',,x)<=> 	1! 0499Q<0F	1fV]] 	 	
		1 	1	1 	1s   	CC+C(+C4r   c                     t        j                  t        j                  |            \  }}| j	                  t        di |t        di ||j                  d             y )Nr   r   r'   )ru   loadsr   	b64decoder+   r   r   r`   )r,   r   r   r   s       r.   r   zClient.loads   sR    F$4$4Q$78$.v.$.v.::h' 	 	
r0   rB   )NNNNNNNNNNN)r\   )z/upload-service/upload)2__name__
__module____qualname__r   __annotations__r
   r   rW   r   r   r   r   r   r>   r   r   intr   r    r   r!   floatr"   r#   r$   r   r/   boolr+   propertyr@   rD   rG   rX   r`   rd   rg   rj   rm   ro   rV   r<   bytesry   r   r   r   r   r   r   r'   r0   r.   r   r      s    
MFC>BL+ 44t;B8<L+S#X.5<GSGS(FeCHoFNEcL#+/M4S>D(/	
$ 	
 ,0+/!)-"&""37'+'+#'0- "D(0- "D(	0-
 d
0- c3h$&0- 4K0- t0- t0-  S/D00- 0- *0- Dj0-d " " ! ! - - $' ' *' '' ' 	' 
'R4h 45x 57 74h 444B !&	c3h$	S u 
 -E&)U)	c3hBS B5s 5
S 

s 
r0   r   )r   ru   r~   typingr   r   r   r   r   urllib.parser   requestsr	   r
   r   requests.adaptersr   r    r   auth_tokensr   r   excr   utilsr   r*   r   rl   r'   r0   r.   <module>r      sO      	 0 0   1 1 0  1   -.
a
 a
H 
r0   