From 96c5984e6abf17ce0c0b2d53defb14b4ae665455 Mon Sep 17 00:00:00 2001 From: Evan Broder Date: Mon, 14 Dec 2009 20:50:43 -0500 Subject: [PATCH] Subclass invirt.common.struct from dict, instead of rolling our own almost-dict thing. svn path=/trunk/packages/invirt-base/; revision=2592 --- python/invirt/common.py | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/python/invirt/common.py b/python/invirt/common.py index 603b7f3..e4f7c25 100644 --- a/python/invirt/common.py +++ b/python/invirt/common.py @@ -8,28 +8,24 @@ import subprocess class InvirtConfigError(AttributeError): pass -class struct(object): +class struct(dict): 'A simple namespace object.' def __init__(self, d = {}, __prefix = None, **kwargs): - 'd is the dictionary or the items-iterable to update my __dict__ with.' - dct = {} - dct.update(d) - dct.update(kwargs) - self.__dict__.update(dct) - self.__keys = set(dct) + super(struct, self).__init__(d) self.__prefix = __prefix + self.update(kwargs) def __getattr__(self, key): - # XX ideally these would point a frame higher on the stack. - prefix = self.__prefix - if prefix is not None: - raise InvirtConfigError('missing configuration variable %s%s' - % (prefix, key)) - else: - raise AttributeError("anonymous struct has no member '%s'" - % (key,)) - def __iter__(self): - for i in self.__keys: - yield i + try: + return self[key] + except KeyError: + # XX ideally these would point a frame higher on the stack. + prefix = self.__prefix + if prefix is not None: + raise InvirtConfigError('missing configuration variable %s%s' + % (prefix, key)) + else: + raise AttributeError("anonymous struct has no member '%s'" + % (key,)) def dicts2struct(x, prefix = None): """ -- 1.7.9.5