summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Di Mascio <Adrien.DiMascio@logilab.fr>2017-05-11 17:05:52 +0200
committerAdrien Di Mascio <Adrien.DiMascio@logilab.fr>2017-05-11 17:05:52 +0200
commit372e76ae28e3dc659e606dd38237a04f0ccd8066 (patch)
tree233bbd868639dd32529424f5803c3e40bb2c34a7
parentefe27c4a0250b0ac3726e64813e5ff157e51e814 (diff)
downloadlogilab-common-372e76ae28e3dc659e606dd38237a04f0ccd8066.tar.gz
[configuration] fix registration of multiple groups at once
The "options" iteration variable hid the original function parameters, therefore only the options of the last group were registered. Rename the iteration variable and everything's fine.
-rw-r--r--logilab/common/configuration.py4
-rw-r--r--test/unittest_configuration.py16
2 files changed, 18 insertions, 2 deletions
diff --git a/logilab/common/configuration.py b/logilab/common/configuration.py
index 9c23525..7a54f1a 100644
--- a/logilab/common/configuration.py
+++ b/logilab/common/configuration.py
@@ -949,8 +949,8 @@ class ConfigurationMixIn(OptionsManagerMixIn, OptionsProviderMixIn):
options_by_group = {}
for optname, optdict in options:
options_by_group.setdefault(optdict.get('group', self.name.upper()), []).append((optname, optdict))
- for group, options in options_by_group.items():
- self.add_option_group(group, None, options, self)
+ for group, group_options in options_by_group.items():
+ self.add_option_group(group, None, group_options, self)
self.options += tuple(options)
def load_defaults(self):
diff --git a/test/unittest_configuration.py b/test/unittest_configuration.py
index f59a0e0..ea7cdca 100644
--- a/test/unittest_configuration.py
+++ b/test/unittest_configuration.py
@@ -469,6 +469,22 @@ class RegrTC(TestCase):
self.linter.load_command_line_configuration([])
self.assertEqual(self.linter.config.profile, False)
+ def test_register_options_multiple_groups(self):
+ """ensure multiple option groups can be registered at once"""
+ config = Configuration()
+ self.assertEqual(config.options, ())
+ new_options = (
+ ('option1', {'type': 'string', 'help': '',
+ 'group': 'g1', 'level': 2}),
+ ('option2', {'type': 'string', 'help': '',
+ 'group': 'g1', 'level': 2}),
+ ('option3', {'type': 'string', 'help': '',
+ 'group': 'g2', 'level': 2}),
+ )
+ config.register_options(new_options)
+ self.assertEqual(config.options, new_options)
+
+
class MergeTC(TestCase):
def test_merge1(self):