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
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