summaryrefslogtreecommitdiffstats
path: root/ipalib/plugable.py
diff options
context:
space:
mode:
authorMartin Nagy <mnagy@redhat.com>2008-10-02 20:24:05 +0200
committerJason Gerard DeRose <jderose@redhat.com>2008-10-02 17:22:41 -0600
commit149429f3057e3ae934e660e3276c9e8d3c935d17 (patch)
tree8110fe604c94f70275991e483889b94b8e226afd /ipalib/plugable.py
parent6000b6b5c62181d25783b6d45adb2ed6f3928480 (diff)
downloadfreeipa-149429f3057e3ae934e660e3276c9e8d3c935d17.tar.gz
freeipa-149429f3057e3ae934e660e3276c9e8d3c935d17.tar.xz
freeipa-149429f3057e3ae934e660e3276c9e8d3c935d17.zip
Environment is now subclassed from object, rather then dict. Added tests for Environment and config.py
Diffstat (limited to 'ipalib/plugable.py')
-rw-r--r--ipalib/plugable.py54
1 files changed, 36 insertions, 18 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index 98a74dfa7..ffe4a11f1 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -692,32 +692,50 @@ class Registrar(DictProxy):
self.__registered.add(klass)
-class Environment(dict):
+class Environment(object):
+ def __init__(self):
+ object.__setattr__(self, '_Environment__map', {})
+
+ def __setattr__(self, name, value):
+ self[name] = value
+
+ def __getattr__(self, name):
+ return self[name]
+
+ def __delattr__(self, name):
+ del self[name]
+
def __getitem__(self, key):
- val = super(Environment, self).__getitem__(key)
+ val = self.__map[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)
+ if key in self or hasattr(self, key):
+ raise AttributeError('cannot overwrite %s.%s' %
+ (self.__class__.__name__, key)
+ )
+ self.__map[key] = value
+
+ def __delitem__(self, key):
+ raise AttributeError('read-only: cannot del %s.%s' %
+ (self.__class__.__name__, key)
+ )
- def __getattr__(self, name):
- return self[name]
+ def __contains__(self, key):
+ return key in self.__map
- def __setattr__(self, name, value):
- self[name] = value
+ def __iter__(self):
+ for key in self.__map:
+ yield key
- def update(self, d):
- assert isinstance(d, dict)
- for key, value in d.iteritems():
+ def update(self, new_vals, ignore_errors = False):
+ assert type(new_vals) == dict
+ for key, value in new_vals.iteritems():
+ if key in self and ignore_errors:
+ continue
self[key] = value
@@ -727,10 +745,10 @@ class API(DictProxy):
"""
__finalized = False
- def __init__(self, default_env, *allowed):
+ def __init__(self, *allowed):
self.__d = dict()
self.register = Registrar(*allowed)
- self.env = Environment(default_env)
+ self.env = Environment()
super(API, self).__init__(self.__d)
def finalize(self):