diff options
author | Martin Nagy <mnagy@redhat.com> | 2008-10-02 20:24:05 +0200 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-10-02 17:22:41 -0600 |
commit | 149429f3057e3ae934e660e3276c9e8d3c935d17 (patch) | |
tree | 8110fe604c94f70275991e483889b94b8e226afd /ipalib/plugable.py | |
parent | 6000b6b5c62181d25783b6d45adb2ed6f3928480 (diff) | |
download | freeipa-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.py | 54 |
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): |