code: def iterate_nodes(self, string_key, distinct=True):
          
          if not self.ring:
              yield None, None
  
          returned_values = set()
  
          def distinct_filter(value):
              if str(value) not in returned_values:
                  returned_values.add(str(value))
                  return value
  
          pos = self.get_node_pos(string_key)
          for key in self._sorted_keys[pos:]:
              val = distinct_filter(self.ring[key])
              if val:
                  yield val
  
          for i, key in enumerate(self._sorted_keys):
              if i < pos:
                  val = distinct_filter(self.ring[key])
                  if val:
                      yield val
docs: Given a string key it returns the nodes as a generator that can hold the key.
  
          The generator iterates one time through the ring
          starting at the correct position.
  
          if `distinct` is set, then the nodes returned will be unique,
          i.e. no virtual copies will be returned.