U
    d/e*                     @   s`   d Z ddl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
dS )z
minio.error
~~~~~~~~~~~~~~~~~~~

This module provides custom exception classes for MinIO library
and API specific errors.

:copyright: (c) 2015, 2016, 2017 by MinIO, Inc.
:license: Apache 2.0, see LICENSE for more details.

    )ElementTree   )findtextc                   @   s   e Zd ZdZdS )MinioExceptionzBase Minio exception.N)__name__
__module____qualname____doc__ r
   r
   //tmp/pip-unpacked-wheel-xery97c7/minio/error.pyr   $   s   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )InvalidResponseErrorz5Raised to indicate that non-xml response from server.c                    s4   || _ || _|| _t d| d| d|  d S )Nz-non-XML response from server; Response code: z, Content-Type: z, Body: )_code_content_type_bodysuper__init__)selfcodecontent_typebody	__class__r
   r   r   +   s    zInvalidResponseError.__init__c                 C   s   t | | j| j| jffS N)typer   r   r   r   r
   r
   r   
__reduce__4   s    zInvalidResponseError.__reduce__)r   r   r   r	   r   r   __classcell__r
   r
   r   r   r   (   s   	r   c                       s,   e Zd ZdZ fddZedd Z  ZS )ServerErrorz?Raised to indicate that S3 service returning HTTP server error.c                    s   || _ t | d S r   )_status_coder   r   )r   messagestatus_coder   r
   r   r   ;   s    zServerError.__init__c                 C   s   | j S )zGet HTTP status code.)r   r   r
   r
   r   r    ?   s    zServerError.status_code)r   r   r   r	   r   propertyr    r   r
   r
   r   r   r   8   s   r   c                       sb   e Zd ZdZd fdd	Zdd Zedd Zed	d
 Zedd Z	e
dd Zdd Z  ZS )S3Errorz]
    Raised to indicate that error response is received
    when executing S3 operation.
    Nc	                    s   || _ || _|| _|| _|| _|| _|| _|| _| jr@d| j nd}	| jrTd| j nd}
t 	d| d| d| d| d| |	 |
  d S )	Nz, bucket_name:  z, object_name: zS3 operation failed; code: z, message: z, resource: z, request_id: z, host_id: )
r   _message	_resource_request_id_host_id	_response_bucket_name_object_namer   r   )r   r   r   resourceZ
request_idZhost_idresponsebucket_nameobject_nameZbucket_messageZobject_messager   r
   r   r   K   s&    (zS3Error.__init__c              	   C   s,   t | | j| j| j| j| j| j| j| jffS r   )	r   r   r$   r%   r&   r'   r(   r)   r*   r   r
   r
   r   r   d   s       zS3Error.__reduce__c                 C   s   | j S )zGet S3 error code.)r   r   r
   r
   r   r   i   s    zS3Error.codec                 C   s   | j S )zGet S3 error message.)r$   r   r
   r
   r   r   n   s    zS3Error.messagec                 C   s   | j S )zGet HTTP response.)r(   r   r
   r
   r   r,   s   s    zS3Error.responsec              
   C   sR   t |j }| t|dt|dt|dt|dt|dt|dt|d|dS )	z/Create new object with values from XML element.ZCodeMessageResourceZ	RequestIdZHostIdZ
BucketNameZKey)r-   r.   r,   )ET
fromstringdatadecoder   )clsr,   elementr
   r
   r   fromxmlx   s    zS3Error.fromxmlc              	   C   s"   t ||| j| j| j| j| j| jS )z*Make a copy with replace code and message.)r"   r%   r&   r'   r(   r)   r*   )r   r   r   r
   r
   r   copy   s    zS3Error.copy)NN)r   r   r   r	   r   r   r!   r   r   r,   classmethodr7   r8   r   r
   r
   r   r   r"   E   s      



r"   N)r	   Z	xml.etreer   r1   xmlr   	Exceptionr   r   r   r"   r
   r
   r
   r   <module>   s   