""" Test my automatically generate exceptions """ from joblib import my_exceptions class CustomException(Exception): def __init__(self, a, b, c, d): self.a, self.b, self.c, self.d = a, b, c, d class CustomException2(Exception): """A custom exception with a .args attribute Just to check that the JoblibException created from it has it args set correctly """ def __init__(self, a, *args): self.a = a self.args = args def test_inheritance(): assert isinstance(my_exceptions.JoblibNameError(), NameError) assert isinstance(my_exceptions.JoblibNameError(), my_exceptions.JoblibException) assert (my_exceptions.JoblibNameError is my_exceptions._mk_exception(NameError)[0]) def test_inheritance_special_cases(): # _mk_exception should transform Exception to JoblibException assert (my_exceptions._mk_exception(Exception)[0] is my_exceptions.JoblibException) # Subclasses of JoblibException should be mapped to # them-selves by _mk_exception for exception_type in [my_exceptions.JoblibException, my_exceptions.TransportableException]: assert (my_exceptions._mk_exception(exception_type)[0] is exception_type) # Non-inheritable exception classes should be mapped to # JoblibException by _mk_exception. That can happen with classes # generated with SWIG. See # https://github.com/joblib/joblib/issues/269 for a concrete # example. non_inheritable_classes = [type(lambda: None), bool] for exception in non_inheritable_classes: assert (my_exceptions._mk_exception(exception)[0] is my_exceptions.JoblibException) def test__mk_exception(): # Check that _mk_exception works on a bunch of different exceptions for klass in (Exception, TypeError, SyntaxError, ValueError, ImportError, CustomException, CustomException2): message = 'This message should be in the exception repr' exc = my_exceptions._mk_exception(klass)[0]( message, 'some', 'other', 'args', 'that are not', 'in the repr') exc_repr = repr(exc) assert isinstance(exc, klass) assert isinstance(exc, my_exceptions.JoblibException) assert exc.__class__.__name__ in exc_repr assert message in exc_repr