Action: Add config accessor functions.
authorMatthijs Kooijman <matthijs@stdin.nl>
Fri, 6 Aug 2010 16:24:14 +0000 (18:24 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Sat, 7 Aug 2010 18:24:43 +0000 (20:24 +0200)
These convenience functions allow for accessing configuration values
either allowing them to be unset (and return None) or mandatory (and
throw an appropriate exception). By default, ConfigParser throws an
exception with a less appropriate exception.

src/lib/backupninja/config.py
src/lib/backupninja/handlers/__init__.py

index 030fc573121a83474e3486a5c0d5234921555eb4..5f1b283094a8f27641ab327a622163650ef58e26 100644 (file)
@@ -28,6 +28,15 @@ default_global_config = {}
 
 import logging as log
 
+class ConfigError(Exception):
+    """
+    An exception thrown when something is wrong with the config.
+    This is not thrown by the config module, but it is meant to be
+    thrown by handlers when they find something wrong with the
+    configuration contents.
+    """
+    pass
+
 def get_global_config(opts):
     """
     Returns the global configuration, in a SafeConfigParser object.
index 72b30179a3a0017f9bfe3447b60d9e5d5365922a..f6559f9b692294b401244f7dc65eb47c203a8779 100644 (file)
@@ -19,7 +19,7 @@
 
 """ Action superclass with common functionality """
 
-import sys
+import sys, ConfigParser
 import logging as log
 
 from backupninja import config
@@ -59,7 +59,32 @@ class Action(object):
         """
         self.conf = config.load_config(filename, self.default_config)
 
-        
+    def get_config_optional(self, section, option):
+        """
+        Returns the value of the given option. If the option was not set
+        (and no default was set in self.default_config), return None.
+
+        This is a convenience wrapper for ConfigParser.get(), since that
+        throws an exception on unset options.
+        """
+        try:
+            return self.conf.get(section, option)
+        except ConfigParser.NoOptionError:
+            return None
+
+    def get_config_mandatory(self, section, option):
+        """
+        Returns the value of the given option. If the option was not set
+        (and no default was set in self.default_config), raises a
+        backupninja.config.ConfigError.
+
+        This is a convenience wrapper for ConfigParser.get(), since that
+        has a very generic exception message on unknown options.
+        """
+        try:
+            return self.conf.get(section, option)
+        except ConfigParser.NoOptionError:
+            raise config.ConfigError("Option '%s' in section '%s' is mandatory, please configure it" % (option, section))
 
 def create_action(ty):
     """