Source code for qarbon.node

# -*- coding: utf-8 -*-
# ----------------------------------------------------------------------------
# This file is part of qarbon (http://qarbon.rtfd.org/)
#
# Copyright (c) 2013 European Synchrotron Radiation Facility, Grenoble, France
#
# Distributed under the terms of the GNU Lesser General Public License,
# either version 3 of the License, or (at your option) any later version.
# See LICENSE.txt for more info.
# ----------------------------------------------------------------------------

"""Node module."""

__all__ = ["Node"]

import weakref


[docs]class Node(object): """ Node class representing a node in a tree. A strong reference is kept on the parent node. Weak references are kept on the childs. """ def __init__(self, name, parent=None): self.__name = name self.__parent = parent self.__children = weakref.WeakValueDictionary() @property
[docs] def name(self): return self.__name
[docs] def get_parent(self): return self.__parent
[docs] def get_children(self): return self.__children
[docs] def get_child(self, name): return self.__children.get(name)
[docs] def has_child(self, name): return name in self.__children
[docs] def add_child(self, name, child): self.__children[name] = child return child # -- simpler repr and str ------------------------------------------------
def __repr__(self): cname, name = self.__class__.__name__, self.__name return "{0}(name={1})".format(cname, name) def __str__(self): cname, name = self.__class__.__name__, self.__name return "{0}({1})".format(cname, name) # -- more complete repr and str ------------------------------------------- # def __repr__(self): # cname, parent, name = self.__class__.__name__, self.__parent, self.__name # if parent is None: # return "{0}(name={1})".format(cname, name) # return "{0}(name={1}, parent={2!r})".format(cname, name, parent) # def __str__(self): # cname, parent, name = self.__class__.__name__, self.__parent, self.__name # if parent is None: # return "{0}({1})".format(cname, name) # return "{0}({1}, {2})".format(cname, name, parent)