def __str__(self):

        classname = self.__class__.__name__
        target = str(self.target)
        # Check for relative pathnames
        if not self.target.startswith('/'):
            target = self._v_parent._g_join(self.target)
        if self._v_isopen:
            closed = ""
        else:
            closed = "closed "
        if target not in self._v_file:
            dangling = " (dangling)"
        else:
            dangling = ""
        return "%s%s (%s) -> %s%s" % (closed, self._v_pathname, classname,
                                      self.target, dangling)
Custom django-cache-machine cache key implementation that avoids having
dataset/ETHPy150Open PyTables/PyTables/tables/link.py/SoftLink.__str__--crossover with--dataset/ETHPy150Open mozilla/addons-server/src/olympia/amo/models.py/ModelBase._cache_key