mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
227: check_type() and check_isinstance() now take arguments in (value, type_, name) order so the first two match the built-in isinstance() call signature
This commit is contained in:
parent
5af91df9a5
commit
6697b955ee
@ -23,17 +23,17 @@ All custom errors raised by `ipalib` package.
|
|||||||
|
|
||||||
TYPE_FORMAT = '%s: need a %r; got %r'
|
TYPE_FORMAT = '%s: need a %r; got %r'
|
||||||
|
|
||||||
def raise_TypeError(name, type_, value):
|
def raise_TypeError(value, type_, name):
|
||||||
"""
|
"""
|
||||||
Raises a TypeError with a nicely formatted message and helpful attributes.
|
Raises a TypeError with a nicely formatted message and helpful attributes.
|
||||||
|
|
||||||
The TypeError raised will have three custom attributes:
|
The TypeError raised will have three custom attributes:
|
||||||
|
|
||||||
``name`` - The name (identifier) of the argument in question.
|
``value`` - The value (of incorrect type) passed as argument.
|
||||||
|
|
||||||
``type`` - The type expected for the argument.
|
``type`` - The type expected for the argument.
|
||||||
|
|
||||||
``value`` - The value (of incorrect type) passed as argument.
|
``name`` - The name (identifier) of the argument in question.
|
||||||
|
|
||||||
There is no edict that all TypeError should be raised with raise_TypeError,
|
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
|
but when it fits, use it... it makes the unit tests faster to write and
|
||||||
@ -48,40 +48,40 @@ def raise_TypeError(name, type_, value):
|
|||||||
raise e
|
raise e
|
||||||
TypeError: message: need a <type 'str'>; got u'Hello.'
|
TypeError: message: need a <type 'str'>; got u'Hello.'
|
||||||
|
|
||||||
:param name: The name (identifier) of the argument in question.
|
:param value: The value (of incorrect type) passed as argument.
|
||||||
:param type_: The type expected for the argument.
|
:param type_: The type expected for the argument.
|
||||||
:param value: The value (of incorrect type) passed argument.
|
:param name: The name (identifier) of the argument in question.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
assert type(name) is str, TYPE_FORMAT % ('name', str, name)
|
|
||||||
assert type(type_) is type, TYPE_FORMAT % ('type_', type, type_)
|
assert type(type_) is type, TYPE_FORMAT % ('type_', type, type_)
|
||||||
assert type(value) is not type_, 'value: %r is a %r' % (value, type_)
|
assert type(value) is not type_, 'value: %r is a %r' % (value, type_)
|
||||||
|
assert type(name) is str, TYPE_FORMAT % ('name', str, name)
|
||||||
e = TypeError(TYPE_FORMAT % (name, type_, value))
|
e = TypeError(TYPE_FORMAT % (name, type_, value))
|
||||||
setattr(e, 'name', name)
|
|
||||||
setattr(e, 'type', type_)
|
|
||||||
setattr(e, 'value', value)
|
setattr(e, 'value', value)
|
||||||
|
setattr(e, 'type', type_)
|
||||||
|
setattr(e, 'name', name)
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
||||||
def check_type(name, type_, value, allow_None=False):
|
def check_type(value, type_, name, allow_None=False):
|
||||||
assert type(name) is str, TYPE_FORMAT % ('name', str, name)
|
assert type(name) is str, TYPE_FORMAT % ('name', str, name)
|
||||||
assert type(type_) is type, TYPE_FORMAT % ('type_', type, type_)
|
assert type(type_) is type, TYPE_FORMAT % ('type_', type, type_)
|
||||||
assert type(allow_None) is bool, TYPE_FORMAT % ('allow_None', bool, allow_None)
|
assert type(allow_None) is bool, TYPE_FORMAT % ('allow_None', bool, allow_None)
|
||||||
if value is None and allow_None:
|
if value is None and allow_None:
|
||||||
return
|
return
|
||||||
if type(value) is not type_:
|
if type(value) is not type_:
|
||||||
raise_TypeError(name, type_, value)
|
raise_TypeError(value, type_, name)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
def check_isinstance(name, type_, value, allow_None=False):
|
def check_isinstance(value, type_, name, allow_None=False):
|
||||||
assert type(name) is str, TYPE_FORMAT % ('name', str, name)
|
|
||||||
assert type(type_) is type, TYPE_FORMAT % ('type_', type, type_)
|
assert type(type_) is type, TYPE_FORMAT % ('type_', type, type_)
|
||||||
|
assert type(name) is str, TYPE_FORMAT % ('name', str, name)
|
||||||
assert type(allow_None) is bool, TYPE_FORMAT % ('allow_None', bool, allow_None)
|
assert type(allow_None) is bool, TYPE_FORMAT % ('allow_None', bool, allow_None)
|
||||||
if value is None and allow_None:
|
if value is None and allow_None:
|
||||||
return
|
return
|
||||||
if not isinstance(value, type_):
|
if not isinstance(value, type_):
|
||||||
raise_TypeError(name, type_, value)
|
raise_TypeError(value, type_, name)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,11 +27,12 @@ from ipalib import errors
|
|||||||
|
|
||||||
type_format = '%s: need a %r; got %r'
|
type_format = '%s: need a %r; got %r'
|
||||||
|
|
||||||
def check_TypeError(f, name, type_, value, **kw):
|
|
||||||
e = raises(TypeError, f, name, type_, value, **kw)
|
def check_TypeError(f, value, type_, name, **kw):
|
||||||
assert e.name is name
|
e = raises(TypeError, f, value, type_, name, **kw)
|
||||||
assert e.type is type_
|
|
||||||
assert e.value is value
|
assert e.value is value
|
||||||
|
assert e.type is type_
|
||||||
|
assert e.name is name
|
||||||
assert str(e) == type_format % (name, type_, value)
|
assert str(e) == type_format % (name, type_, value)
|
||||||
|
|
||||||
|
|
||||||
@ -40,26 +41,26 @@ def test_raise_TypeError():
|
|||||||
Tests the `errors.raise_TypeError` function.
|
Tests the `errors.raise_TypeError` function.
|
||||||
"""
|
"""
|
||||||
f = errors.raise_TypeError
|
f = errors.raise_TypeError
|
||||||
name = 'message'
|
|
||||||
type_ = unicode
|
|
||||||
value = 'Hello.'
|
value = 'Hello.'
|
||||||
|
type_ = unicode
|
||||||
|
name = 'message'
|
||||||
|
|
||||||
check_TypeError(f, name, type_, value)
|
check_TypeError(f, value, type_, name)
|
||||||
|
|
||||||
# name not an str:
|
# name not an str
|
||||||
fail = 42
|
fail_name = 42
|
||||||
e = raises(AssertionError, f, fail, type_, value)
|
e = raises(AssertionError, f, value, type_, fail_name)
|
||||||
assert str(e) == type_format % ('name', str, fail)
|
assert str(e) == type_format % ('name', str, fail_name), str(e)
|
||||||
|
|
||||||
# type_ not a type:
|
# type_ not a type:
|
||||||
fail = unicode()
|
fail_type = unicode()
|
||||||
e = raises(AssertionError, f, name, fail, value)
|
e = raises(AssertionError, f, value, fail_type, name)
|
||||||
assert str(e) == type_format % ('type_', type, fail)
|
assert str(e) == type_format % ('type_', type, fail_type)
|
||||||
|
|
||||||
# type(value) is type_:
|
# type(value) is type_:
|
||||||
fail = u'How are you?'
|
fail_value = u'How are you?'
|
||||||
e = raises(AssertionError, f, name, type_, fail)
|
e = raises(AssertionError, f, fail_value, type_, name)
|
||||||
assert str(e) == 'value: %r is a %r' % (fail, type_)
|
assert str(e) == 'value: %r is a %r' % (fail_value, type_)
|
||||||
|
|
||||||
|
|
||||||
def test_check_type():
|
def test_check_type():
|
||||||
@ -67,32 +68,33 @@ def test_check_type():
|
|||||||
Tests the `errors.check_type` function.
|
Tests the `errors.check_type` function.
|
||||||
"""
|
"""
|
||||||
f = errors.check_type
|
f = errors.check_type
|
||||||
name = 'greeting'
|
|
||||||
value = 'How are you?'
|
value = 'How are you?'
|
||||||
|
type_ = str
|
||||||
|
name = 'greeting'
|
||||||
|
|
||||||
# Should pass:
|
# Should pass:
|
||||||
assert value is f(name, str, value)
|
assert value is f(value, type_, name)
|
||||||
assert None is f(name, str, None, allow_None=True)
|
assert None is f(None, type_, name, allow_None=True)
|
||||||
|
|
||||||
# Should raise TypeError
|
# Should raise TypeError
|
||||||
check_TypeError(f, name, str, None)
|
check_TypeError(f, None, type_, name)
|
||||||
check_TypeError(f, name, basestring, value)
|
check_TypeError(f, value, basestring, name)
|
||||||
check_TypeError(f, name, unicode, value)
|
check_TypeError(f, value, unicode, name)
|
||||||
|
|
||||||
# name not an str
|
# name not an str
|
||||||
fail = unicode(name)
|
fail_name = unicode(name)
|
||||||
e = raises(AssertionError, f, fail, str, value)
|
e = raises(AssertionError, f, value, type_, fail_name)
|
||||||
assert str(e) == type_format % ('name', str, fail)
|
assert str(e) == type_format % ('name', str, fail_name)
|
||||||
|
|
||||||
# type_ not a type:
|
# type_ not a type:
|
||||||
fail = 42
|
fail_type = 42
|
||||||
e = raises(AssertionError, f, name, fail, value)
|
e = raises(AssertionError, f, value, fail_type, name)
|
||||||
assert str(e) == type_format % ('type_', type, fail)
|
assert str(e) == type_format % ('type_', type, fail_type)
|
||||||
|
|
||||||
# allow_None not a bool:
|
# allow_None not a bool:
|
||||||
fail = 0
|
fail_bool = 0
|
||||||
e = raises(AssertionError, f, name, str, value, allow_None=fail)
|
e = raises(AssertionError, f, value, type_, name, allow_None=fail_bool)
|
||||||
assert str(e) == type_format % ('allow_None', bool, fail)
|
assert str(e) == type_format % ('allow_None', bool, fail_bool)
|
||||||
|
|
||||||
|
|
||||||
def test_check_isinstance():
|
def test_check_isinstance():
|
||||||
@ -100,29 +102,30 @@ def test_check_isinstance():
|
|||||||
Tests the `errors.check_isinstance` function.
|
Tests the `errors.check_isinstance` function.
|
||||||
"""
|
"""
|
||||||
f = errors.check_isinstance
|
f = errors.check_isinstance
|
||||||
name = 'greeting'
|
|
||||||
value = 'How are you?'
|
value = 'How are you?'
|
||||||
|
type_ = str
|
||||||
|
name = 'greeting'
|
||||||
|
|
||||||
# Should pass:
|
# Should pass:
|
||||||
assert value is f(name, str, value)
|
assert value is f(value, type_, name)
|
||||||
assert value is f(name, basestring, value)
|
assert value is f(value, basestring, name)
|
||||||
assert None is f(name, str, None, allow_None=True)
|
assert None is f(None, type_, name, allow_None=True)
|
||||||
|
|
||||||
# Should raise TypeError
|
# Should raise TypeError
|
||||||
check_TypeError(f, name, str, None)
|
check_TypeError(f, None, type_, name)
|
||||||
check_TypeError(f, name, unicode, value)
|
check_TypeError(f, value, unicode, name)
|
||||||
|
|
||||||
# name not an str
|
# name not an str
|
||||||
fail = unicode(name)
|
fail_name = unicode(name)
|
||||||
e = raises(AssertionError, f, fail, str, value)
|
e = raises(AssertionError, f, value, type_, fail_name)
|
||||||
assert str(e) == type_format % ('name', str, fail)
|
assert str(e) == type_format % ('name', str, fail_name)
|
||||||
|
|
||||||
# type_ not a type:
|
# type_ not a type:
|
||||||
fail = 42
|
fail_type = 42
|
||||||
e = raises(AssertionError, f, name, fail, value)
|
e = raises(AssertionError, f, value, fail_type, name)
|
||||||
assert str(e) == type_format % ('type_', type, fail)
|
assert str(e) == type_format % ('type_', type, fail_type)
|
||||||
|
|
||||||
# allow_None not a bool:
|
# allow_None not a bool:
|
||||||
fail = 0
|
fail_bool = 0
|
||||||
e = raises(AssertionError, f, name, str, value, allow_None=fail)
|
e = raises(AssertionError, f, value, type_, name, allow_None=fail_bool)
|
||||||
assert str(e) == type_format % ('allow_None', bool, fail)
|
assert str(e) == type_format % ('allow_None', bool, fail_bool)
|
||||||
|
@ -117,8 +117,8 @@ class test_Option2(ClassChecker):
|
|||||||
"""
|
"""
|
||||||
Tests the `public.Option2.__init__` method.
|
Tests the `public.Option2.__init__` method.
|
||||||
"""
|
"""
|
||||||
name = 'sn',
|
name = 'sn'
|
||||||
doc = 'Last Name',
|
doc = 'Last Name'
|
||||||
type_ = ipa_types.Unicode()
|
type_ = ipa_types.Unicode()
|
||||||
o = self.cls(name, doc, type_)
|
o = self.cls(name, doc, type_)
|
||||||
assert o.__islocked__() is True
|
assert o.__islocked__() is True
|
||||||
|
Loading…
Reference in New Issue
Block a user