def _get(self, key, what):
        """Generic getter magic method.

        The node with the nearest but not less hash value is returned.

        :param key: the key to look for.
        :param what: the information to look for in, allowed values:
            - instance (default): associated node instance
            - nodename: node name
            - pos: index of the given key in the ring
            - tuple: ketama compatible (pos, name) tuple
            - weight: node weight
        """
        if not self.runtime._ring:
            return None

        pos = self._get_pos(key)
        if what == 'pos':
            return pos

        nodename = self.runtime._ring[self.runtime._keys[pos]]
        if what in ['hostname', 'instance', 'port', 'weight']:
            return self.runtime._nodes[nodename][what]
        elif what == 'dict':
            return self.runtime._nodes[nodename]
        elif what == 'nodename':
            return nodename
        elif what == 'tuple':
            return (self.runtime._keys[pos], nodename)
Generic getter magic method.

        The node with the nearest but not less hash value is returned.

        :param key: the key to look for.
        :param what: the information to look for in, allowed values:
            - instance (default): associated node instance
            - nodename: node name
            - pos: index of the given key in the ring
            - tuple: ketama compatible (pos, name) tuple
            - weight: node weight