summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2010-07-04 11:07:09 +1200
committerLars Wirzenius <liw@liw.fi>2010-07-04 11:07:09 +1200
commitae26e0cdfa225c6fe06f0d7ddf18dbcccbb05697 (patch)
tree47e6486269327f935e156d81b2fedb0a6b74008d
parent79d4779f116c4e01fcb170b3f3948cd1d9ab1ac4 (diff)
downloadobnam-ae26e0cdfa225c6fe06f0d7ddf18dbcccbb05697.tar.gz
Add new option type: processed.
-rw-r--r--obnamlib/cfg.py7
-rw-r--r--obnamlib/cfg_tests.py7
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)
+