From fff34b8d452bf936ce9cf303f5d3d6c24858e2b6 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 16 Aug 2021 12:37:31 -0400 Subject: [PATCH] Simplify Namespace --- implementations/python/preserves/schema.py | 29 +++++++++------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/implementations/python/preserves/schema.py b/implementations/python/preserves/schema.py index a53af8c..54efa21 100644 --- a/implementations/python/preserves/schema.py +++ b/implementations/python/preserves/schema.py @@ -359,29 +359,25 @@ def definition_not_found(module_path, name): class Namespace: def __init__(self, prefix): - super(Namespace, self).__setattr__('_items', {}) - super(Namespace, self).__setattr__('_prefix', prefix) - - def __getattr__(self, name): - return self[name] - - def __setattr__(self, name, value): - self[name] = value + self._prefix = prefix def __getitem__(self, name): - return self._items[Symbol(name)] + return safegetattr(self, Symbol(name).name) def __setitem__(self, name, value): - name = Symbol(name) - if name in self._items: - raise ValueError('Name conflict: ' + module_path_str(self._prefix + (name.name,))) - self._items[name] = value + name = Symbol(name).name + if name in self.__dict__: + raise ValueError('Name conflict: ' + module_path_str(self._prefix + (name,))) + safesetattr(self, name, value) def __contains__(self, name): - return Symbol(name) in self._items + return Symbol(name).name in self.__dict__ + + def _items(self): + return dict((k, v) for (k, v) in self.__dict__.items() if k[0] != '_') def __repr__(self): - return repr(self._items) + return repr(self._items()) class Compiler: def __init__(self): @@ -446,8 +442,7 @@ if __name__ == '__main__': with open(path_bin_filename, 'rb') as f: x = Decoder(f.read()).next() print(meta.Schema.decode(x)) - print(meta.Schema.decode(x) == meta.Schema.decode(x)) - print(meta.Schema.decode(x)._encode()) + assert meta.Schema.decode(x) == meta.Schema.decode(x) assert meta.Schema.decode(x)._encode() == x print()