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
).
- list() List[Union[praw.models.Comment, praw.models.MoreComments]]
Return a flattened list of all comments.
This list may contain
MoreComments
instances ifreplace_more()
was not called first.
- replace_more(*, limit: 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 toNone
to have no limit, or to0
to remove allMoreComments
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
.