Completed
Push — master ( 3c1059...41ee64 )
by Ionel Cristian
01:09
created

Error.reraise()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 2
rs 10
1
import sys
2
from functools import wraps
3
4
from six import reraise
5
6
from . import Traceback
7
8
9
class Error(object):
10
    def __init__(self, exc_type, exc_value, traceback):
11
        self.exc_type = exc_type
12
        self.exc_value = exc_value
13
        self.__traceback = Traceback(traceback)
14
15
    @property
16
    def traceback(self):
17
        return self.__traceback.as_traceback()
18
19
    def reraise(self):
20
        reraise(self.exc_type, self.exc_value, self.traceback)
21
22
23
def return_error(func, exc_type=Exception):
24
    @wraps(func)
25
    def return_exceptions_wrapper(*args, **kwargs):
26
        try:
27
            return func(*args, **kwargs)
28
        except exc_type:
29
            return Error(*sys.exc_info())
30
31
    return return_exceptions_wrapper
32
33
34
returns_error = return_errors = returns_errors = return_error  # cause I make too many typos
35
36
37
@return_error
38
def apply_with_return_error(args):
39
    """
40
    args is a tuple where the first argument is a callable.
41
42
    eg::
43
44
        apply_with_return_error((func, 1, 2, 3)) - this will call func(1, 2, 3)
45
46
    """
47
    return args[0](*args[1:])
48