Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# CommentForest

class praw.models.comment_forest.CommentForest(submission: praw.models.Submission, comments: Optional[List[praw.models.Comment]] = None)

  A forest of comments starts with multiple top-level comments.

  Each of these comments can be a tree of replies.

  __getitem__(index: int)

    Return the comment at position `index` in the list.

    This method is to be used like an array access, such as:

        first_comment = submission.comments[0]

    Alternatively, the presence of this method enables one to iterate over all top level comments, like so:

        for comment in submission.comments:
            print(comment.body)

  __init__(submission: praw.models.Submission, comments: Optional[List[praw.models.Comment]] = None)

    Initialize a `CommentForest` instance.

    Parameters:

      - submission – An instance of `Submission` that is the parent of the comments.

      - comments – Initialize the forest with a list of comments (default: `None`).

  __len__() → int

    Return the number of top-level comments in the forest.

  list() → List[Union[praw.models.Comment, praw.models.MoreComments]]

    Return a flattened list of all comments.

    This list may contain `MoreComments` instances if `replace_more()` was not called first.

  replace_more(*, limit: Optional[int] = 32, threshold: int = 0) → List[praw.models.MoreComments]

    Update the comment forest by resolving instances of `MoreComments`.

    Parameters:

      - limit – The maximum number of `MoreComments` instances to replace. Each replacement requires 1 API request. Set to `None` to have no limit, or to `0` to remove all `MoreComments` instances without additional requests (default: `32`).

      - threshold – The minimum number of children comments a `MoreComments` instance must have in order to be replaced. `MoreComments` instances that represent “continue this thread” links unfortunately appear to have 0 children (default: `0`).

    Returns:

      A list of `MoreComments` instances that were not replaced.

    Raises:

      `prawcore.TooManyRequests` when used concurrently.

    For example, to replace up to 32 `MoreComments` instances of a submission try:

        submission = reddit.submission("3hahrw")
        submission.comments.replace_more()

    Alternatively, to replace `MoreComments` instances within the replies of a single comment try:

        comment = reddit.comment("d8r4im1")
        comment.refresh()
        comment.replies.replace_more()

    Note

    This method can take a long time as each replacement will discover at most 100 new `Comment` instances. As a result, consider looping and handling exceptions until the method returns successfully. For example:

        while True:
            try:
                submission.comments.replace_more()
                break
            except PossibleExceptions:
                print("Handling replace_more exception")
                sleep(1)

    Warning

    If this method is called, and the comments are refreshed, calling this method again will result in a `DuplicateReplaceException`.