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)))
--
To view, visit
https://gerrit.wikimedia.org/r/277069
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I8a329ee88ed5d1f46ea896eb1dc2767ddd8896c9
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: jenkins-bot <>