From 964a532a4b85e7b5d5f005b991c825938a8a76c2 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Mon, 29 Aug 2011 16:50:12 +0200
Subject: [PATCH] Late option expansion in aksetup.

---
 aksetup_helper.py | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/aksetup_helper.py b/aksetup_helper.py
index 39670029..3e8cbed2 100644
--- a/aksetup_helper.py
+++ b/aksetup_helper.py
@@ -165,7 +165,7 @@ def get_config(schema=None, warn_about_no_config=True):
 
         count_down_delay(delay=10)
 
-    return schema.read_config()
+    return expand_options(schema.read_config())
 
 
 
@@ -241,15 +241,23 @@ def expand_value(v, options):
     if isinstance(v, str):
         return expand_str(v, options)
     elif isinstance(v, list):
-        return [expand_value(i, options) for i in v]
+        result = []
+        for i in v:
+            try:
+                exp_i = expand_value(i, options)
+            except:
+                pass
+            else:
+                result.append(exp_i)
+
+        return result
     else:
         return v
 
 
 def expand_options(options):
-    for k in options.keys():
-        options[k] = expand_value(options[k], options)
-    return options
+    return dict(
+            (k, expand_value(v, options)) for k, v in options.iteritems())
 
 
 
@@ -280,8 +288,7 @@ class ConfigSchema:
         self.conf_dir = conf_dir
 
     def get_default_config(self):
-        return dict((opt.name, opt.default)
-                for opt in self.options)
+        return dict((opt.name, opt.default) for opt in self.options)
 
     def read_config_from_pyfile(self, filename):
         result = {}
@@ -379,8 +386,6 @@ class ConfigSchema:
                     raise KeyError("invalid config key in %s: %s" % (
                             cfile, key))
 
-        expand_options(result)
-
         return result
 
     def add_to_configparser(self, parser, def_config=None):
@@ -395,11 +400,9 @@ class ConfigSchema:
         result = {}
         for opt in self.options:
             result[opt.name] = opt.take_from_configparser(options)
-        expand_options(result)
         return result
 
     def write_config(self, config):
-        import os
         outf = open(self.get_conf_file(), "w")
         for opt in self.options:
             value = config[opt.name]
-- 
GitLab