def list_paths(self, keys=None):
    "\n        List the next level of paths in S3. If multiple keys are\n        specified, listings are done in parallel. The returned\n        S3Objects have .exists == False if the url refers to a\n        prefix, not an existing S3 object.\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_paths(['A', 'D']), returns ['A/B', 'D/E']. The\n        first S3Object has .exists == False, since it does not refer to an\n        object in S3. It is just a prefix.\n        "

    def _list(keys):
        if (keys is None):
            keys = [None]
        urls = ((self._url(key).rstrip('/') + '/') for key in keys)
        res = self._read_many_files('list', urls)
        for (s3prefix, s3url, size) in res:
            if size:
                (yield (s3prefix, s3url, None, int(size)))
            else:
                (yield (s3prefix, s3url, None, None))
    return list(starmap(S3Object, _list(keys)))
List the next level of paths in S3. If multiple keys are
specified, listings are done in parallel. The returned
S3Objects have .exists == False if the url refers to a
prefix, not an existing S3 object.

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_paths(['A', 'D']), returns ['A/B', 'D/E']. The
first S3Object has .exists == False, since it does not refer to an
object in S3. It is just a prefix.
def list_paths(self, keys=None):
    "\n        List the next level of paths in S3. If multiple keys are\n        specified, listings are done in parallel. The returned\n        S3Objects have .exists == False if the url refers to a\n        prefix, not an existing S3 object.\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_paths(['A', 'D']), returns ['A/B', 'D/E']. The\n        first S3Object has .exists == False, since it does not refer to an\n        object in S3. It is just a prefix.\n        "

    def _list(keys):
        if (keys is None):
            keys = [None]
        urls = ((self._url(key).rstrip('/') + '/') for key in keys)
        res = self._read_many_files('list', urls)
        for (s3prefix, s3url, size) in res:
            if size:
                (yield (s3prefix, s3url, None, int(size)))
            else:
                (yield (s3prefix, s3url, None, None))
    return list(starmap(S3Object, _list(keys)))