diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4ca2b310bedd33af777fbfad0edfe70da8b7c977..be33bdada16f67fd2d06517e613224e57309143a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,5 +1,13 @@ Changelog ========= +0.20.1 +------ +* Improved get_rc_manabar(), get_manabar() output +* get_voting_power() fixed again +* print_info for account improved +* get_manabar_recharge_time_str(), get_manabar_recharge_timedelta() and get_manabar_recharge_time() added +* https://steemd-appbase.steemit.com added to nodelist + 0.20.0 ------ * Fully supporting hf20 diff --git a/beem/account.py b/beem/account.py index 922dfeeef51f7f874ca7f12b73f0379e8c6d2d45..df835c0181c1c3b67b743e1b89441a4fd1ff6bcb 100644 --- a/beem/account.py +++ b/beem/account.py @@ -228,12 +228,16 @@ class Account(BlockchainObject): def get_rc_manabar(self): """Returns current_mana and max_mana for RC""" + estimated_max = int(self.get_vests()) rc_param = self.get_rc() - max_mana = int(rc_param["max_rc"]) - last_update = datetime.utcfromtimestamp(rc_param["rc_manabar"]["last_update_time"]) + current_mana = int(rc_param["rc_manabar"]["current_mana"]) + last_update_time = rc_param["rc_manabar"]["last_update_time"] + last_update = datetime.utcfromtimestamp(last_update_time) diff_in_seconds = (addTzInfo(datetime.utcnow()) - addTzInfo(last_update)).total_seconds() - current_mana = rc_param["rc_manabar"]["current_mana"] + diff_in_seconds * max_mana / (5 * 24 * 60 * 60) - return {"current_mana": current_mana, "max_mana": max_mana} + estimated_mana = int(current_mana + diff_in_seconds * estimated_max / STEEM_VOTING_MANA_REGENERATION_SECONDS) + estimated_pct = estimated_mana / estimated_max * 100 + return {"current_mana": current_mana, "last_update_time": last_update_time, + "estimated_mana": estimated_mana, "estimated_max": estimated_max, "estimated_pct": estimated_pct} def get_similar_account_names(self, limit=5): """ Returns ``limit`` account names similar to the current account @@ -305,25 +309,28 @@ class Account(BlockchainObject): last_vote_time_str = formatTimedelta(addTzInfo(datetime.utcnow()) - self["last_vote_time"]) try: rc_mana = self.get_rc_manabar() + rc = self.get_rc() except: rc_mana = None + vote_mana = self.get_manabar() if use_table: t = PrettyTable(["Key", "Value"]) t.align = "l" t.add_row(["Name (rep)", self.name + " (%.2f)" % (self.rep)]) - t.add_row(["Voting Power", "%.2f %%, " % (self.get_voting_power())]) + t.add_row(["Voting Power", "%.2f %%, " % (vote_mana["estimated_pct"])]) t.add_row(["Vote Value", "%.2f $" % (self.get_voting_value_SBD())]) t.add_row(["Last vote", "%s ago" % last_vote_time_str]) - t.add_row(["Full in ", "%s" % (self.get_recharge_time_str())]) + t.add_row(["Full in ", "%s" % (self.get_manabar_recharge_time_str(vote_mana))]) t.add_row(["Steem Power", "%.2f STEEM" % (self.get_steem_power())]) t.add_row(["Balance", "%s, %s" % (str(self.balances["available"][0]), str(self.balances["available"][1]))]) - if bandwidth["allocated"] > 0: + if False and bandwidth["allocated"] > 0: t.add_row(["Remaining Bandwidth", "%.2f %%" % (remaining)]) t.add_row(["used/allocated Bandwidth", "(%.0f kb of %.0f mb)" % (used_kb, allocated_mb)]) if rc_mana is not None: t.add_row(["Remaining RC", "%.2f %%" % (rc_mana["current_mana"] / rc_mana["max_mana"] * 100)]) - t.add_row(["used/allocated RC", "(%.0f of %.0f)" % (rc_mana["current_mana"], rc_mana["max_mana"])]) + t.add_row(["used/allocated RC", "(%.0f of %.0f)" % (int(rc["max_rc"]) * rc_mana["estimated_pct"], int(rc["max_rc"]))]) + t.add_row(["Full in ", "%s" % (self.get_manabar_recharge_time_str(rc_mana))]) if return_str: return t.get_string(**kwargs) else: @@ -331,20 +338,21 @@ class Account(BlockchainObject): else: ret = self.name + " (%.2f) \n" % (self.rep) ret += "--- Voting Power ---\n" - ret += "%.2f %%, " % (self.get_voting_power()) + ret += "%.2f %%, " % (vote_mana["estimated_pct"]) ret += " VP = %.2f $\n" % (self.get_voting_value_SBD()) - ret += "full in %s \n" % (self.get_recharge_time_str()) + ret += "full in %s \n" % (self.get_manabar_recharge_time_str(vote_mana)) ret += "--- Balance ---\n" ret += "%.2f SP, " % (self.get_steem_power()) ret += "%s, %s\n" % (str(self.balances["available"][0]), str(self.balances["available"][1])) - if bandwidth["allocated"] > 0: + if False and bandwidth["allocated"] > 0: ret += "--- Bandwidth ---\n" ret += "Remaining: %.2f %%" % (remaining) ret += " (%.0f kb of %.0f mb)\n" % (used_kb, allocated_mb) if rc_mana is not None: ret += "--- RC manabar ---\n" - ret += "Remaining: %.2f %%" % (rc_mana["current_mana"] / rc_mana["max_mana"] * 100) - ret += " (%.0f of %.0f)" % (rc_mana["current_mana"], rc_mana["max_mana"]) + ret += "Remaining: %.2f %%" % (rc_mana["current_mana"] / rc_mana["estimated_max"] * 100) + ret += " (%.0f of %.0f)\n" % (int(rc["max_rc"]) * rc_mana["estimated_pct"], int(rc["max_rc"])) + ret += "full in %s \n" % (self.get_manabar_recharge_time_str(rc_mana)) if return_str: return ret print(ret) @@ -365,31 +373,24 @@ class Account(BlockchainObject): def get_manabar(self): """"Return manabar""" - max_mana = int(self.get_vests()) - last_update = datetime.utcfromtimestamp(self["voting_manabar"]["last_update_time"]) + estimated_max = int(self.get_vests()) + current_mana = int(self["voting_manabar"]["current_mana"]) + last_update_time = self["voting_manabar"]["last_update_time"] + last_update = datetime.utcfromtimestamp(last_update_time) diff_in_seconds = (addTzInfo(datetime.utcnow()) - addTzInfo(last_update)).total_seconds() - current_mana = int(self["voting_manabar"]["current_mana"]) + diff_in_seconds * max_mana / (5 * 24 * 60 * 60) - return {"current_mana": current_mana, "max_mana": max_mana} + estimated_mana = int(current_mana + diff_in_seconds * estimated_max / STEEM_VOTING_MANA_REGENERATION_SECONDS) + estimated_pct = estimated_mana / estimated_max * 100 + return {"current_mana": current_mana, "last_update_time": last_update_time, + "estimated_mana": estimated_mana, "estimated_max": estimated_max, "estimated_pct": estimated_pct} def get_voting_power(self, with_regeneration=True): """ Returns the account voting power in the range of 0-100% """ + manabar = self.get_manabar() if with_regeneration: - regenerated_vp = 0 - if "voting_manabar" in self: - last_vote_time = datetime.utcfromtimestamp(self["voting_manabar"]["last_update_time"]) - diff_in_seconds = (addTzInfo(datetime.utcnow()) - addTzInfo(last_vote_time)).total_seconds() - regenerated_vp = diff_in_seconds * STEEM_100_PERCENT / STEEM_VOTING_MANA_REGENERATION_SECONDS / 100 - elif "last_vote_time" in self: - last_vote_time = self["last_vote_time"] - diff_in_seconds = (addTzInfo(datetime.utcnow()) - (last_vote_time)).total_seconds() - regenerated_vp = diff_in_seconds * STEEM_100_PERCENT / STEEM_VOTE_REGENERATION_SECONDS / 100 + total_vp = manabar["estimated_pct"] else: - regenerated_vp = 0 - if "voting_power" in self: - total_vp = (self["voting_power"] / 100 + regenerated_vp) - elif "voting_manabar" in self: - total_vp = int(self["voting_manabar"]["current_mana"]) / int(self.get_vests()) + regenerated_vp + total_vp = manabar["current_mana"] / manabar["estimated_max"] * 100 if total_vp > 100: return 100 if total_vp < 0: @@ -487,6 +488,38 @@ class Account(BlockchainObject): """ return addTzInfo(datetime.utcnow()) + self.get_recharge_timedelta(voting_power_goal) + def get_manabar_recharge_time_str(self, manabar, recharge_pct_goal=100): + """ Returns the account manabar recharge time as string + + :param dict manabar: manabar dict from get_manabar() or get_rc_manabar() + :param float recharge_pct_goal: mana recovery goal in percentage (default is 100) + + """ + remainingTime = self.get_manabar_recharge_timedelta(manabar, recharge_pct_goal=recharge_pct_goal) + return formatTimedelta(remainingTime) + + def get_manabar_recharge_timedelta(self, manabar, recharge_pct_goal=100): + """ Returns the account mana recharge time as timedelta object + + :param dict manabar: manabar dict from get_manabar() or get_rc_manabar() + :param float recharge_pct_goal: mana recovery goal in percentage (default is 100) + + """ + missing_rc_pct = recharge_pct_goal - manabar["estimated_pct"] + if missing_rc_pct < 0: + return 0 + recharge_seconds = missing_rc_pct * 100 * STEEM_VOTING_MANA_REGENERATION_SECONDS / STEEM_100_PERCENT + return timedelta(seconds=recharge_seconds) + + def get_manabar_recharge_time(self, manabar, recharge_pct_goal=100): + """ Returns the account mana recharge time in minutes + + :param dict manabar: manabar dict from get_manabar() or get_rc_manabar() + :param float recharge_pct_goal: mana recovery goal in percentage (default is 100) + + """ + return addTzInfo(datetime.utcnow()) + self.get_manabar_recharge_timedelta(manabar, recharge_pct_goal) + def get_feed(self, start_entry_id=0, limit=100, raw_data=False, short_entries=False, account=None): """ Returns a list of items in an account’s feed diff --git a/beem/blockchain.py b/beem/blockchain.py index 5226da94f5fe0ba8c4aa731c67cecadb11f06e5d..0c7a9613e22c3d194b6bfb770c5d74d03e6b23cc 100644 --- a/beem/blockchain.py +++ b/beem/blockchain.py @@ -922,7 +922,7 @@ class Blockchain(object): >>> from beem.blockchain import Blockchain >>> blockchain = Blockchain() - >>> ret = blockchain.find_rc_accounts("test") + >>> ret = blockchain.find_rc_accounts(["test"]) >>> len(ret) == 1 True diff --git a/beem/nodelist.py b/beem/nodelist.py index a285e19719ec69044deaf8249c4e264142757d4f..a739fbd5b2e3d284142828e012076bb3af79da48 100644 --- a/beem/nodelist.py +++ b/beem/nodelist.py @@ -28,7 +28,21 @@ class NodeList(list): nodes = [ { "url": "https://api.steemit.com", - "version": "0.19.11", + "version": "0.20.2", + "type": "appbase", + "owner": "steemit", + "score": 100 + }, + { + "url": "https://steemd-appbase.steemit.com", + "version": "0.20.2", + "type": "appbase", + "owner": "steemit", + "score": 100 + }, + { + "url": "wss://steemd-appbase.steemit.com", + "version": "0.20.2", "type": "appbase", "owner": "steemit", "score": 100 @@ -42,7 +56,7 @@ class NodeList(list): }, { "url": "https://appbasetest.timcliff.com", - "version": "0.19.11", + "version": "0.20.2", "type": "appbase", "owner": "timcliff", "score": 10 diff --git a/beem/version.py b/beem/version.py index ab30de6799be54b1b978ac21393d402fb1a86464..e567c425b51168aa204dfd5fb018f4dade307867 100644 --- a/beem/version.py +++ b/beem/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.20.0' +version = '0.20.1' diff --git a/beemapi/version.py b/beemapi/version.py index ab30de6799be54b1b978ac21393d402fb1a86464..e567c425b51168aa204dfd5fb018f4dade307867 100644 --- a/beemapi/version.py +++ b/beemapi/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.20.0' +version = '0.20.1' diff --git a/beembase/version.py b/beembase/version.py index ab30de6799be54b1b978ac21393d402fb1a86464..e567c425b51168aa204dfd5fb018f4dade307867 100644 --- a/beembase/version.py +++ b/beembase/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.20.0' +version = '0.20.1' diff --git a/beemgraphenebase/version.py b/beemgraphenebase/version.py index ab30de6799be54b1b978ac21393d402fb1a86464..e567c425b51168aa204dfd5fb018f4dade307867 100644 --- a/beemgraphenebase/version.py +++ b/beemgraphenebase/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.20.0' +version = '0.20.1' diff --git a/setup.py b/setup.py index be8dbb666874ec50651b07f76bc44bd9994cb70f..3797a987ac5bf3d45b52907698fd0a646e78fb10 100755 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ except LookupError: ascii = codecs.lookup('ascii') codecs.register(lambda name, enc=ascii: {True: enc}.get(name == 'mbcs')) -VERSION = '0.20.0' +VERSION = '0.20.1' tests_require = ['mock >= 2.0.0', 'pytest', 'pytest-mock', 'parameterized']