Version of Python you are running
# python --version
Python 3.6.4
Version of steem-python you are running
# steempy --version
steempy 1.0.0
Expected Behavior
steem.blog.take() should return top-level posts for Blog(comments_only=False) and comments for Blog(comments_only=True). The distinction between post and comment internally uses steem.utils.is_comment(). This should returns False for root posts, True or others for comments.
Actual Behavior
steem.utils.is_comment() returns False if the post is a comment but the permlink doesn't start with "re-". As a result, the Blog().take() results may be lacking comments or list comments as root posts.
Steps to reproduce
Reply to a post with a custom permlink that doesn't start with "re-".
Example:
- root post: https://steemit.com/python/@stmdev/steem-utils-is-comment-root-post
- regular reply: https://steemit.com/python/@stmdev/re-steem-utils-is-comment-root-post-20180427t113939
- reply without "re-" in permlink: https://steemit.com/python/@stmdev/lorem-ipsum-dolor-sit-amet
>>> from steem.post import Post
>>> from steem.utils import is_comment
>>> is_comment(Post("stmdev/steem-utils-is-comment-root-post"))
False
>>> is_comment(Post("stmdev/re-steem-utils-is-comment-root-post-20180427t113939"))
'stmdev'
>>> is_comment(Post("stmdev/lorem-ipsum-dolor-sit-amet"))
False
steem.utils.is_comment is used in steem.blog.take() and therefore possibly returns wrong results for Blog(comments_only=True) and Blog(comments_only=False):
>>> from steem.blog import Blog
>>> b = Blog("stmdev", comments_only=False)
>>> b.take(5)
[<Post-stmdev/utils-iscomment-should-not-rely-on-re-in-permlink>, <Post-stmdev/lorem-ipsum-dolor-sit-amet>, <Post-stmdev/steem-utils-is-comment-root-post>, <Post-stmdev/difftest>, <Post-stmdev/clicking-tag-in-body-exceeding-1169-chars-triggers-a-502-bad-gateway>]
The second result in this example is actually a comment.
Stack Trace
none.
Possible fixes:
diff --git a/steem/utils.py b/steem/utils.py
index 856ebb8..8842fef 100755
--- a/steem/utils.py
+++ b/steem/utils.py
@@ -186,7 +186,7 @@ def is_comment(item):
The item can be a Post object or just a raw comment object from the
blockchain.
"""
- return item['permlink'][:3] == "re-" and item['parent_author']
+ return item['parent_author'] != ""
def time_elapsed(posting_time):
This would also avoid the inconsistency of returning False for root posts but the parent author as string for comments.
Alternatively: remove steem.utils.is_comment() and use steem.post.is_comment() instead?
Posted on Utopian.io - Rewarding Open Source Contributors