3
S^ $                  @   s~  d Z ddlZddlZddlmZ ejd dkZer<dd Zn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dd  Zd!d" Zd#d$ Zd+d%d&Zd'd( Zeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed)Zeeeeeeed*ZdS ),zHImplementation of the Python Database API Specification v2.0 exceptions.    N   )get_client_error   c             C   s*   t |ttfrtj| t|S tj| |S )zKWrapper around struct.unpack handling buffer as bytes and strings.
        )
isinstance	bytearraybytesstructunpack_frombuffer)fmtbuf r   ?/tmp/pip-build-8app2_gc/mysql-connector-python/mysqlx/errors.pystruct_unpack(   s    r   )unpackc                   s*   e Zd ZdZd fdd	Zdd Z  ZS )Errorz<Exception that is base class for all other error exceptions.Nc                s.  t t| j  || _| j| _|p"d| _|| _| j rd| j  koHdk n  rt| j| _|d k	ry| j| | _W q tk
r } zdj	| jt
|| _W Y d d }~X qX n| jsd | _| _| jo| jdkr| jtr| jjdn| jd}| jrd}| j|d	< nd
}|j	f || _| j| j| jf| _d S )Nr   i  i  z{0} (Warning: {1})zUnknown errorutf8)errnomsgz{errno} ({state}): {msg}statez{errno}: {msg}r   )superr   __init__r   	_full_msgr   sqlstater   	TypeErrorformatstrPY2encodeargs)selfr   r   valuesr   errfieldsr   )	__class__r   r   r   5   s.    
"(zError.__init__c             C   s   | j S )N)r   )r!   r   r   r   __str__T   s    zError.__str__)NNNN)__name__
__module____qualname____doc__r   r&   __classcell__r   r   )r%   r   r   3   s   r   c               @   s   e Zd ZdZdS )InterfaceErrorz.Exception for errors related to the interface.N)r'   r(   r)   r*   r   r   r   r   r,   X   s   r,   c               @   s   e Zd ZdZdS )DatabaseErrorz-Exception for errors related to the database.N)r'   r(   r)   r*   r   r   r   r   r-   ]   s   r-   c               @   s   e Zd ZdZdS )InternalErrorz.Exception for errors internal database errors.N)r'   r(   r)   r*   r   r   r   r   r.   b   s   r.   c               @   s   e Zd ZdZdS )OperationalErrorz9Exception for errors related to the database's operation.N)r'   r(   r)   r*   r   r   r   r   r/   g   s   r/   c               @   s   e Zd ZdZdS )ProgrammingErrorz(Exception for errors programming errors.N)r'   r(   r)   r*   r   r   r   r   r0   l   s   r0   c               @   s   e Zd ZdZdS )IntegrityErrorz4Exception for errors regarding relational integrity.N)r'   r(   r)   r*   r   r   r   r   r1   q   s   r1   c               @   s   e Zd ZdZdS )	DataErrorz<Exception for errors reporting problems with processed data.N)r'   r(   r)   r*   r   r   r   r   r2   v   s   r2   c               @   s   e Zd ZdZdS )NotSupportedErrorzCException for errors when an unsupported database feature was used.N)r'   r(   r)   r*   r   r   r   r   r3   {   s   r3   c               @   s   e Zd ZdZdS )	PoolErrorz4Exception for errors relating to connection pooling.N)r'   r(   r)   r*   r   r   r   r   r4      s   r4   c               @   s   e Zd ZdZdS )TimeoutErrorz4Exception for errors relating to connection timeout.N)r'   r(   r)   r*   r   r   r   r   r5      s   r5   c          
   C   s~   yjt | tr| S t| }|dkr(| d S |dkrN| dd|   }td|d S | dd|   }td|d S     Y nX dS )	z'Unpacks the given buffer to an integer.r   r          z<I   z<QN)r   intlenr   )r   lengthtmpr   r   r   intread   s    
r=   c          
   C   s4   yt | d| }W n    Y nX | |d |fS )zORead an integer from buffer.

    Returns a tuple (truncated buffer, int).
    r   N)r=   )r   sizeresr   r   r   read_int   s
    r@   c             C   s   | d| }| |d |fS )zdReads bytes from a buffer.

    Returns a tuple with buffer less the read bytes, and the bytes.
    r   Nr   )r   r>   r?   r   r   r   
read_bytes   s    rA   c             C   sv   yt |  || |dS  tk
r&   Y nX |s8t|| dS yt|dd  || |dS  tk
rp   t|| |dS X dS )zGet the exception matching the MySQL error.

    This function will return an exception based on the SQLState. The given
    message will be passed on in the returned exception.

    Returns an Exception.
    )r   r   r   )r   r   r   r   N)_ERROR_EXCEPTIONSKeyErrorr-   _SQLSTATE_CLASS_EXCEPTION)r   r   r   r   r   r   get_mysql_exception   s    
rE   c             C   s   d }}y| d dkrt dW n* tk
rJ } ztdj|S d}~X nX d}yt| dd } t| d\} }| d d	krt| ttfr| jd
}q| }n*t	| dd d\} }|jd
}| jd
}W n* t
k
r } ztdj|S d}~X nX t|||S dS )zReturns an exception object based on the MySQL error.

    Returns an exception object based on the MySQL error in the given
    packet.

    Returns an Error-Object.
    Nr6      zPacket is not an error packetz&Failed getting Error information ({0})   r   r   #   r   r   )
ValueError
IndexErrorr,   r   r@   r   r   r   decoderA   	ExceptionrE   )packetr   errmsgr#   r   r   r   r   get_exception   s,    
rO   )02Z07Z08Z0AZ21Z22Z23Z24Z25Z26Z27Z28Z2AZ2BZ2CZ2DZ2EZ33Z34Z35Z37Z3CZ3DZ3FZ40Z42Z44ZHZZXAZ0KZHY)i  i  i  i  i  i  i  )NN)r*   sysr   Zlocalesr   version_infor   r   r   rL   r   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r=   r@   rA   rE   rO   rD   rB   r   r   r   r   <module>   sz   
%	
'