def build_comments_list(client, asset_id, comment_list):
    """
    Takes an initialized client, recursively builds a list of comments
    and returns the list. (Technically, it's a list of dicts)
    """
    assets = client.assets.get_children(asset_id)

    for asset in assets:
        # Recurse through folders but skip the empty ones
        if (asset.get('type') == 'folder') and (asset.get('item_count') > 0):
            build_comments_list(client, asset['id'], comment_list)

        if asset.get('type') == 'file' and asset.get('comment_count') > 0:
            comments = client.comments.list(asset['id'])
            for comment in comments:
                # The 'get_comments" call won't return the asset name
                # So we'll add it to the dictionary now.
                comment['asset'] = { 'name': asset['name'] }
                comment_list.append(comment)

        if asset.get('type') == 'version_stack':
            # Read about version stacks: https://docs.frame.io/docs/managing-version-stacks
            versions = client.assets.get_children(asset['id'])
            for v_asset in versions:
                comments = client.comments.list(v_asset['id'])
                for comment in comments:
                    comment['asset'] = { 'name': asset['name'] }
                    comment_list.append(comment)

    return comment_list