o
    ̳i                     @   sv  d dl Z d dlm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 d dlmZ ede	d	Ze eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd dejZG dd dejZG dd deZG dd deZd(deg ef dedB d efd!d"Zd(d#ej dedB d dfd$d%Z!deg ef d efd&d'Z"dS ))    N)Callable)
HTTPStatus)TypeVar)KaggleObject)CompetitionHandleResourceHandle)EXTRA_CONSOLE_BLOCKR)boundc                   @      e Zd ZdS )CredentialErrorN__name__
__module____qualname__ r   r   H/home/ubuntu/.local/lib/python3.10/site-packages/kagglehub/exceptions.pyr          r   c                   @   r   )KaggleEnvironmentErrorNr   r   r   r   r   r      r   r   c                   @   r   )ColabEnvironmentErrorNr   r   r   r   r   r      r   r   c                       s0   e Zd ZddededB ddf fddZ  ZS )BackendErrorNmessage
error_codereturnc                    s   || _ t | d S N)r   super__init__)selfr   r   	__class__r   r   r      s   zBackendError.__init__r   )r   r   r   strintr   __classcell__r   r   r   r   r      s    (r   c                   @   r   )NotFoundErrorNr   r   r   r   r   r#   #   r   r#   c                   @   r   )DataCorruptionErrorNr   r   r   r   r   r$   '   r   r$   c                       2   e Zd ZddedejdB ddf fddZ  ZS )KaggleApiHTTPErrorNr   responser   c                       t  j||d d S Nr'   r   r   r   r   r'   r   r   r   r   ,      zKaggleApiHTTPError.__init__r   r   r   r   r    requestsResponser   r"   r   r   r   r   r&   +       *r&   c                       r%   )ColabHTTPErrorNr   r'   r   c                    r(   r)   r+   r,   r   r   r   r   1   r-   zColabHTTPError.__init__r   r.   r   r   r   r   r2   0   r1   r2   c                       s,   e Zd ZdZddeddf fddZ  ZS )	UnauthenticatedErrorz:Exception raised for errors in the authentication process.User is not authenticatedr   r   Nc                    s   t  | d S r   r+   )r   r   r   r   r   r   8   s   zUnauthenticatedError.__init__)r4   )r   r   r   __doc__r    r   r"   r   r   r   r   r3   5   s     r3   c                   @   r   )UserCancelledErrorNr   r   r   r   r   r6   <   r   r6   fnresource_handler   c                 C   s6  z|  W S  t jy } zt|}d}z|jr|jnd}|r$d| d}W n  t jjyE } ztjd| i td W Y d}~nd}~ww |rL|	 n|j
j}|j
jtjtjhv rzt|trm|j
j d| d| d	}n|j
j d| d
| d}|j
jtjkr|j
j d| d| d}t||j
d|d}~ww )zCHandle errors for handler NOT returning 200 status code on failure. z*The server reported the following issues: 
z Server payload is not json. See )extraNE Client Error.

You don't have permission to access resource at URL: zu
Please make sure you are authenticated and have accepted the competition rules which can be found at this location: z/rulesz. zvPlease make sure you are authenticated if you are trying to access a private resource or a resource requiring consent.z+ Client Error.

Resource not found at URL: z@Please make sure you specified the correct resource identifiers.r*   )r/   	HTTPErrorr    strerror
exceptionsJSONDecodeErrorloggerinfor   to_urlr'   urlstatus_coder   UNAUTHORIZED	FORBIDDEN
isinstancer   	NOT_FOUNDr&   )r7   r8   er   server_error_messageexresource_urlr   r   r   handle_call@   sN   $


		
	rN   r'   c              
   C   sv   z|    W dS  tjy: } z&t|}|r| n| j}| jtjtj	hv r/| j d| d}t
|| d|d}~ww )z
    Wrapper around `response.raise_for_status()` that provides nicer error messages
    See: https://requests.readthedocs.io/en/latest/api/#requests.Response.raise_for_status
    r<   zw
Please make sure you are authenticated if you are trying to access a private resource or a resource requiring consent.r*   N)raise_for_statusr/   r=   r    rC   rD   rE   r   rF   rG   r2   )r'   r8   rJ   r   rM   r   r   r   colab_raise_for_statusn   s   rP   c                 C   sz   |    }d|dd  krdk sn |dd}t|d|v r;|d dkr;d|v r2t|d nd	}t|d ||S )
aD  
    Handle errors for handlers returning 200 status code & an error message in the body on failure.

    These are mostly create & update handlers. E.g.: https://github.com/Kaggle/kaggleazure/blob/be355335448271845fc460a6e153f2cd4b030fec/Kaggle.Services.Models/Handlers/ModelApiService/V1/DeleteModelHandler.cs#L29-L31
       codei,  r   zNo error message providederrorr9   	errorCodeN)to_dictgetr   r!   )r7   r'   error_messager   r   r   r   handle_mutate_call   s   
rX   r   )#loggingcollections.abcr   httpr   typingr   r/   kagglesdk.kaggle_objectr   kagglehub.handler   r   kagglehub.loggerr   r	   	getLoggerr   rA   	Exceptionr   r   r   r   r#   r$   r=   r&   r2   r3   r6   rN   r0   rP   rX   r   r   r   r   <module>   s.    
$.