def METHOD_NAME(self, block_id: str, num_tabs: int = 0) -> str:
    """Read a block."""
    done = False
    result_lines_arr = []
    cur_block_id = block_id
    while not done:
        block_url = BLOCK_CHILD_URL_TMPL.format(block_id=cur_block_id)
        query_dict: Dict[str, Any] = {}
        res = requests.request(
            "GET", block_url, headers=self.headers, json=query_dict
        )
        data = res.json()
        for result in data["results"]:
            result_type = result["type"]
            result_obj = result[result_type]
            cur_result_text_arr = []
            if "rich_text" in result_obj:
                for rich_text in result_obj["rich_text"]:
                    # skip if doesn't have text object
                    if "text" in rich_text:
                        text = rich_text["text"]["content"]
                        prefix = "\t" * num_tabs
                        cur_result_text_arr.append(prefix + text)
            result_block_id = result["id"]
            has_children = result["has_children"]
            if has_children:
                children_text = self.METHOD_NAME(
                    result_block_id, num_tabs=num_tabs + 1
                )
                cur_result_text_arr.append(children_text)
            cur_result_text = "\n".join(cur_result_text_arr)
            result_lines_arr.append(cur_result_text)
        if data["next_cursor"] is None:
            done = True
            break
        else:
            cur_block_id = data["next_cursor"]
    result_lines = "\n".join(result_lines_arr)
    return result_lines