docs: def _list_objects(self, client_kwargs, path, max_request_entries):
          """
          Lists objects.
  
          args:
              client_kwargs (dict): Client arguments.
              path (str): Path relative to current locator.
              max_request_entries (int): If specified, maximum entries returned
                  by request.
  
          Returns:
              generator of tuple: object name str, object header dict
          """
          client_kwargs = client_kwargs.copy()
          if max_request_entries:
              client_kwargs['MaxKeys'] = max_request_entries
  
          while True:
              with _handle_client_error():
                  response = self.client.list_objects_v2(
                      Prefix=path, **client_kwargs)
  
              try:
                  for obj in response['Contents']:
                      yield obj.pop('Key'), obj
              except KeyError:
                  raise _ObjectNotFoundError('Not found: %s' % path)
  
              # Handles results on more than one page
              try:
                  client_kwargs['ContinuationToken'] = response[
                      'NextContinuationToken']
              except KeyError:
                  # End of results
                  break