diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-29 07:05:06 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-29 07:05:06 +0000 |
commit | 44ff0b3d23c0473106a6c0da90cc8d80df98ee78 (patch) | |
tree | 1a04f70398f71f6b40d5398d4a58a4adbb1165a8 | |
parent | 76b30dff15de9eb50f0d9cb00b6df18ecd91a8f5 (diff) | |
download | freeipa-44ff0b3d23c0473106a6c0da90cc8d80df98ee78.tar.gz freeipa-44ff0b3d23c0473106a6c0da90cc8d80df98ee78.tar.xz freeipa-44ff0b3d23c0473106a6c0da90cc8d80df98ee78.zip |
224: Reworked IPATypeError class into raise_TypeError function
-rw-r--r-- | ipalib/errors.py | 41 | ||||
-rw-r--r-- | ipalib/tests/test_errors.py | 62 |
2 files changed, 50 insertions, 53 deletions
diff --git a/ipalib/errors.py b/ipalib/errors.py index f88fdd5a..dea7cd73 100644 --- a/ipalib/errors.py +++ b/ipalib/errors.py @@ -22,40 +22,45 @@ All custom errors raised by `ipalib` package. """ -class IPATypeError(TypeError): +def raise_TypeError(name, type_, value): """ - A TypeError subclass with a helpful message format. + Raises a TypeError with a nicely formatted message and helpful attributes. - IPATypeError has three custom instance attributes: + The TypeError raised will have three custom attributes: - ``name`` - Name of the argument TypeError is being raised for. + ``name`` - The name (identifier) of the argument in question. - ``type`` - Type that the argument should be. + ``type`` - The type expected for the arguement. - ``value`` - Value (of incorrect type) supplied for the argument. + ``value`` - The value (of incorrect type) revieved for argument. - There is no edict that all TypeError should be raised with IPATypeError, + There is no edict that all TypeError should be raised with raise_TypeError, but when it fits, use it... it makes the unit tests faster to write and the debugging easier to read. Here is an example: - >>> raise IPATypeError('islate', bool, '4 AM') + >>> raise_TypeError('message', str, u'Hello.') Traceback (most recent call last): File "<stdin>", line 1, in <module> - IPATypeError: islate: need a <type 'bool'>; got '4 AM' + File "/home/jderose/projects/freeipa2/ipalib/errors.py", line 61, in raise_TypeError + raise e + TypeError: message: need a <type 'str'>; got u'Hello.' + + :param name: The name (identifier) of the argument in question. + :param type_: The type expected for the arguement. + :param value: The value (of incorrect type) revieved for argument. """ format = '%s: need a %r; got %r' - - def __init__(self, name, type_, value): - assert type(name) is str, self.format % ('name', str, name) - assert type(type_) is type, self.format % ('type_', type, type_) - assert type(value) is not type_, 'value: %r is a %r' % (value, type_) - self.name = name - self.type = type_ - self.value = value - TypeError.__init__(self, self.format % (name, type_, value)) + assert type(name) is str, format % ('name', str, name) + assert type(type_) is type, format % ('type_', type, type_) + assert type(value) is not type_, 'value: %r is a %r' % (value, type_) + e = TypeError(format % (name, type_, value)) + setattr(e, 'name', name) + setattr(e, 'type', type_) + setattr(e, 'value', value) + raise e class IPAError(Exception): diff --git a/ipalib/tests/test_errors.py b/ipalib/tests/test_errors.py index 2d5fc613..730502c5 100644 --- a/ipalib/tests/test_errors.py +++ b/ipalib/tests/test_errors.py @@ -25,40 +25,32 @@ from tstutil import raises, ClassChecker from ipalib import errors -class test_IPATypeError(ClassChecker): +def test_raise_TypeError(): """ - Tests the `errors.IPATypeError` exception. + Tests the `errors.raise_TypeError` function. """ - _cls = errors.IPATypeError - - def test_class(self): - assert self.cls.__bases__ == (TypeError,) - - def test_init(self): - """ - Tests the `errors.IPATypeError.__init__` method. - """ - format = '%s: need a %r; got %r' - name = 'message' - type_ = unicode - value = 'hello world' - e = self.cls(name, type_, value) - assert e.name is name - assert e.type is type_ - assert e.value is value - assert str(e) == format % (name, type_, value) - - # name not an str: - fail = 42 - e = raises(AssertionError, self.cls, fail, type_, value) - assert str(e) == format % ('name', str, fail) - - # type_ not a type: - fail = unicode() - e = raises(AssertionError, self.cls, name, fail, value) - assert str(e) == format % ('type_', type, fail) - - # type(value) is type_: - fail = u'how are you?' - e = raises(AssertionError, self.cls, name, type_, fail) - assert str(e) == 'value: %r is a %r' % (fail, type_) + f = errors.raise_TypeError + format = '%s: need a %r; got %r' + name = 'message' + type_ = unicode + value = 'Hello.' + e = raises(TypeError, f, name, type_, value) + assert e.name is name + assert e.type is type_ + assert e.value is value + assert str(e) == format % (name, type_, value) + + # name not an str: + fail = 42 + e = raises(AssertionError, f, fail, type_, value) + assert str(e) == format % ('name', str, fail) + + # type_ not a type: + fail = unicode() + e = raises(AssertionError, f, name, fail, value) + assert str(e) == format % ('type_', type, fail) + + # type(value) is type_: + fail = u'How are you?' + e = raises(AssertionError, f, name, type_, fail) + assert str(e) == 'value: %r is a %r' % (fail, type_) |