class NodeSpace(object): implements(INodeSpace) def __init__(self, location = '', *args, **kw): self.__nodetree = Dictionary() self.__url = location super(NodeSpace, self).__init__(*args, **kw) def __get_node_tree(self): return Dictionary(self.__nodetree) nodetree = property(__get_node_tree) def __get_url(self): return self.__url url = property(__get_url) def __get_root(self): return self.as_node('/') root = property(__get_root) def as_node(self, path): if not isinstance(path, str) and hasattr(path, 'url'): path = path.url node = self.__nodetree.get(path) if not node: node = IConfigurableNode(_og_as_node(path)) return node def as_node_collection(self, paths): nodes = map(self.as_node, paths) return OrderedCollection(nodes) def as_internal_node(self, path): return self.as_node(path) def as_node_url(self, node): if isinstance(node, str) and self.__nodetree.has_key(node): return node else: return self.as_node(node).url def as_node_url_collection(self,nodes): urls = map(self.as_node_url, nodes) return OrderedCollection(urls) def create_node(self,factory): return factory(self) def add_node(self, node, url = None): if url is None: url = node.url assigned = self.__nodetree.setdefault(url, node) if assigned is not node: raise ValueError('URL "%s" already taken' % url) return url def remove_node(self, node, url = None): if url is None: url = self.as_node_url(node) elif self.as_node(url) is not node: raise ValueError('Node at %s is not node provided' % url) return self.__nodetree.pop(url)
class NodeSpace(object): implements(INodeSpace) def __init__(self, location='', *args, **kw): self.__nodetree = Dictionary() self.__url = location super(NodeSpace, self).__init__(*args, **kw) def __get_node_tree(self): return Dictionary(self.__nodetree) nodetree = property(__get_node_tree) def __get_url(self): return self.__url url = property(__get_url) def __get_root(self): return self.as_node('/') root = property(__get_root) def as_node(self, path): if not isinstance(path, str) and hasattr(path, 'url'): path = path.url node = self.__nodetree.get(path) if not node: node = IConfigurableNode(_og_as_node(path)) return node def as_node_collection(self, paths): nodes = map(self.as_node, paths) return OrderedCollection(nodes) def as_internal_node(self, path): return self.as_node(path) def as_node_url(self, node): if isinstance(node, str) and self.__nodetree.has_key(node): return node else: return self.as_node(node).url def as_node_url_collection(self, nodes): urls = map(self.as_node_url, nodes) return OrderedCollection(urls) def create_node(self, factory): return factory(self) def add_node(self, node, url=None): if url is None: url = node.url assigned = self.__nodetree.setdefault(url, node) if assigned is not node: raise ValueError('URL "%s" already taken' % url) return url def remove_node(self, node, url=None): if url is None: url = self.as_node_url(node) elif self.as_node(url) is not node: raise ValueError('Node at %s is not node provided' % url) return self.__nodetree.pop(url)