B
    zkF[E                 @   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__ -lib/python3.7/site-packages/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 )NzBotoClientError: %s)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.
    N)r   r   r   r   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.
    N)r   r   r   r   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ry| 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 | _	nyt| | }|| j W n ttjjfk
r   yft| 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XmlHandlerWrapperZparseString	TypeErrorxmlZsaxZSAXParseExceptionr   loads
ValueError)r
   r"   r	   r#   r   errorhZparsed)r   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 )Nr6   )r!   r   r   __setattr__)r
   r9   value)r   r   r   r;      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 )Nz%s: %s %s
%s)r   r   r"   r	   r#   )r
   r   r   r   r      s    zBotoServerError.__str__c             C   s   d S )Nr   )r
   r9   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
   r9   r<   r>   r   r   r   
endElement   s    zBotoServerError.endElementc             C   s   d | _ d | _d | _d | _d S )N)r$   r%   r!   r&   )r
   r   r   r   _cleanupParsedProperties   s    z(BotoServerError._cleanupParsedProperties)N)r   r   r   r   r:   r;   r   r   r?   rA   rB   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 )N)parentinstance_idZ	timestampcommentoutput)r
   rD   r   r   r   r      s
    zConsoleOutput.__init__c             C   s   d S )Nr   )r
   r9   r=   r>   r   r   r   r?      s    zConsoleOutput.startElementc             C   s6   |dkr|| _ n"|dkr&t|| _nt| || d S )NZ
instanceIdrG   )rE   base64Z	b64decoderG   setattr)r
   r9   r<   r>   r   r   r   rA      s
    zConsoleOutput.endElement)N)r   r   r   r   r?   rA   r   r   r   r   rC      s   
rC   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 )N)bucketr   rJ   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)rK   r   rJ   rA   )r
   r9   r<   r>   )r   r   r   rA      s    zStorageCreateError.endElement)N)r   r   r   r   r   rA   r   r   r   )r   r   rJ      s   rJ   c               @   s   e Zd ZdZdS )S3CreateErrorz/
    Error creating a bucket or key on S3.
    N)r   r   r   r   r   r   r   r   rL      s   rL   c               @   s   e Zd ZdZdS )GSCreateErrorz/
    Error creating a bucket or key on GS.
    N)r   r   r   r   r   r   r   r   rM      s   rM   c               @   s   e Zd ZdZdS )StorageCopyErrorz3
    Error copying a key on a storage service.
    N)r   r   r   r   r   r   r   r   rN      s   rN   c               @   s   e Zd ZdZdS )S3CopyErrorz$
    Error copying a key on S3.
    N)r   r   r   r   r   r   r   r   rO      s   rO   c               @   s   e Zd ZdZdS )GSCopyErrorz$
    Error copying a key on GS.
    N)r   r   r   r   r   r   r   r   rP      s   rP   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 )N)detailtyper   rQ   r   )r
   r"   r	   r#   )r   r   r   r      s    zSQSError.__init__c                s   t t| |||S )N)r   rQ   r?   )r
   r9   r=   r>   )r   r   r   r?     s    zSQSError.startElementc                s8   |dkr|| _ n$|dkr || _ntt| |||S d S )NZDetailZType)rR   rS   r   rQ   rA   )r
   r9   r<   r>   )r   r   r   rA     s
    zSQSError.endElementc                s,   t t|   xdD ]}t| |d  qW d S )N)rR   rS   )r   rQ   rB   rI   )r
   p)r   r   r   rB     s    
z!SQSError._cleanupParsedProperties)N)	r   r   r   r   r   r?   rA   rB   r   r   r   )r   r   rQ      s
   rQ   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 )N)r   rU   r   r!   )r
   r	   r!   )r   r   r   r     s    zSQSDecodeError.__init__c             C   s
   d| j  S )NzSQSDecodeError: %s)r	   )r
   r   r   r   r     s    zSQSDecodeError.__repr__c             C   s
   d| j  S )NzSQSDecodeError: %s)r	   )r
   r   r   r   r     s    zSQSDecodeError.__str__)r   r   r   r   r   r   r   r   r   r   )r   r   rU     s   rU   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 )N)resourcer   rV   r   )r
   r"   r	   r#   )r   r   r   r   &  s    zStorageResponseError.__init__c                s   t t| |||S )N)r   rV   r?   )r
   r9   r=   r>   )r   r   r   r?   *  s    
z!StorageResponseError.startElementc                s(   |dkr|| _ ntt| |||S d S )NZResource)rW   r   rV   rA   )r
   r9   r<   r>   )r   r   r   rA   .  s    
zStorageResponseError.endElementc                s,   t t|   xdD ]}t| |d  qW d S )NrW   )r   rV   rB   rI   )r
   rT   )r   r   r   rB   5  s    
z-StorageResponseError._cleanupParsedProperties)N)	r   r   r   r   r   r?   rA   rB   r   r   r   )r   r   rV   "  s
   rV   c               @   s   e Zd ZdZdS )S3ResponseErrorz$
    Error in response from S3.
    N)r   r   r   r   r   r   r   r   rX   ;  s   rX   c               @   s   e Zd ZdZdS )GSResponseErrorz$
    Error in response from GS.
    N)r   r   r   r   r   r   r   r   rY   B  s   rY   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%   r6   ).0er   r   r   
