o
    Ďi                     @   sf   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 d dl	m
Z
mZmZmZ G dd dZdS )    N)datetime	timedeltatimezone)KaggleClient)IntrospectTokenRequest)
ApiVersionGenerateAccessTokenRequestGenerateAccessTokenResponseExpireApiTokenRequestc                   @   s   e Zd ZdZeddZ					d%dedededed	ed
e	e fddZ
ed&dededd fddZefd'ddZefd'ddZdefddZd'ddZdefddZdefddZd&dedefddZd eddfd!d"Zdefd#d$ZdS )(KaggleCredentialsz~/.kaggle/credentials.json   )hoursNclientrefresh_tokenaccess_tokenaccess_token_expirationusernamescopesc                 C   s:   || _ || _|| _|| _|| _|d ur|| _d S g | _d S N)_client_refresh_token_access_token_access_token_expiration	_username_scopes)selfr   r   r   r   r   r    r   R/home/jeff/fluffinator/venv/lib/python3.10/site-packages/kagglesdk/kaggle_creds.py__init__   s   	zKaggleCredentials.__init__	file_pathreturnc              	   C   s   t j|ptj}t j|sd S zt|d}t|}W d    n1 s'w   Y  W n tj	t
fy:   Y d S w |d}|sDd S |d}|rQt|}nd }| |||d||d|ddS )Nrr   r   r   r   r   )r   r   r   r   r   r   )ospath
expanduserr   DEFAULT_CREDENTIALS_FILEexistsopenjsonloadJSONDecodeErrorKeyErrorgetr   fromisoformat)clsr   r   fdatar   r   r   r   r   r)   "   s4   

zKaggleCredentials.loadc                 C   s*   t j|}t j|rt | d S d S r   )r"   r#   r$   r&   remove)r   r   r   r   r   deleteA   s   zKaggleCredentials.deletec                 C   s   | j stdtj|}tj|}tj|st| | j | jp$d| j	r,| j	
 nd| jp1d| jp5g d}t|d}tj||dd W d    n1 sPw   Y  z	t|d W d S  tyh   Y d S w )NMissing refresh token )r   r   r   r   r   w   )indenti  )r   	Exceptionr"   r#   r$   dirnamer&   makedirsr   r   	isoformatr   r   r'   r(   dumpchmodOSError)r   r   dir_namer0   r/   r   r   r   saveF   s(   

zKaggleCredentials.savec                 C   s@   t  }| j|_| jjj|}|jr|jst	d|j| _
|jS )NzAuthentication failed.)r   r   tokenr   securityoauth_clientintrospect_tokenactiver   r8   r   )r   requestresponser   r   r   
introspecta   s   zKaggleCredentials.introspectc                 C   sD   | j std|  }ttjt|jd | _	|j
| _|   d S )Nr3   )seconds)r   r8   generate_access_tokenr   nowr   utcr   
expires_inr   rA   r   r@   )r   rG   r   r   r   refresh_access_tokenl   s   z&KaggleCredentials.refresh_access_tokenc                 C   s$   | j  p| j ttjtdd k S )N   )minutes)r   r   rK   r   rL   r   r   r   r   r   access_token_has_expiredu   s
   z*KaggleCredentials.access_token_has_expiredc                 C   s&   | j r|  r| jsd S |   | j S r   )r   rR   r   rN   rQ   r   r   r   get_access_tokenz   s
   z"KaggleCredentials.get_access_tokenexpiration_durationc                 C   s<   | j sd S t }| j |_tj|_|ptj|_| j	j
j|S r   )r   r   r   r   API_VERSION_V1api_versionr   DEFAULT_ACCESS_TOKEN_EXPIRATIONrT   r   usersaccount_clientrJ   )r   rT   rF   r   r   r   rJ      s   z'KaggleCredentials.generate_access_tokenreasonc                 C   s:   | j sd S t }| j |_||_| jjj| |   d S r   )	r   r
   rA   rZ   r   rX   rY   expire_api_tokenr2   )r   rZ   rF   r   r   r   revoke_token   s   zKaggleCredentials.revoke_tokenc                 C   s   | j S r   )r   rQ   r   r   r   get_username   s   zKaggleCredentials.get_username)NNNNNr   )r    N)__name__
__module____qualname__r%   r   rW   r   strr   listr   classmethodr)   r2   r@   rH   rN   boolrR   rS   r	   rJ   r\   r]   r   r   r   r   r      s@    


			r   )r(   r"   r   r   r   kagglesdk.kaggle_clientr   &kagglesdk.security.types.oauth_servicer   %kagglesdk.users.types.account_servicer   r   r	   r
   r   r   r   r   r   <module>   s    