""" $Id: Node.py,v 1.5 2001/01/12 16:20:41 kmacleod Exp $ """ import types import sys class AttributeReadOnlyError(Exception): """Attribute cannot be assigned to.""" pass if hasattr(sys, 'version_info'): _UnicodeType = types.UnicodeType else: _UnicodeType = "wont match" class Node: def __init__(self, _node = None, **keyword_args): self.__dict__['_values'] = {} for key in keyword_args.keys(): self.__setitem__((None, key), keyword_args[key]) def __str__(self): dict = {} for key in self._keys(): dict[key] = self[key] return str(dict) def _keys(self): keys = [] for key in self._values.keys(): if key[0] is None: keys.append(key[1]) else: keys.append(key) return keys def _has_key(self, key): if type(key) is types.StringType or type(key) is _UnicodeType: key = (None, key) if key[0] is None: try: method = getattr(self, '_GET_namespace_uri') except AttributeError: if self._values.has_key('namespace_uri'): key = (self._values['namespace_uri'], key[1]) else: key = (apply(method, ()), key[1]) return self._values.has_key(key) def __getattr__(self, name): if name[0] == '_': raise AttributeError try: return self.__getitem__((None, name)) except KeyError: raise AttributeError def __setattr__(self, name, value): self.__setitem__((None, name), value) def __getitem__(self, key): if type(key) is types.StringType or type(key) is _UnicodeType: key = (None, key) if key[0] is None: try: method = getattr(self, '_GET_namespace_uri') except AttributeError: if self._values.has_key('namespace_uri'): key = (self._values['namespace_uri'], key[1]) else: key = (apply(method, ()), key[1]) try: method = getattr(self, '_GET_' + key[1]) except AttributeError: pass else: return apply(method, ()) if not self._values.has_key(key): raise KeyError return self._values[key] def __setitem__(self, key, value): if type(key) is types.StringType or type(key) is _UnicodeType: key = (None, key) if key[0] is None: try: method = getattr(self, '_GET_namespace_uri') except AttributeError: if self._values.has_key('namespace_uri'): key = (self._values['namespace_uri'], key[1]) else: key = (apply(method, ()), key[1]) try: method = getattr(self, '_SET_' + key[1]) except AttributeError: pass else: return apply(method, (value,)) self._values[key] = value