def list_recursive(self, keys=None):
    "\n        List objects in S3 recursively. If multiple keys are\n        specified, listings are done in parallel. The returned\n        S3Objects have always .exists == True, since they refer\n        to existing objects in S3.\n\n        Args:\n            keys: (required) a list of suffixes for paths to list.\n\n        Returns:\n            a list of S3Objects (not downloaded)\n\n        Example:\n\n        Consider the following paths in S3:\n\n        A/B/C\n        D/E\n\n        In this case, list_recursive(['A', 'D']), returns ['A/B/C', 'D/E'].\n        "

    def _list(keys):
        if (keys is None):
            keys = [None]
        res = self._read_many_files('list', map(self._url, keys), recursive=True)
        for (s3prefix, s3url, size) in res:
            (yield (s3prefix, s3url, None, int(size)))
    return list(starmap(S3Object, _list(keys)))
List objects in S3 recursively. If multiple keys are
specified, listings are done in parallel. The returned
S3Objects have always .exists == True, since they refer
to existing objects in S3.

Args:
    keys: (required) a list of suffixes for paths to list.

Returns:
    a list of S3Objects (not downloaded)

Example:

Consider the following paths in S3:

A/B/C
D/E

In this case, list_recursive(['A', 'D']), returns ['A/B/C', 'D/E'].
def list_recursive(self, keys=None):
    "\n        List objects in S3 recursively. If multiple keys are\n        specified, listings are done in parallel. The returned\n        S3Objects have always .exists == True, since they refer\n        to existing objects in S3.\n\n        Args:\n            keys: (required) a list of suffixes for paths to list.\n\n        Returns:\n            a list of S3Objects (not downloaded)\n\n        Example:\n\n        Consider the following paths in S3:\n\n        A/B/C\n        D/E\n\n        In this case, list_recursive(['A', 'D']), returns ['A/B/C', 'D/E'].\n        "

    def _list(keys):
        if (keys is None):
            keys = [None]
        res = self._read_many_files('list', map(self._url, keys), recursive=True)
        for (s3prefix, s3url, size) in res:
            (yield (s3prefix, s3url, None, int(size)))
    return list(starmap(S3Object, _list(keys)))