diff options
-rw-r--r-- | ipalib/parameter.py | 11 | ||||
-rw-r--r-- | tests/test_ipalib/test_parameter.py | 12 |
2 files changed, 23 insertions, 0 deletions
diff --git a/ipalib/parameter.py b/ipalib/parameter.py index fca95b0ef..76a9cd508 100644 --- a/ipalib/parameter.py +++ b/ipalib/parameter.py @@ -24,6 +24,7 @@ Parameter system for command plugins. from types import NoneType from plugable import ReadOnly, lock, check_name from constants import NULLS, TYPE_ERROR, CALLABLE_ERROR +from util import make_repr class DefaultFrom(ReadOnly): @@ -287,6 +288,16 @@ class Param(ReadOnly): # And we're done. lock(self) + def __repr__(self): + """ + Return an expresion that could construct this `Param` instance. + """ + return make_repr( + self.__class__.__name__, + self.param_spec, + **self.__kw + ) + def normalize(self, value): """ Normalize ``value`` using normalizer callback. diff --git a/tests/test_ipalib/test_parameter.py b/tests/test_ipalib/test_parameter.py index d7f8e45c3..ef248b702 100644 --- a/tests/test_ipalib/test_parameter.py +++ b/tests/test_ipalib/test_parameter.py @@ -188,6 +188,18 @@ class test_Param(ClassChecker): assert str(e) == \ "Param('my_param'): takes no such kwargs: 'ape', 'great'" + def test_repr(self): + """ + Test the `ipalib.parameter.Param.__repr__` method. + """ + for name in ['name', 'name?', 'name*', 'name+']: + o = self.cls(name) + assert repr(o) == 'Param(%r)' % name + o = self.cls('name', required=False) + assert repr(o) == "Param('name', required=False)" + o = self.cls('name', multivalue=True) + assert repr(o) == "Param('name', multivalue=True)" + def test_convert(self): """ Test the `ipalib.parameter.Param.convert` method. |