X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-base.git/blobdiff_plain/67373557bab0e5d5eab33abd422915e1a2ebe648..96c5984e6abf17ce0c0b2d53defb14b4ae665455:/python/invirt/common.py 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): """