Rev 4504: Get a bool from a string. in file:///home/vila/src/bzr/experimental/bool-config-option/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Thu Jul 2 09:52:35 BST 2009
At file:///home/vila/src/bzr/experimental/bool-config-option/
------------------------------------------------------------
revno: 4504
revision-id: v.ladeuil+lp at free.fr-20090702085235-85fqq4q5d3bt5w7u
parent: pqm at pqm.ubuntu.com-20090702075724-9zff533wsm7xszzy
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: bool-config-option
timestamp: Thu 2009-07-02 10:52:35 +0200
message:
Get a bool from a string.
* bzrlib/tests/test_ui.py:
(TestBoolFromString): Test bool to string conversions.
* bzrlib/ui/__init__.py:
(bool_from_string): Interpret string as a boolean, if possible.
-------------- next part --------------
=== modified file 'bzrlib/tests/test_ui.py'
--- a/bzrlib/tests/test_ui.py 2009-06-30 05:34:47 +0000
+++ b/bzrlib/tests/test_ui.py 2009-07-02 08:52:35 +0000
@@ -355,3 +355,58 @@
r'[####| ] a:b:c 1/2'
, uif._progress_view._render_line())
+
+class TestBoolFromString(tests.TestCase):
+
+ def assertIsTrue(self, s, accepted_values=None):
+ res = _mod_ui.bool_from_string(s, accepted_values=accepted_values)
+ self.assertEquals(True, res)
+
+ def assertIsFalse(self, s, accepted_values=None):
+ res = _mod_ui.bool_from_string(s, accepted_values=accepted_values)
+ self.assertEquals(False, res)
+
+ def assertIsNone(self, s, accepted_values=None):
+ res = _mod_ui.bool_from_string(s, accepted_values=accepted_values)
+ self.assertIs(None, res)
+
+ def test_know_valid_values(self):
+ self.assertIsTrue('true')
+ self.assertIsFalse('false')
+ self.assertIsTrue('1')
+ self.assertIsFalse('0')
+ self.assertIsTrue('on')
+ self.assertIsFalse('off')
+ self.assertIsTrue('yes')
+ self.assertIsFalse('no')
+ self.assertIsTrue('y')
+ self.assertIsFalse('n')
+ # Also try some case variations
+ self.assertIsTrue('True')
+ self.assertIsFalse('False')
+ self.assertIsTrue('On')
+ self.assertIsFalse('Off')
+ self.assertIsTrue('ON')
+ self.assertIsFalse('OFF')
+ self.assertIsTrue('oN')
+ self.assertIsFalse('oFf')
+
+ def test_invalid_values(self):
+ self.assertIsNone(None)
+ self.assertIsNone('doubt')
+ self.assertIsNone('frue')
+ self.assertIsNone('talse')
+ self.assertIsNone('42')
+
+ def test_provided_values(self):
+ av = dict(y=True, n=False, yes=True, no=False)
+ self.assertIsTrue('y', av)
+ self.assertIsTrue('Y', av)
+ self.assertIsTrue('Yes', av)
+ self.assertIsFalse('n', av)
+ self.assertIsFalse('N', av)
+ self.assertIsFalse('No', av)
+ self.assertIsNone('1', av)
+ self.assertIsNone('0', av)
+ self.assertIsNone('on', av)
+ self.assertIsNone('off', av)
=== modified file 'bzrlib/ui/__init__.py'
--- a/bzrlib/ui/__init__.py 2009-06-30 05:34:47 +0000
+++ b/bzrlib/ui/__init__.py 2009-07-02 08:52:35 +0000
@@ -43,6 +43,42 @@
""")
+_valid_boolean_strings = dict(yes=True, no=False,
+ y=True, n=False,
+ on=True, off=False,
+ true=True, false=False)
+_valid_boolean_strings['1'] = True
+_valid_boolean_strings['0'] = False
+
+
+def bool_from_string(s, accepted_values=None):
+ """Returns a boolean if the string can be interpreted as such.
+
+ Interpret case insensitive strings as booleans. The default values
+ includes: 'yes', 'no, 'y', 'n', 'true', 'false', '0', '1', 'on',
+ 'off'. Alternative values can be provided with the 'accepted_values'
+ parameter.
+
+ :param s: A string that should be interpreted as a boolean. It should be of
+ type string or unicode.
+
+ :param accepted_values: An optional dict with accepted strings as keys and
+ True/False as values. The strings will be tested against a lowered
+ version of 's'.
+
+ :return: True or False for accepted strings, None otherwise.
+ """
+ if accepted_values is None:
+ accepted_values = _valid_boolean_strings
+ val = None
+ if type(s) in (str, unicode):
+ try:
+ val = accepted_values[s.lower()]
+ except KeyError:
+ pass
+ return val
+
+
class UIFactory(object):
"""UI abstraction.
More information about the bazaar-commits
mailing list