예제 #1
0
파일: node.py 프로젝트: mcruse/monotone
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)
예제 #2
0
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)