U
    T³dT  ã                   @   s  d Z ddlmZ dZddlZddlm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	ƒ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	ƒZdS )"z_Errors for the library.

All exceptions defined by the library
should be defined in this file.
é    )Úabsolute_importz$jcgregorio@google.com (Joe Gregorio)N)Ú_helpersc                   @   s   e Zd ZdZdS )ÚErrorzBase error for this module.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r
   r
   ú:/tmp/pip-unpacked-wheel-huf2bctx/googleapiclient/errors.pyr      s   r   c                   @   sD   e Zd ZdZe d¡ddd„ƒZedd„ ƒZdd	„ Z	d
d„ Z
e
ZdS )Ú	HttpErrorz$HTTP data was invalid or unexpected.é   Nc                 C   s8   || _ t|tƒstdƒ‚|| _|| _d| _|  ¡ | _d S )NzHTTP content should be bytesÚ )	ÚrespÚ
isinstanceÚbytesÚ	TypeErrorÚcontentÚuriÚerror_detailsÚ_get_reasonÚreason)Úselfr   r   r   r
   r
   r   Ú__init__&   s    
zHttpError.__init__c                 C   s   | j jS )z6Return the HTTP status code from the response content.)r   Ústatus©r   r
   r
   r   Ústatus_code0   s    zHttpError.status_codec              
      s  | j j}zÌzt | j d¡¡‰ W n" tjk
rB   | j d¡‰ Y nX tˆ tƒr†ˆ d d }t	‡ fdd„dD ƒdƒ}|rÒˆ d | | _
nLtˆ tƒrÌtˆ ƒdkrÌˆ d }|d d }d	|d krÒ|d d	 | _
nˆ | _
W n tttfk
rî   Y nX |d
krüd}| ¡ S )z=Calculate the reason for the error from the response content.zutf-8ÚerrorÚmessagec                 3   s   | ]}|ˆ d  kr|V  qdS )r   Nr
   )Ú.0Úkw©Údatar
   r   Ú	<genexpr>A   s   þz(HttpError._get_reason.<locals>.<genexpr>)ZdetailÚdetailsÚerrorsr   r   r   r$   N)r   r   ÚjsonÚloadsr   ÚdecodeÚJSONDecodeErrorr   ÚdictÚnextr   ÚlistÚlenÚ
ValueErrorÚKeyErrorr   Ústrip)r   r   Zerror_detail_keywordZfirst_errorr
   r!   r   r   5   s6    

þú
zHttpError._get_reasonc                 C   sR   | j r d| jj| j| j| j f S | jr<d| jj| j| jf S d| jj| jf S d S )Nz><HttpError %s when requesting %s returned "%s". Details: "%s">z/<HttpError %s when requesting %s returned "%s">z<HttpError %s "%s">)r   r   r   r   r   r   r
   r
   r   Ú__repr__W   s    üýzHttpError.__repr__)N)r   r   r   r	   ÚutilÚ
positionalr   Úpropertyr   r   r1   Ú__str__r
   r
   r
   r   r   #   s   	
"r   c                   @   s   e Zd ZdZdS )ÚInvalidJsonErrorz&The JSON returned could not be parsed.Nr   r
   r
   r
   r   r6   k   s   r6   c                   @   s   e Zd ZdZdS )ÚUnknownFileTypez File type unknown or unexpected.Nr   r
   r
   r
   r   r7   q   s   r7   c                   @   s   e Zd ZdZdS )ÚUnknownLinkTypez Link type unknown or unexpected.Nr   r
   r
   r
   r   r8   w   s   r8   c                   @   s   e Zd ZdZdS )ÚUnknownApiNameOrVersionz)No API with that name and version exists.Nr   r
   r
   r
   r   r9   }   s   r9   c                   @   s   e Zd ZdZdS )ÚUnacceptableMimeTypeErrorz4That is an unacceptable mimetype for this operation.Nr   r
   r
   r
   r   r:   ƒ   s   r:   c                   @   s   e Zd ZdZdS )ÚMediaUploadSizeErrorz+Media is larger than the method can accept.Nr   r
   r
   r
   r   r;   ‰   s   r;   c                   @   s   e Zd ZdZdS )ÚResumableUploadErrorz'Error occurred during resumable upload.Nr   r
   r
   r
   r   r<      s   r<   c                   @   s   e Zd ZdZdS )ÚInvalidChunkSizeErrorz!The given chunksize is not valid.Nr   r
   r
   r
   r   r=   •   s   r=   c                   @   s   e Zd ZdZdS )ÚInvalidNotificationErrorz$The channel Notification is invalid.Nr   r
   r
   r
   r   r>   ›   s   r>   c                   @   s0   e Zd ZdZe d¡ddd„ƒZdd„ ZeZdS )	Ú
BatchErrorz'Error occurred during batch operations.é   Nc                 C   s   || _ || _|| _d S )N)r   r   r   )r   r   r   r   r
   r
   r   r   ¤   s    zBatchError.__init__c                 C   s2   t | jdd ƒd krd| j S d| jj| jf S d S )Nr   z<BatchError "%s">z<BatchError %s "%s">)Úgetattrr   r   r   r   r
   r
   r   r1   ª   s    
zBatchError.__repr__)NN)	r   r   r   r	   r2   r3   r   r1   r5   r
   r
   r
   r   r?   ¡   s
   r?   c                       s,   e Zd ZdZe d¡d‡ fdd„	ƒZ‡  ZS )ÚUnexpectedMethodErrorz;Exception raised by RequestMockBuilder on unexpected calls.é   Nc                    s   t t| ƒ d| ¡ dS )ú)Constructor for an UnexpectedMethodError.zReceived unexpected call %sN)ÚsuperrB   r   )r   ZmethodId©Ú	__class__r
   r   r   ¶   s    
ÿzUnexpectedMethodError.__init__)N)r   r   r   r	   r2   r3   r   Ú__classcell__r
   r
   rF   r   rB   ³   s   rB   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚUnexpectedBodyErrorz<Exception raised by RequestMockBuilder on unexpected bodies.c                    s   t t| ƒ d||f ¡ dS )rD   zExpected: [%s] - Provided: [%s]N)rE   rI   r   )r   ÚexpectedÚprovidedrF   r
   r   r   Á   s    

ÿzUnexpectedBodyError.__init__)r   r   r   r	   r   rH   r
   r
   rF   r   rI   ¾   s   rI   )r	   Ú
__future__r   Ú
__author__r&   Zgoogleapiclientr   r2   Ú	Exceptionr   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rB   rI   r
   r
   r
   r   Ú<module>   s$   H