code: def peek(iterable):
      
      from .queryset import QuerySet
      if isinstance(iterable, QuerySet):
          # QuerySet has __len__ but that evaluates the entire query greedily. We don't want that here. Instead, peek()
          # should be called on QuerySet.iterator()
          raise ValueError('Cannot peek on a QuerySet')
      if hasattr(iterable, '__len__'):
          # tuple, list, set
          return not iterable, iterable
      # generator
      try:
          first = next(iterable)
      except StopIteration:
          return True, iterable
      # We can't rewind a generator. Instead, chain the first element and the rest of the generator
      return False, itertools.chain([first], iterable)
docs: Checks if an iterable is empty and returns status and the rewinded iterable