summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
Diffstat (limited to 'nova')
-rw-r--r--nova/flags.py17
-rw-r--r--nova/tests/test_flags.py6
2 files changed, 21 insertions, 2 deletions
diff --git a/nova/flags.py b/nova/flags.py
index bc4fd475d..1f85b3098 100644
--- a/nova/flags.py
+++ b/nova/flags.py
@@ -71,8 +71,20 @@ class FlagValues(object):
self._parser = optparse.OptionParser()
self._parser.disable_interspersed_args()
self._extra_context = extra_context
+ self._multistring_defaults = {}
self.Reset()
+ def _apply_multistring_defaults(self, values):
+ #
+ # This horrendous hack is to stop optparse appending
+ # values to the default value. See:
+ # http://bugs.python.org/issue5088
+ #
+ for flag, default in self._multistring_defaults.items():
+ if not getattr(values, flag):
+ setattr(values, flag, default)
+ return values
+
def _parse(self):
if not self._values is None:
return
@@ -101,6 +113,8 @@ class FlagValues(object):
finally:
self._parser.error = error_catcher.orig_error
+ values = self._apply_multistring_defaults(values)
+
(self._values, self._extra) = (values, extra)
def __call__(self, argv):
@@ -190,7 +204,8 @@ class FlagValues(object):
action='callback', callback=parse_list)
def define_multistring(self, name, default, help):
- self._add_option(name, default, help, action='append')
+ self._add_option(name, [], help, action='append')
+ self._multistring_defaults[name] = default
FLAGS = FlagValues()
diff --git a/nova/tests/test_flags.py b/nova/tests/test_flags.py
index dab11c5e0..2865eef55 100644
--- a/nova/tests/test_flags.py
+++ b/nova/tests/test_flags.py
@@ -74,7 +74,11 @@ class FlagsTestCase(test.TestCase):
self.assertEqual(self.FLAGS.float, 6.66)
def test_define_multistring(self):
- flags.DEFINE_multistring('multi', [], 'desc', flag_values=self.FLAGS)
+ flags.DEFINE_multistring('multi', ['blaa'], 'desc',
+ flag_values=self.FLAGS)
+
+ self.assert_(self.FLAGS['multi'])
+ self.assertEqual(self.FLAGS.multi, ['blaa'])
argv = ['flags_test', '--multi', 'foo', '--multi', 'bar']
self.FLAGS(argv)