summaryrefslogtreecommitdiffstats
path: root/ipalib/plugable.py
diff options
context:
space:
mode:
authorMartin Nagy <mnagy@redhat.com>2008-09-29 17:41:30 +0200
committerJason Gerard DeRose <jderose@redhat.com>2008-09-29 17:45:14 -0600
commitafdc72103847fc27efd00f8cc97a7320909ff6a0 (patch)
tree0e2bf04bb5d483b96ee43b218e759986d9af7b06 /ipalib/plugable.py
parentd77907d2d0ecc33ef4ee4121e10cfef385172b0d (diff)
downloadfreeipa-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.py37
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):