def get_posts(self, limit=10, sort="hot", category=None, start=None): """ Get multiple posts in an array. :param int limit: Limit the list of posts by ``limit`` :param str sort: Sort the list by "recent" or "payout" :param str category: Only show posts in this category :param str start: Show posts after this post. Takes an identifier of the form ``@author/permlink`` """ from golos.post import Post discussion_query = { "tag": category, "limit": limit, } if start: author, permlink = resolve_identifier(start) discussion_query["start_author"] = author discussion_query["start_permlink"] = permlink if sort not in [ "trending", "created", "active", "cashout", "payout", "votes", "children", "hot" ]: raise Exception("Invalid choice of '--sort'!") func = getattr(self, "get_discussions_by_%s" % sort) r = [] for p in func(discussion_query): r.append(Post(p, steemd_instance=self)) return r
def refresh(self): post_author, post_permlink = resolve_identifier(self.identifier) post = self.steemd.get_content(post_author, post_permlink) if not post["permlink"]: raise PostDoesNotExist("Post does not exist: %s" % self.identifier) # If this 'post' comes from an operation, it might carry a patch if "body" in post and re.match("^@@", post["body"]): self.patched = True # TODO: Check # This field is returned from blockchain, but it's empty. Fill it post['reblogged_by'] = [i for i in self.steemd.get_reblogged_by(post_author, post_permlink) if i != post_author] # Parse Times parse_times = ["active", "cashout_time", "created", "last_payout", "last_update", "max_cashout_time"] for p in parse_times: post[p] = parse_time(post.get(p, "1970-01-01T00:00:00")) # Parse Amounts sbd_amounts = [ 'total_payout_value', 'max_accepted_payout', 'pending_payout_value', 'curator_payout_value', 'total_pending_payout_value', 'promoted', ] for p in sbd_amounts: post[p] = Amount(post.get(p, "0.000 GBG")) # calculate trending and hot scores for sorting post['score_trending'] = calculate_trending(post.get('net_rshares', 0), post['created']) post['score_hot'] = calculate_hot(post.get('net_rshares', 0), post['created']) # turn json_metadata into python dict meta_str = post.get("json_metadata", "{}") post['json_metadata'] = silent(json.loads)(meta_str) or {} post["tags"] = [] post['community'] = '' if isinstance(post['json_metadata'], dict): if post["depth"] == 0: tags = [post["parent_permlink"]] tags += get_in(post, ['json_metadata', 'tags'], default=[]) tags_set = set(tags) post["tags"] = [tag for tag in tags if tag not in tags_set] post['community'] = get_in(post, ['json_metadata', 'community'], default='') # If this post is a comment, retrieve the root comment self.root_identifier, self.category = self._get_root_identifier(post) self._store_post(post)
def get_replies(self): """ Return **first-level** comments of the post. """ post_author, post_permlink = resolve_identifier(self.identifier) replies = self.steemd.get_content_replies(post_author, post_permlink) return map(silent(Post), replies)
def test_resolveIdentifier(self): self.assertEqual(resolve_identifier("A/B"), ("A", "B"))