U
    W+dE                     @   s  d Z ddlZddlZddlZddlmZ ddlmZm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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 d0d1 d1eZ!G d2d3 d3eZ"G d4d5 d5eZ#G d6d7 d7eZ$G d8d9 d9eZ%G d:d; d;eZ&G d<d= d=e&Z'G d>d? d?e&Z(G d@dA dAe)Z*G dBdC dCe)Z+G dDdE dEe)Z,G dFdG dGe)Z-G dHdI dIe)Z.G dJdK dKe)Z/G dLdM dMeZ0G dNdO dOe)Z1G dPdQ dQe)Z2G dRdS dSe)Z3G dTdU dUe)Z4G dVdW dWe)Z5dS )XzI
Exception classes - Subclassing allows you to check for specific errors
    N)handler)jsonStandardError)	ResultSetc                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )BotoClientErrorz9
    General Boto Client error (error accessing AWS)
    c                    s    t t| j|f|  || _d S N)superr   __init__reason)selfr
   args	__class__ 2/tmp/pip-unpacked-wheel-dlxw5sjy/boto/exception.pyr	   )   s    zBotoClientError.__init__c                 C   s
   d| j  S NzBotoClientError: %sr
   r   r   r   r   __repr__-   s    zBotoClientError.__repr__c                 C   s
   d| j  S r   r   r   r   r   r   __str__0   s    zBotoClientError.__str____name__
__module____qualname____doc__r	   r   r   __classcell__r   r   r   r   r   %   s   r   c                   @   s   e Zd ZdS )SDBPersistenceErrorNr   r   r   r   r   r   r   r   4   s   r   c                   @   s   e Zd ZdZdS )StoragePermissionsErrorzP
    Permissions error when accessing a bucket or key on a storage service.
    Nr   r   r   r   r   r   r   r   r   8   s   r   c                   @   s   e Zd ZdZdS )S3PermissionsErrorzA
    Permissions error when accessing a bucket or key on S3.
    Nr   r   r   r   r   r    ?   s   r    c                   @   s   e Zd ZdZdS )GSPermissionsErrorzA
    Permissions error when accessing a bucket or key on GS.
    Nr   r   r   r   r   r!   F   s   r!   c                       sZ   e Zd Zd fdd	Zdd Z fddZdd	 Zd
d Zdd Zdd Z	dd Z
  ZS )BotoServerErrorNc                    s  t t| j|||f|  || _|| _|p,d| _d | _d | _d | _d| _	d | _
t| jtrz| jd| _W n  tk
r   tjd Y nX | jrt| jdr| jdd | _d| jkr| jdi }|dd | _|dd | _	n| jd	d | _	nzt| | }|| j W n ttjjfk
r   zft| j}d|krR|d | _d|krd|d krx|d d | _d|d kr|d d | _	W n( ttfk
r   | j| _	d | _Y nX Y nX d S )
N zutf-8z!Unable to decode body from bytes!items	RequestIdErrorCodeMessagemessage)r   r"   r	   statusr
   body
request_id
error_codeZ_error_messager)   	box_usage
isinstancebytesdecodeUnicodeDecodeErrorbotologdebughasattrgetr   ZXmlHandlerWrapperparseString	TypeErrorxmlsaxSAXParseExceptionr   loads
ValueError)r   r*   r
   r+   r   errorhparsedr   r   r   r	   N   sL    




zBotoServerError.__init__c                 C   s$   |dkr| j S |dkr| jS td S )Nerror_messagecode)r)   r-   AttributeError)r   namer   r   r   __getattr__   s
    zBotoServerError.__getattr__c                    s&   |dkr|| _ ntt| || d S )NrB   )r)   r   r"   __setattr__)r   rE   valuer   r   r   rG      s    zBotoServerError.__setattr__c                 C   s   d| j j| j| j| jf S Nz%s: %s %s
%sr   r   r*   r
   r+   r   r   r   r   r      s
      zBotoServerError.__repr__c                 C   s   d| j j| j| j| jf S rI   rJ   r   r   r   r   r      s
      zBotoServerError.__str__c                 C   s   d S r   r   r   rE   attrs