<listcomp>R  s    z-EC2ResponseError.__init__.<locals>.<listcomp>r   )errors_errorResultSetr   rZ   r   lenr%   r6   )r
   r"   r	   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   	_EC2Errorr_   )r
   r9   r=   r>   r   r   r   r?   V  s    zEC2ResponseError.startElementc             C   s   |dkr|| _ nd S d S )Nr@   )r$   )r
   r9   r<   r>   r   r   r   rA   ]  s    zEC2ResponseError.endElementc                s2   t t|   g | _xdD ]}t| |d  qW d S )Nr^   )r   rZ   rB   r_   rI   )r
   rT   )r   r   r   rB   c  s    
z)EC2ResponseError._cleanupParsedProperties)N)	r   r   r   r   r   r?   rA   rB   r   r   r   )r   r   rZ   I  s
   	rZ   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#   r/   r6   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   rb   j  s   rb   c               @   s   e Zd ZdS )DynamoDBResponseErrorN)r   r   r   r   r   r   r   rf     s   rf   c               @   s   e Zd ZdS )SWFResponseErrorN)r   r   r   r   r   r   r   rg     s   rg   c               @   s   e Zd ZdZdS )EmrResponseErrorz$
    Error in response from EMR
    N)r   r   r   r   r   r   r   r   rh     s   rh   c               @   s&   e Zd ZdddZdd Zdd ZdS )	ra   Nc             C   s   || _ d | _d | _d S )N)r>   r%   r6   )r
   r>   r   r   r   r     s    z_EC2Error.__init__c             C   s   d S )Nr   )r
   r9   r=   r>   r   r   r   r?     s    z_EC2Error.startElementc             C   s(   |dkr|| _ n|dkr || _nd S d S )Nr   r    )r%   r6   )r
   r9   r<   r>   r   r   r   rA     s
    z_EC2Error.endElement)N)r   r   r   r   r?   rA   r   r   r   r   ra     s   
ra   c               @   s   e Zd ZdZdS )SDBResponseErrorz&
    Error in responses from SDB.
    N)r   r   r   r   r   r   r   r   ri     s   ri   c               @   s   e Zd ZdZdS )AWSConnectionErrorz:
    General error connecting to Amazon Web Services.
    N)r   r   r   r   r   r   r   r   rj     s   rj   c               @   s   e Zd ZdZdS )StorageDataErrorz6
    Error receiving data from a storage service.
    N)r   r   r   r   r   r   r   r   rk     s   rk   c               @   s   e Zd ZdZdS )S3DataErrorz'
    Error receiving data from S3.
    N)r   r   r   r   r   r   r   r   rl     s   rl   c               @   s   e Zd ZdZdS )GSDataErrorz'
    Error receiving data from GS.
    N)r   r   r   r   r   r   r   r   rm     s   rm   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 )N)r   rn   r   r!   )r
   r!   )r   r   r   r     s    zInvalidUriError.__init__)r   r   r   r   r   r   r   r   )r   r   rn     s   rn   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 )N)r   ro   r   r!   )r
   r!   )r   r   r   r     s    zInvalidAclError.__init__)r   r   r   r   r   r   r   r   )r   r   ro     s   ro   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 )N)r   rp   r   r!   )r
   r!   )r   r   r   r     s    zInvalidCorsError.__init__)r   r   r   r   r   r   r   r   )r   r   rp     s   rp   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 )N)r   rq   r   r!   )r
   r!   )r   r   r   r     s    z%InvalidEncryptionConfigError.__init__)r   r   r   r   r   r   r   r   )r   r   rq     s   rq   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 )N)r   rr   r   r!   )r
   r!   )r   r   r   r     s    z$InvalidLifecycleConfigError.__init__)r   r   r   r   r   r   r   r   )r   r   rr     s   rr   c               @   s   e Zd ZdZdS )NoAuthHandlerFoundzAIs raised when no auth handlers were found ready to authenticate.N)r   r   r   r   r   r   r   r   rs     s   rs   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   ru   rv   rw   rx   r   r   r   r   rt     s   rt   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 )N)r   ry   r   r!   disposition)r
   r!   rz   )r   r   r   r     s    z!ResumableUploadException.__init__c             C   s   d| j | jf S )Nz"ResumableUploadException("%s", %s))r!   rz   )r
   r   r   r   r     s    z!ResumableUploadException.__repr__)r   r   r   r   r   r   r   r   r   )r   r   ry     s   ry   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 )N)r   r{   r   r!   rz   )r
   r!   rz   )r   r   r   r   $  s    z#ResumableDownloadException.__init__c             C   s   d| j | jf S )Nz$ResumableDownloadException("%s", %s))r!   rz   )r
   r   r   r   r   )  s    z#ResumableDownloadException.__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  ZS )TooManyRecordsExceptionzd
    Exception raised when a search of Route53 records returns more
    records than requested.
    c                s   t t| | || _d S )N)r   r|   r   r!   )r
   r!   )r   r   r   r   4  s    z TooManyRecordsException.__init__)r   r   r   r   r   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 )N)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   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_msg)r   r   r   r   O  s    z%InvalidInstanceMetadataError.__init__)r   r   r   r   r   r   r   r   )r   r   r   H  s   r   )6r   rH   Zxml.saxr1   r+   r   Zboto.compatr   r   Zboto.resultsetr   r   r   r   r   r   r   objectrC   rJ   rL   rM   rN   rO   rP   rQ   rU   rV   rX   rY   rZ   rb   rf   rg   rh   ra   ri   rj   rk   rl   rm   	Exceptionrn   ro   rp   rq   rr   rs   rt   ry   r{   r|   r}   r   r   r   r   r   <module>   s^   f!