Esempio n. 1
0
    def __setitem__(self, key, value):
        """__setitem__ must be defined in the SoftLink class in order for array
        indexing syntax to work"""

        if not self._v_isopen:
            raise tables.ClosedNodeError('the node object is closed')
        elif self.is_dangling():
            raise ValueError("softlink target does not exist")
        else:
            self.dereference().__setitem__(key, value)
Esempio n. 2
0
    def __setattr__(self, attrname, value):

        # set attribute of the SoftLink itself
        if (attrname in SoftLink._link_attrnames
                or attrname[:3] in SoftLink._link_attrprefixes):
            object.__setattr__(self, attrname, value)

        # set attribute of the target node
        elif not self._v_isopen:
            raise tables.ClosedNodeError('the node object is closed')
        elif self.is_dangling():
            raise ValueError("softlink target does not exist")
        else:
            self.dereference().__setattr__(attrname, value)
Esempio n. 3
0
    def __getattribute__(self, attrname):

        # get attribute of the SoftLink itself
        if (attrname in SoftLink._link_attrnames
                or attrname[:3] in SoftLink._link_attrprefixes):
            return object.__getattribute__(self, attrname)

        # get attribute of the target node
        elif not self._v_isopen:
            raise tables.ClosedNodeError('the node object is closed')
        elif self.is_dangling():
            return None
        else:
            target_node = self.dereference()
            try:
                # __getattribute__() fails to get children of Groups
                return target_node.__getattribute__(attrname)
            except AttributeError:
                # some node classes (e.g. Array) don't implement __getattr__()
                return target_node.__getattr__(attrname)