connectionr   r   r   startElement   s    zBotoServerError.startElementc                 C   sB   |dkr|| _ n.|dkr || _n|dkr0|| _n|dkr>|| _d S )N)r%   	RequestIDr'   r(   ZBoxUsager,   r-   r)   r.   r   rE   rH   rM   r   r   r   
endElement   s    zBotoServerError.endElementc                 C   s   d | _ d | _d | _d | _d S r   rP   r   r   r   r   _cleanupParsedProperties   s    z(BotoServerError._cleanupParsedProperties)N)r   r   r   r	   rF   rG   r   r   rN   rR   rS   r   r   r   r   r   r"   M   s   ;r"   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	ConsoleOutputNc                 C   s"   || _ d | _d | _d | _d | _d S r   )parentinstance_id	timestampcommentoutput)r   rU   r   r   r   r	      s
    zConsoleOutput.__init__c                 C   s   d S r   r   rK   r   r   r   rN      s    zConsoleOutput.startElementc                 C   s6   |dkr|| _ n"|dkr&t|| _nt| || d S )NZ
instanceIdrY   )rV   base64	b64decoderY   setattrrQ   r   r   r   rR      s
    zConsoleOutput.endElement)Nr   r   r   r	   rN   rR   r   r   r   r   rT      s   
rT   c                       s.   e Zd ZdZd fdd	Z fddZ  ZS )StorageCreateErrorz>
    Error creating a bucket or key on a storage service.
    Nc                    s   d | _ tt| ||| d S r   )bucketr   r^   r	   r   r*   r
   r+   r   r   r   r	      s    zStorageCreateError.__init__c                    s(   |dkr|| _ ntt| |||S d S )NZ
BucketName)r_   r   r^   rR   rQ   r   r   r   rR      s    zStorageCreateError.endElement)N)r   r   r   r   r	   rR   r   r   r   r   r   r^      s   r^   c                   @   s   e Zd ZdZdS )S3CreateErrorz/
    Error creating a bucket or key on S3.
    Nr   r   r   r   r   ra      s   ra   c                   @   s   e Zd ZdZdS )GSCreateErrorz/
    Error creating a bucket or key on GS.
    Nr   r   r   r   r   rb      s   rb   c                   @   s   e Zd ZdZdS )StorageCopyErrorz3
    Error copying a key on a storage service.
    Nr   r   r   r   r   rc      s   rc   c                   @   s   e Zd ZdZdS )S3CopyErrorz$
    Error copying a key on S3.
    Nr   r   r   r   r   rd      s   rd   c                   @   s   e Zd ZdZdS )GSCopyErrorz$
    Error copying a key on GS.
    Nr   r   r   r   r   re      s   re   c                       sF   e Zd ZdZd fdd	Z fddZ fddZ fd	d
Z  ZS )SQSErrorz0
    General Error on Simple Queue Service.
    Nc                    s$   d | _ d | _tt| ||| d S r   )detailtyper   rf   r	   r`   r   r   r   r	      s    zSQSError.__init__c                    s   t t| |||S r   )r   rf   rN   rK   r   r   r   rN     s    zSQSError.startElementc                    s8   |dkr|| _ n$|dkr || _ntt| |||S d S )NZDetailType)rg   rh   r   rf   rR   rQ   r   r   r   rR     s
    zSQSError.endElementc                    s(   t t|   dD ]}t| |d  qd S )N)rg   rh   )r   rf   rS   r\   r   pr   r   r   rS     s    z!SQSError._cleanupParsedProperties)N	r   r   r   r   r	   rN   rR   rS   r   r   r   r   r   rf      s
   rf   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )SQSDecodeErrorz-
    Error when decoding an SQS message.
    c                    s   t t| || || _d S r   )r   rm   r	   r)   )r   r
   r)   r   r   r   r	     s    zSQSDecodeError.__init__c                 C   s
   d| j  S NzSQSDecodeError: %sr   r   r   r   r   r     s    zSQSDecodeError.__repr__c                 C   s
   d| j  S rn   r   r   r   r   r   r     s    zSQSDecodeError.__str__r   r   r   r   r   rm     s   rm   c                       sF   e Zd ZdZd fdd	Z fddZ fddZ fd	d
Z  ZS )StorageResponseErrorz3
    Error in response from a storage service.
    Nc                    s   d | _ tt| ||| d S r   )resourcer   ro   r	   r`   r   r   r   r	   &  s    zStorageResponseError.__init__c                    s   t t| |||S r   )r   ro   rN   rK   r   r   r   rN   *  s
    
  z!StorageResponseError.startElementc                    s(   |dkr|| _ ntt| |||S d S )NResource)rp   r   ro   rR   rQ   r   r   r   rR   .  s    
  zStorageResponseError.endElementc                    s(   t t|   dD ]}t| |d  qd S )Nrp   )r   ro   rS   r\   rj   r   r   r   rS   5  s    z-StorageResponseError._cleanupParsedProperties)Nrl   r   r   r   r   ro   "  s
   ro   c                   @   s   e Zd ZdZdS )S3ResponseErrorz$
    Error in response from S3.
    Nr   r   r   r   r   rr   ;  s   rr   c                   @   s   e Zd ZdZdS )GSResponseErrorz$
    Error in response from GS.
    Nr   r   r   r   r   rs   B  s   rs   c                       s>   e Zd ZdZd fdd	Zdd Zdd Z fd	d
