code: def traverse(self, id_=None):
          
          if id_ is None:
              id_ = self.group
  
          nodes = r_client.smembers(_children_key(id_))
          while nodes:
              current_id = nodes.pop()
  
              details = r_client.get(current_id)
              if details is None:
                  # child has expired or been deleted, remove from :children
                  r_client.srem(_children_key(id_), current_id)
                  continue
  
              details = self._decode(details)
              if details['type'] == 'group':
                  children = r_client.smembers(_children_key(details['id']))
                  if children is not None:
                      nodes.update(children)
  
              yield details
docs: Traverse groups and yield info dicts for jobs