diff options
| author | Soren Hansen <soren.hansen@rackspace.com> | 2010-11-29 15:49:12 +0100 |
|---|---|---|
| committer | Soren Hansen <soren.hansen@rackspace.com> | 2010-11-29 15:49:12 +0100 |
| commit | c8f6db354f5e8f55b432854d5259dcf84f0c8ba0 (patch) | |
| tree | f542c5baa940d4101a2dd2ad478975c02233303a /nova/flags.py | |
| parent | c5d3e310376b3fb5c548e1d2e70c5ce7a489bb9f (diff) | |
| download | nova-c8f6db354f5e8f55b432854d5259dcf84f0c8ba0.tar.gz nova-c8f6db354f5e8f55b432854d5259dcf84f0c8ba0.tar.xz nova-c8f6db354f5e8f55b432854d5259dcf84f0c8ba0.zip | |
Make sure templated flags work across calls to ParseNewFlags.
ParseNewFlags creates a new FlagValues object, which doesn't have all the previously defined flags, so template lookups fail miserably. Pass the existing FlagValues object too the template mapping object to fix this.
Diffstat (limited to 'nova/flags.py')
| -rw-r--r-- | nova/flags.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/nova/flags.py b/nova/flags.py index 70a049491..641bda5f9 100644 --- a/nova/flags.py +++ b/nova/flags.py @@ -40,11 +40,12 @@ class FlagValues(gflags.FlagValues): """ - def __init__(self): + def __init__(self, extra_context=None): gflags.FlagValues.__init__(self) self.__dict__['__dirty'] = [] self.__dict__['__was_already_parsed'] = False self.__dict__['__stored_argv'] = [] + self.__dict__['__extra_context'] = extra_context def __call__(self, argv): # We're doing some hacky stuff here so that we don't have to copy @@ -114,7 +115,7 @@ class FlagValues(gflags.FlagValues): def ParseNewFlags(self): if '__stored_argv' not in self.__dict__: return - new_flags = FlagValues() + new_flags = FlagValues(self) for k in self.__dict__['__dirty']: new_flags[k] = gflags.FlagValues.__getitem__(self, k) @@ -139,18 +140,25 @@ class FlagValues(gflags.FlagValues): val = gflags.FlagValues.__getattr__(self, name) if type(val) is str: tmpl = Template(val) - return tmpl.substitute(StrWrapper(self)) + context = [self, self.__dict__['__extra_context']] + return tmpl.substitute(StrWrapper(context)) return val + class StrWrapper(object): - def __init__(self, obj): - self.wrapped = obj + """Wrapper around FlagValues objects + + Wraps FlagValues objects for string.Template so that we're + sure to return strings.""" + def __init__(self, context_objs): + self.context_objs = context_objs def __getitem__(self, name): - if hasattr(self.wrapped, name): - return str(getattr(self.wrapped, name)) - else: - raise KeyError(name) + for context in self.context_objs: + val = getattr(context, name, False) + if val: + return str(val) + raise KeyError(name) FLAGS = FlagValues() gflags.FLAGS = FLAGS |
