summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2011-01-17 14:47:56 +0000
committerMarko Kreen2011-01-17 14:47:56 +0000
commit3d58c48b9a5ea293e6d96986e070ff795bb0f0e3 (patch)
treea7eb33d6eee1bdeed31d617d0f3c55f72fc330a9
parenta9f89fb3611480f17cefaf312899280dc57a7a8d (diff)
DBScript: allow override config parameters from command line (--set).
-rw-r--r--python/skytools/config.py10
-rw-r--r--python/skytools/scripting.py10
2 files changed, 18 insertions, 2 deletions
diff --git a/python/skytools/config.py b/python/skytools/config.py
index 5f926758..8336c456 100644
--- a/python/skytools/config.py
+++ b/python/skytools/config.py
@@ -13,7 +13,7 @@ class Config(object):
- Acceps defaults in get() functions.
- List value support.
"""
- def __init__(self, main_section, filename, sane_config = 1, user_defs = {}):
+ def __init__(self, main_section, filename, sane_config = 1, user_defs = {}, override = {}):
"""Initialize Config and read from file.
@param sane_config: chooses between ConfigParser/SafeConfigParser.
@@ -35,6 +35,7 @@ class Config(object):
self.main_section = main_section
self.filename = filename
self.sane_config = sane_config
+ self.override = override
if sane_config:
self.cf = ConfigParser.SafeConfigParser()
else:
@@ -53,10 +54,17 @@ class Config(object):
self.cf.read(self.filename)
if not self.cf.has_section(self.main_section):
raise Exception("Wrong config file, no section '%s'" % self.main_section)
+
+ # apply default if key not set
for k, v in self.defs.items():
if not self.cf.has_option(self.main_section, k):
self.cf.set(self.main_section, k, v)
+ # apply overrides
+ if self.override:
+ for k, v in self.override.items():
+ self.cf.set(self.main_section, k, v)
+
def get(self, key, default=None):
"""Reads string value, if not set then default."""
try:
diff --git a/python/skytools/scripting.py b/python/skytools/scripting.py
index e6d7abfa..14f4d694 100644
--- a/python/skytools/scripting.py
+++ b/python/skytools/scripting.py
@@ -380,6 +380,12 @@ class DBScript(object):
self.print_ini()
sys.exit(0)
+ self.cf_operride = {}
+ if self.options.set:
+ for a in self.options.set:
+ k, v = a.split('=', 1)
+ self.cf_operride[k.strip()] = v.strip()
+
# read config file
self.reload()
@@ -452,7 +458,7 @@ class DBScript(object):
print("need config file, use --help for help.")
sys.exit(1)
conf_file = self.args[0]
- return Config(self.service_name, conf_file)
+ return Config(self.service_name, conf_file, override = self.cf_operride)
def init_optparse(self, parser = None):
"""Initialize a OptionParser() instance that will be used to
@@ -482,6 +488,8 @@ class DBScript(object):
help = "print version info and exit")
p.add_option("", "--ini", action="store_true",
help = "display sample ini file")
+ p.add_option("", "--set", action="append",
+ help = "override config setting (--set 'PARAM=VAL')")
# control options
g = optparse.OptionGroup(p, 'control running process')