diff options
author | Lars Wirzenius <liw@liw.fi> | 2010-07-04 11:07:09 +1200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2010-07-04 11:07:09 +1200 |
commit | ae26e0cdfa225c6fe06f0d7ddf18dbcccbb05697 (patch) | |
tree | 47e6486269327f935e156d81b2fedb0a6b74008d | |
parent | 79d4779f116c4e01fcb170b3f3948cd1d9ab1ac4 (diff) | |
download | obnam-ae26e0cdfa225c6fe06f0d7ddf18dbcccbb05697.tar.gz |
Add new option type: processed.
-rw-r--r-- | obnamlib/cfg.py | 7 | ||||
-rw-r--r-- | obnamlib/cfg_tests.py | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/obnamlib/cfg.py b/obnamlib/cfg.py index 2b960223..89137a1d 100644 --- a/obnamlib/cfg.py +++ b/obnamlib/cfg.py @@ -73,6 +73,7 @@ class Configuration(object): self.settings = {} self.parser = optparse.OptionParser() self.args = [] + self.processors = {} def new_setting(self, kind, names, help, action, value): setting = Setting(kind, copy.copy(value)) @@ -89,6 +90,10 @@ class Configuration(object): def new_string(self, names, help): self.new_setting('str', names, help, 'store', '') + + def new_processed(self, names, help, callback): + self.new_string(names, help) + self.processors[names[0]] = callback def new_list(self, names, help): self.new_setting('list', names, help, 'append', []) @@ -114,6 +119,8 @@ class Configuration(object): item = [s.strip() for s in item.split(',')] self.settings[name].value += item else: + if name in self.processors: + value = self.processors[name](value) self.settings[name].value = value def require(self, name): diff --git a/obnamlib/cfg_tests.py b/obnamlib/cfg_tests.py index 94639e17..248437fb 100644 --- a/obnamlib/cfg_tests.py +++ b/obnamlib/cfg_tests.py @@ -66,3 +66,10 @@ class ConfigurationTests(unittest.TestCase): self.cfg.load(['--foo']) self.assertEqual(self.cfg.require('foo'), None) + def test_calls_callback_for_processed_option(self): + def callback(value): + return int(value) + self.cfg.new_processed(['size'], 'size help', callback) + self.cfg.load(['--size=123']) + self.assertEqual(self.cfg['size'], 123) + |