U
    /e,                     @   sb   d dl Z d dlmZ d dlmZ ddlmZ G dd dZefdd	Z	e	 Z
 ZZe	d
d ZdS )    Nwraps)reraise   )	Tracebackc                   @   s(   e Zd Zdd Zedd Zdd ZdS )Errorc                 C   s   || _ || _t|| _d S N)exc_type	exc_valuer   _Error__traceback)selfr	   r
   	traceback r   4/tmp/pip-unpacked-wheel-764a0gsu/tblib/decorators.py__init__
   s    zError.__init__c                 C   s
   | j  S r   )r   Zas_tracebackr   r   r   r   r      s    zError.tracebackc                 C   s   t | j| j| j d S r   )r   r	   r
   r   r   r   r   r   r      s    zError.reraiseN)__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   	   s   
r   c                    s   t  fdd}|S )Nc                     s2   z| |W S   k
r,   t t   Y S X d S r   )r   sysexc_info)argskwargsr	   funcr   r   return_exceptions_wrapper   s    z/return_error.<locals>.return_exceptions_wrapperr   )r   r	   r   r   r   r   return_error   s    r   c                 C   s   | d | dd  S )z
    args is a tuple where the first argument is a callable.

    eg::

        apply_with_return_error((func, 1, 2, 3)) - this will call func(1, 2, 3)

    r   r   Nr   )r   r   r   r   apply_with_return_error%   s    
r   )r   	functoolsr   sixr    r   r   	Exceptionr   Zreturns_errorZreturn_errorsZreturns_errorsr   r   r   r   r   <module>   s   