diff options
author | Martin Nagy <mnagy@redhat.com> | 2008-09-29 17:41:30 +0200 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-29 17:45:14 -0600 |
commit | afdc72103847fc27efd00f8cc97a7320909ff6a0 (patch) | |
tree | 0e2bf04bb5d483b96ee43b218e759986d9af7b06 /ipalib/plugable.py | |
parent | d77907d2d0ecc33ef4ee4121e10cfef385172b0d (diff) | |
download | freeipa-afdc72103847fc27efd00f8cc97a7320909ff6a0.tar.gz freeipa-afdc72103847fc27efd00f8cc97a7320909ff6a0.tar.xz freeipa-afdc72103847fc27efd00f8cc97a7320909ff6a0.zip |
Add support for environment variables, change tests accordingly
Diffstat (limited to 'ipalib/plugable.py')
-rw-r--r-- | ipalib/plugable.py | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py index cc61cbe92..98a74dfa7 100644 --- a/ipalib/plugable.py +++ b/ipalib/plugable.py @@ -692,20 +692,45 @@ class Registrar(DictProxy): self.__registered.add(klass) +class Environment(dict): + def __getitem__(self, key): + val = super(Environment, self).__getitem__(key) + if hasattr(val, 'get_value'): + return val.get_value() + else: + return val + + def __setitem__(self, key, value): + if key in self: + super_value = super(Environment, self).__getitem__(key) + + if key in self and hasattr(super_value, 'set_value'): + super_value.set_value(value) + else: + super(Environment, self).__setitem__(key, value) + + def __getattr__(self, name): + return self[name] + + def __setattr__(self, name, value): + self[name] = value + + def update(self, d): + assert isinstance(d, dict) + for key, value in d.iteritems(): + self[key] = value + + class API(DictProxy): """ Dynamic API object through which `Plugin` instances are accessed. """ __finalized = False - def __init__(self, *allowed, **kw): + def __init__(self, default_env, *allowed): self.__d = dict() self.register = Registrar(*allowed) - default = dict( - in_server_context=True, - ) - default.update(kw) - self.env = MagicDict(default) + self.env = Environment(default_env) super(API, self).__init__(self.__d) def finalize(self): |