Z  ZS )EC2ResponseErrorz%
    Error in response from EC2.
    Nc                    sR   d | _ g | _tt| ||| dd | jD | _ t| j rN| j d \| _| _d S )Nc                 S   s   g | ]}|j |jfqS r   r-   rB   ).0er   r   r   
<listcomp>Q  s    z-EC2ResponseError.__init__.<locals>.<listcomp>r   )errors_errorResultSetr   rt   r	   lenr-   rB   r`   r   r   r   r	   M  s    
zEC2ResponseError.__init__c                 C   s&   |dkrt dtfg| _| jS d S d S )NZErrorsr&   )r   	_EC2Errorrz   rK   r   r   r   rN   V  s    zEC2ResponseError.startElementc                 C   s   |dkr|| _ nd S d S )NrO   )r,   rQ   r   r   r   rR   ]  s    zEC2ResponseError.endElementc                    s.   t t|   g | _dD ]}t| |d  qd S )Nry   )r   rt   rS   rz   r\   rj   r   r   r   rS   c  s    z)EC2ResponseError._cleanupParsedProperties)Nrl   r   r   r   r   rt   I  s
   	rt   c                   @   s   e Zd ZdZdddZdS )JSONResponseErrora  
    This exception expects the fully parsed and decoded JSON response
    body to be passed as the body parameter.

    :ivar status: The HTTP status code.
    :ivar reason: The HTTP reason message.
    :ivar body: The Python dict that represents the decoded JSON
        response body.
    :ivar error_message: The full description of the AWS error encountered.
    :ivar error_code: A short string that identifies the AWS error
        (e.g. ConditionalCheckFailedException)
    Nc                 G   sT   || _ || _|| _| jrP| jdd | _| jdd | _| jrP| jdd | _d S )Nr)   Z__type#)r*   r
   r+   r7   rB   r-   split)r   r*   r
   r+   r   r   r   r   r	   w  s    zJSONResponseError.__init__)N)r   r   r   r   r	   r   r   r   r   r}   j  s   r}   c                   @   s   e Zd ZdS )DynamoDBResponseErrorNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )SWFResponseErrorNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )EmrResponseErrorz$
    Error in response from EMR
    Nr   r   r   r   r   r     s   r   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	r|   Nc                 C   s   || _ d | _d | _d S r   )rM   r-   rB   )r   rM   r   r   r   r	     s    z_EC2Error.__init__c                 C   s   d S r   r   rK   r   r   r   rN     s    z_EC2Error.startElementc                 C   s(   |dkr|| _ n|dkr || _nd S d S )Nr'   r(   ru   rQ   r   r   r   rR     s
    z_EC2Error.endElement)Nr]   r   r   r   r   r|     s   
r|   c                   @   s   e Zd ZdZdS )SDBResponseErrorz&
    Error in responses from SDB.
    Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )AWSConnectionErrorz:
    General error connecting to Amazon Web Services.
    Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )StorageDataErrorz6
    Error receiving data from a storage service.
    Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )S3DataErrorz'
    Error receiving data from S3.
    Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )GSDataErrorz'
    Error receiving data from GS.
    Nr   r   r   r   r   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )InvalidUriErrorz%Exception raised when URI is invalid.c                    s   t t| | || _d S r   )r   r   r	   r)   r   r)   r   r   r   r	     s    zInvalidUriError.__init__r   r   r   r   r	   r   r   r   r   r   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )InvalidAclErrorz)Exception raised when ACL XML is invalid.c                    s   t t| | || _d S r   )r   r   r	   r)   r   r   r   r   r	     s    zInvalidAclError.__init__r   r   r   r   r   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )InvalidCorsErrorz*Exception raised when CORS XML is invalid.c                    s   t t| | || _d S r   )r   r   r	   r)   r   r   r   r   r	     s    zInvalidCorsError.__init__r   r   r   r   r   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )InvalidEncryptionConfigErrorzBException raised when GCS encryption configuration XML is invalid.c                    s   t t| | || _d S r   )r   r   r	   r)   r   r   r   r   r	     s    z%InvalidEncryptionConfigError.__init__r   r   r   r   r   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )InvalidLifecycleConfigErrorzAException raised when GCS lifecycle configuration XML is invalid.c                    s   t t| | || _d S r   )r   r   r	   r)   r   r   r   r   r	     s    z$InvalidLifecycleConfigError.__init__r   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )NoAuthHandlerFoundzAIs raised when no auth handlers were found ready to authenticate.Nr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdZdZdZdS )ResumableTransferDisposition
START_OVERWAIT_BEFORE_RETRYABORT_CUR_PROCESSABORTN)r   r   r   r   r   r   r   r   r   r   r   r     s   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )ResumableUploadExceptionz
    Exception raised for various resumable upload problems.

    self.disposition is of type ResumableTransferDisposition.
    c                    s"   t t| || || _|| _d S r   )r   r   r	   r)   dispositionr   r)   r   r   r   r   r	     s    z!ResumableUploadException.__init__c                 C   s   d| j | jf S )Nz"ResumableUploadException("%s", %s)r)   r   r   r   r   r   r     s     z!ResumableUploadException.__repr__r   r   r   r   r	   r   r   r   r   r   r   r     s   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )ResumableDownloadExceptionz
    Exception raised for various resumable download problems.

    self.disposition is of type ResumableTransferDisposition.
    c                    s"   t t| || || _|| _d S r   )r   r   r	   r)   r   r   r   r   r   r	   $  s    z#ResumableDownloadException.__init__c                 C   s   d| j | jf S )Nz$ResumableDownloadException("%s", %s)r   r   r   r   r   r   )  s     z#ResumableDownloadException.__repr__r   r   r   r   r   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )TooManyRecordsExceptionzd
    Exception raised when a search of Route53 records returns more
    records than requested.
    c                    s   t t| | || _d S r   )r   r   r	   r)   r   r   r   r   r	   4  s    z TooManyRecordsException.__init__r   r   r   r   r   r   .  s   r   c                   @   s"   e Zd ZdZdddZdd ZdS )PleaseRetryExceptionz0
    Indicates a request should be retried.
    Nc                 C   s   || _ || _d S r   r)   response)r   r)   r   r   r   r   r	   =  s    zPleaseRetryException.__init__c                 C   s   d| j | jf S )NzPleaseRetryException("%s", %s)r   r   r   r   r   r   A  s    zPleaseRetryException.__repr__)N)r   r   r   r   r	   r   r   r   r   r   r   9  s   
r   c                       s    e Zd ZdZ fddZ  ZS )InvalidInstanceMetadataErrorzYou can set the 'metadata_service_num_attempts' in your boto config file to increase the number of times boto will attempt to retrieve credentials from the instance metadata service.c                    s"   |d | j  }tt| | d S )N
)MSGr   r   r	   )r   msgZ	final_msgr   r   r   r	   O  s    z%InvalidInstanceMetadataError.__init__)r   r   r   r   r	   r   r   r   r   r   r   H  s   r   )6r   rZ   Zxml.saxr:   r3   r   Zboto.compatr   r   Zboto.resultsetr   r   r   r   r    r!   r"   objectrT   r^   ra   rb   rc   rd   re   rf   rm   ro   rr   rs   rt   r}   r   r   r   r|   r   r   r   r   r   	Exceptionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s^   f!