
    mi?&                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
Z
d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
 Zd Z G d de          ZdS )    N)BytesIO)Path)RequestField)get_endpointget_envget_access_token_from_env	KaggleEnv)KaggleObject)FileDownload)HttpRedirect)Typec                 d    d                     d |                                 D                       S )N
c              3   *   K   | ]\  }}| d | V  dS )z: N ).0kvs      t/var/www/html/bestrading.cuttalo.com/scripts/kaggle-env/lib/python3.11/site-packages/kagglesdk/kaggle_http_client.py	<genexpr>z"_headers_to_str.<locals>.<genexpr>   s0      ==TQ[[Q[[======    )joinitems)headerss    r   _headers_to_strr      s+    99==W]]__======r   c                  |   t           j                            d          } t           j                            |           sd S d }t	          |           5 }|                                }d d d            n# 1 swxY w Y   |r|                                sd S t          j        |          }|d         }|d         }||fS )Nz~/.kaggle/kaggle.jsonusernamekey)	ospath
expanduserexistsopenreadstripjsonloads)apikey_filenamekaggle_jsonapikey_fileapi_key_datar   api_keys         r   _get_apikey_credsr-   !   s    g(()@AAO7>>/** tK	o		 )+!&&(() ) ) ) ) ) ) ) ) ) ) ) ) ) )  k//11 t:k**LJ'H5!GWs   A33A7:A7c                   R   e Zd ZdZdZeefZdZ	 	 	 	 	 	 	 d,deded	e	d
e	de	de	fdZ
de	de	dedee         fdZde	de	defdZd Zd Zd-dZde	fdZd Zd Zd Zd Zd Zde	d e	d!ee	         d"e	d#e	d$e	fd%Zd$e	fd&Zd$e	fd'Z G d( d)ej        j                  Zd* Z de	de	fd+Z!dS ).KaggleHttpClientz
XSRF-TOKENz
CSRF-TOKENzX-XSRF-TOKENNFkaggle-api/v1.7.0envverboser   password	api_token
user_agentc                     |pt                      | _        d | _        t          | j                  | _        || _        d | _        || _        || _        || _	        || _
        || _        d S N)r   _env
_signed_inr   	_endpoint_verbose_session	_username	_password
_api_token_user_agent_response_processor)selfr1   r2   r   r3   r4   r5   response_processors           r   __init__zKaggleHttpClient.__init__9   se     $799	%di00!!#%#5   r   service_namerequest_namerequestresponse_typec                 .   |                                   |                     |||          }| j                            |j        i d d d           }||t
          k    s|t          k    rd|d<    | j        j        |fi |}|                     ||          }|S )NTstream)	_init_session_prepare_requestr<   merge_environment_settingsurlr   r   send_prepare_response)	rB   rE   rF   rG   rH   http_requestsettingshttp_responseresponses	            r   callzKaggleHttpClient.callN   s     	,,\<QQ =;;L<LbRVX\^bcc $-<*G*G=\hKhKh!%HX**<DD8DD))-GGr   c                    |                      ||          }t          j        d||j                            |          | j        j        | j        j                  }|                                }| 	                    |           |S )NPOST)methodrN   r&   r   auth)
_get_request_urlrequestsRequest	__class__to_dictr<   r   rY   prepare_print_request)rB   rE   rF   rG   request_urlrQ   prepared_requests          r   rL   z!KaggleHttpClient._prepare_requeste   s    ++L,GG'"**733M)#
 
 
 (//11,---r   c                    |                      |           	 d|j        d         v rK|                                }d|v r3|d         dk    r't          j                            |d         |          n# t          $ r Y nw xY w|                                 | j        r|                     |           |dS |	                    |          S )zEExtract the kaggle response and raise an exception if it is an error.application/jsonContent-Typecodei  message)rT   N)
_print_responser   r&   r[   
exceptions	HTTPErrorKeyErrorraise_for_statusrA   prepare_from)rB   rH   rS   resps       r   rP   z"KaggleHttpClient._prepare_responser   s    ]+++	!]%:>%JJJ$))++T>>d6lc&9&9"-77YR_7``` 	 	 	D	&&(((# 	4$$]333 4))-888s   AA2 2
A?>A?c           	          | j         sd S |                     d           |                     |j         d|j         dt	          |j                   d|j                    |                     d           d S )Nz2---------------------Request---------------------- r   z

2--------------------------------------------------)r;   _printrX   rN   r   r   body)rB   rG   s     r   r`   zKaggleHttpClient._print_request   s    } 	FHIIIw~kkkkw7W7Wkk]d]ikklllHIIIIIr   Tc                    | j         sd S |                     d           |                     |j         dt          |j                              |r|                     d|j                    |                     d           d S )Nz2---------------------Response---------------------r   rq   )r;   rr   status_coder   r   text)rB   rT   rs   s      r   rh   z KaggleHttpClient._print_response   s    } 	FHIIIx+RRx?O/P/PRRSSS 	.KK,X],,---HIIIIIr   rg   c                 6    | j         rt          |           d S d S r7   )r;   print)rB   rg   s     r   rr   zKaggleHttpClient._print   s%    = 	'NNNNN	 	r   c                 .    |                                   | S r7   )rK   rB   s    r   	__enter__zKaggleHttpClient.__enter__   s    r   c                 J    | j         | j                                          d S d S r7   )r<   close)rB   exc_type	exc_valuetbs       r   __exit__zKaggleHttpClient.__exit__   s,    =$M!!!!! %$r   c                 <   | j         | j         S t          j                    | _         | j         j                            | j        dd           |                                 }|$| j         j                            dd| i           |                                  d S )Nrd   )z
User-Agentre   zProxy-AuthorizationBearer )r<   r[   Sessionr   updater@   _get_iap_token_if_required_try_fill_authrB   	iap_tokens     r   rK   zKaggleHttpClient._init_session   s    =$=  (**$$D4DVh%i%ijjj3355	 M!(( *+@Y+@+@   	r   c                     | j         t          j        t          j        fvrd S t	          j        d          }|t          d| j         d          |S )NKAGGLE_IAP_TOKENz%Must set KAGGLE_IAP_TOKEN to access "")r8   r	   STAGINGADMINr   getenv	Exceptionr:   r   s     r   r   z+KaggleHttpClient._get_iap_token_if_required   sV    9Y.	@@@4I011	UDNUUUVVVr   c                 "   t          j        d| j        | j        j        | j        j                  }|                                }|                     |           | j                            |          }| 	                    |d           |(|j
        dv rt           j                            d          |                                 | j        j                            t          j        | j        j        t          j                 i           d S )NGET)rX   rN   r   rY   F)rs   )i  i  zIAP token invalid or expired)r[   r\   r:   r<   r   rY   r_   r`   rO   rh   ru   ri   rj   rl   r   r/   _xsrf_header_namecookies_xsrf_cookie_name)rB   r   initial_get_requestrb   rS   s        r   _fill_xsrf_tokenz!KaggleHttpClient._fill_xsrf_token   s	   &.M)#	
 
 
 /6688,---**+;<<]777 ]%>*%L%L%//0NOOO&&((($$ 2DM4IJZJl4m	
 	
 	
 	
 	
r   	client_idredirect_uriscopestatecode_challengereturnc           
          d||d                     |          ||dddd	}|                                  d}t          j                            |t          j        j                  }| d| S )	Nrf   rp   S256query)	rH   r   r   r   r   r   code_challenge_methodrH   response_modez/api/v1/oauth2/authorize)	quote_via?)r   get_non_api_endpointurllibparse	urlencode
quote_plus)	rB   r   r   r   r   r   paramsauth_urlquery_strings	            r   build_start_oauth_urlz&KaggleHttpClient.build_start_oauth_url   s     $"(XXe__,%+#$

 

 //11KKK|--f@W-XX++\+++r   c                 0    |                                   dS )Nz/account/api/oauth/token)r   rz   s    r   get_oauth_default_redirect_urlz/KaggleHttpClient.get_oauth_default_redirect_url   s    ++--GGGGr   c                 >    | j         t          j        k    rdn| j        S )Nzhttps://www.kaggle.comr8   r	   PRODr:   rz   s    r   r   z%KaggleHttpClient.get_non_api_endpoint   s    +/9	+F+F''DNZr   c                       e Zd Zd Zd ZdS )KaggleHttpClient.BearerAuthc                     || _         d S r7   )token)rB   r   s     r   rD   z$KaggleHttpClient.BearerAuth.__init__   s    DJJJr   c                 *    d| j          |j        d<   |S )Nr   Authorization)r   r   )rB   rs     r   __call__z$KaggleHttpClient.BearerAuth.__call__   s    )?4:)?)?AIo&Hr   N)__name__
__module____qualname__rD   r   r   r   r   
BearerAuthr      s2        	 	 		 	 	 	 	r   r   c                 Z   | j         d S | j        t                      \  }}|| _        | j        2t                              | j                  | j        _        d| _         d S | j        r| j        r| j        | j        f}nt                      }||| j        _        d| _         d S d| _         d S )NTF)
r9   r?   r   r/   r   r<   rY   r=   r>   r-   )rB   r4   _apikey_credss       r   r   zKaggleHttpClient._try_fill_auth   s    ?&F?"688NY'DO?&!1!<!<T_!M!MDM"DOF> 	/dn 	/>4>9LL,..L#!-DM"DOFr   c                 b    | j         t          j        k    r| j        n	| j         d}| d| d| S )Nz/apiz/v1//r   )rB   rE   rF   base_urls       r   rZ   z!KaggleHttpClient._get_request_url  sD     &*Y).%@%@4>>F]F]F]====|===r   )NFNNNr0   N)T)"r   r   r   r   _csrf_cookie_name_xsrf_cookiesr   r	   boolstrrD   r
   r   rU   rL   rP   r`   rh   rr   r{   r   rK   r   r   listr   r   r   r[   rY   AuthBaser   r   rZ   r   r   r   r/   r/   3   s       $$&(9:M& -6 66 6 	6
 6 6 6 6 6 6*  	
 L)   . S    l        9 9 9$J J JJ J J Jc      " " "  &  
 
 
.,, , Cy	,
 , , 
, , , ,.H H H H H[c [ [ [ [    X]+        0>S > > > > > > >r   r/   )binasciicodecsr&   r   urllib.parser   ior   pathlibr   r[   urllib3.fieldsr   kagglesdk.kaggle_envr   r   r   r	   kagglesdk.kaggle_objectr
   $kagglesdk.common.types.file_downloadr   $kagglesdk.common.types.http_redirectr   typingr   r   r-   objectr/   r   r   r   <module>r      sV      				                  ' ' ' ' ' '            1 0 0 0 0 0 = = = = = = = = = = = =      > > >  $a> a> a> a> a>v a> a> a> a> a>r   