jenkins-bot has submitted this change and it was merged.
Change subject: [IMPR] default parameter for Options.format() may be optional ......................................................................
[IMPR] default parameter for Options.format() may be optional
- change default parameter from mandatory positional to predefined named parameter. All format() methods are able to use None as default parameter. - Some tests added
Change-Id: I8a329ee88ed5d1f46ea896eb1dc2767ddd8896c9 --- M pywikibot/bot_choice.py M tests/ui_options_tests.py 2 files changed, 25 insertions(+), 13 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/bot_choice.py b/pywikibot/bot_choice.py index af5bc28..6be7704 100755 --- a/pywikibot/bot_choice.py +++ b/pywikibot/bot_choice.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Choices for input_choice.""" # -# (C) Pywikibot team, 2015 +# (C) Pywikibot team, 2015-2016 # # Distributed under the terms of the MIT license. # @@ -18,7 +18,7 @@ A basic option for input_choice.
The following methods need to be implemented: - * format(default) + * format(default=None) * result(value) * test(value)
@@ -37,11 +37,11 @@ self._stop = stop
@staticmethod - def formatted(text, options, default): + def formatted(text, options, default=None): """Create a text with the options formatted into it.""" formatted_options = [] for option in options: - formatted_options.append(option.format(default)) + formatted_options.append(option.format(default=default)) return '{0} ({1})'.format(text, ', '.join(formatted_options))
@property @@ -60,7 +60,7 @@ else: return None
- def format(self, default): + def format(self, default=None): """Return a formatted string for that option.""" raise NotImplementedError()
@@ -103,7 +103,7 @@ self.option = option self.shortcut = shortcut.lower()
- def format(self, default): + def format(self, default=None): """Return a formatted string for that option.""" index = self.option.lower().find(self.shortcut) shortcut = self.shortcut @@ -154,10 +154,10 @@ self.description = description self.options = options
- def format(self, default): + def format(self, default=None): """Return a formatted string for that option.""" - self._output = Option.formatted(self.description, self.options, default) - return super(NestedOption, self).format(default) + self._output = Option.formatted(self.description, self.options) + return super(NestedOption, self).format(default=default)
def handled(self, value): """Return itself if it applies or the appling sub option.""" @@ -210,7 +210,7 @@ """Return the upper bound of the range of allowed values.""" return self._max
- def format(self, default): + def format(self, default=None): """Return a formatted string showing the range.""" if default is not None and self.test(default): value = self.parse(default) @@ -292,12 +292,12 @@ raise ValueError('The sequence is empty.') del self._max
- def format(self, default): + def format(self, default=None): """Return a string showing the range.""" if not self._list: raise ValueError('The sequence is empty.') else: - return super(ListOption, self).format(default) + return super(ListOption, self).format(default=default)
@property def maximum(self): diff --git a/tests/ui_options_tests.py b/tests/ui_options_tests.py index 6c145a2..e83ed9b 100644 --- a/tests/ui_options_tests.py +++ b/tests/ui_options_tests.py @@ -39,7 +39,10 @@ self.assertEqual(option.shortcut, 't') self.assertEqual(option.shortcut, option.result(None)) self.assertEqual(option.format(None), '[t]est') + self.assertEqual(option.format(), '[t]est') + self.assertEqual(option.format(default=None), '[t]est') self.assertEqual(option.format('t'), '[T]est') + self.assertEqual(option.format(default='t'), '[T]est') self.assertTrue(option.test('Test')) self.assertTrue(option.test('t')) self.assertTrue(option.test('T')) @@ -47,13 +50,16 @@ self.assertIs(option.handled('T'), option) self.assertIsNone(option.handled('?')) self.assertEqual(message('?', [option], None), '? ([t]est)') + self.assertEqual(message('?', [option]), '? ([t]est)') self.assertEqual(message('?', [option], 't'), '? ([T]est)') + self.assertEqual(message('?', [option], default='t'), '? ([T]est)')
def test_Nested(self): """Test NestedOption.""" standard = bot.StandardOption('Test', 'T') option = bot.NestedOption('Next', 'x', 'Nested:', [standard]) self.assertEqual(option.format('x'), 'Ne[X]t') + self.assertEqual(option.format(), 'Ne[x]t') self.assertEqual(option._output, 'Nested: ([t]est)') self.assertEqual(message('?', [option], 't'), '? (Ne[x]t)') self.assertIs(standard.handled('t'), standard) @@ -65,6 +71,8 @@ option = bot.IntegerOption(maximum=5, prefix='r') self.assertEqual(option.format('2'), 'r<number> [1-5]') self.assertEqual(option.format('r2'), 'r<number> [1-[2]-5]') + self.assertEqual(option.format(default='r2'), 'r<number> [1-[2]-5]') + self.assertEqual(option.format(), 'r<number> [1-5]') self.assertEqual(message('?', [option], None), '? (r<number> [1-5])') self.assertEqual(message('?', [option], 'r3'), '? (r<number> [1-[3]-5])') self.assertRaises(AttributeError, option.test, 1) @@ -83,18 +91,22 @@ options = ['foo', 'bar'] option = bot.ListOption(options) self.assertEqual(message('?', [option], None), '? (<number> [1-2])') + self.assertEqual(message('?', [option]), '? (<number> [1-2])') self.assertEqual(message('?', [option], '2'), '? (<number> [1-[2]])') + self.assertEqual(message('?', [option], default='2'), + '? (<number> [1-[2]])') options.pop() self.assertEqual(message('?', [option], None), '? (<number> [1])') self.assertEqual(message('?', [option], '1'), '? (<number> [[1]])') options.pop() self.assertRaises(ValueError, option.format, None) + self.assertRaises(ValueError, option.format) self.assertFalse(option.test('0')) options += ['baz', 'quux', 'norf'] self.assertEqual(message('?', [option], None), '? (<number> [1-3])') for prefix in ('', 'r', 'st'): option = bot.ListOption(options, prefix=prefix) - self.assertEqual(message('?', [option], None), + self.assertEqual(message('?', [option]), '? (%s<number> [1-3])' % prefix) for i, elem in enumerate(options, 1): self.assertTrue(option.test('%s%d' % (prefix, i)))
pywikibot-commits@lists.wikimedia.org