Skip to content
Snippets Groups Projects
Commit a2ea86de authored by Holger's avatar Holger
Browse files

Release of 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
parent ebc508a1
No related branches found
No related tags found
No related merge requests found
Changelog 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 0.20.0
------ ------
* Fully supporting hf20 * Fully supporting hf20
......
...@@ -228,12 +228,16 @@ class Account(BlockchainObject): ...@@ -228,12 +228,16 @@ class Account(BlockchainObject):
def get_rc_manabar(self): def get_rc_manabar(self):
"""Returns current_mana and max_mana for RC""" """Returns current_mana and max_mana for RC"""
estimated_max = int(self.get_vests())
rc_param = self.get_rc() rc_param = self.get_rc()
max_mana = int(rc_param["max_rc"]) current_mana = int(rc_param["rc_manabar"]["current_mana"])
last_update = datetime.utcfromtimestamp(rc_param["rc_manabar"]["last_update_time"]) 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() 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) estimated_mana = int(current_mana + diff_in_seconds * estimated_max / STEEM_VOTING_MANA_REGENERATION_SECONDS)
return {"current_mana": current_mana, "max_mana": max_mana} 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): def get_similar_account_names(self, limit=5):
""" Returns ``limit`` account names similar to the current account """ Returns ``limit`` account names similar to the current account
...@@ -305,25 +309,28 @@ class Account(BlockchainObject): ...@@ -305,25 +309,28 @@ class Account(BlockchainObject):
last_vote_time_str = formatTimedelta(addTzInfo(datetime.utcnow()) - self["last_vote_time"]) last_vote_time_str = formatTimedelta(addTzInfo(datetime.utcnow()) - self["last_vote_time"])
try: try:
rc_mana = self.get_rc_manabar() rc_mana = self.get_rc_manabar()
rc = self.get_rc()
except: except:
rc_mana = None rc_mana = None
vote_mana = self.get_manabar()
if use_table: if use_table:
t = PrettyTable(["Key", "Value"]) t = PrettyTable(["Key", "Value"])
t.align = "l" t.align = "l"
t.add_row(["Name (rep)", self.name + " (%.2f)" % (self.rep)]) 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(["Vote Value", "%.2f $" % (self.get_voting_value_SBD())])
t.add_row(["Last vote", "%s ago" % last_vote_time_str]) 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(["Steem Power", "%.2f STEEM" % (self.get_steem_power())])
t.add_row(["Balance", "%s, %s" % (str(self.balances["available"][0]), str(self.balances["available"][1]))]) 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(["Remaining Bandwidth", "%.2f %%" % (remaining)])
t.add_row(["used/allocated Bandwidth", "(%.0f kb of %.0f mb)" % (used_kb, allocated_mb)]) t.add_row(["used/allocated Bandwidth", "(%.0f kb of %.0f mb)" % (used_kb, allocated_mb)])
if rc_mana is not None: if rc_mana is not None:
t.add_row(["Remaining RC", "%.2f %%" % (rc_mana["current_mana"] / rc_mana["max_mana"] * 100)]) 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: if return_str:
return t.get_string(**kwargs) return t.get_string(**kwargs)
else: else:
...@@ -331,20 +338,21 @@ class Account(BlockchainObject): ...@@ -331,20 +338,21 @@ class Account(BlockchainObject):
else: else:
ret = self.name + " (%.2f) \n" % (self.rep) ret = self.name + " (%.2f) \n" % (self.rep)
ret += "--- Voting Power ---\n" 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 += " 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 += "--- Balance ---\n"
ret += "%.2f SP, " % (self.get_steem_power()) ret += "%.2f SP, " % (self.get_steem_power())
ret += "%s, %s\n" % (str(self.balances["available"][0]), str(self.balances["available"][1])) 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 += "--- Bandwidth ---\n"
ret += "Remaining: %.2f %%" % (remaining) ret += "Remaining: %.2f %%" % (remaining)
ret += " (%.0f kb of %.0f mb)\n" % (used_kb, allocated_mb) ret += " (%.0f kb of %.0f mb)\n" % (used_kb, allocated_mb)
if rc_mana is not None: if rc_mana is not None:
ret += "--- RC manabar ---\n" ret += "--- RC manabar ---\n"
ret += "Remaining: %.2f %%" % (rc_mana["current_mana"] / rc_mana["max_mana"] * 100) ret += "Remaining: %.2f %%" % (rc_mana["current_mana"] / rc_mana["estimated_max"] * 100)
ret += " (%.0f of %.0f)" % (rc_mana["current_mana"], rc_mana["max_mana"]) 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: if return_str:
return ret return ret
print(ret) print(ret)
...@@ -365,31 +373,24 @@ class Account(BlockchainObject): ...@@ -365,31 +373,24 @@ class Account(BlockchainObject):
def get_manabar(self): def get_manabar(self):
""""Return manabar""" """"Return manabar"""
max_mana = int(self.get_vests()) estimated_max = int(self.get_vests())
last_update = datetime.utcfromtimestamp(self["voting_manabar"]["last_update_time"]) 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() 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) estimated_mana = int(current_mana + diff_in_seconds * estimated_max / STEEM_VOTING_MANA_REGENERATION_SECONDS)
return {"current_mana": current_mana, "max_mana": max_mana} 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): def get_voting_power(self, with_regeneration=True):
""" Returns the account voting power in the range of 0-100% """ Returns the account voting power in the range of 0-100%
""" """
manabar = self.get_manabar()
if with_regeneration: if with_regeneration:
regenerated_vp = 0 total_vp = manabar["estimated_pct"]
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
else: else:
regenerated_vp = 0 total_vp = manabar["current_mana"] / manabar["estimated_max"] * 100
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
if total_vp > 100: if total_vp > 100:
return 100 return 100
if total_vp < 0: if total_vp < 0:
...@@ -487,6 +488,38 @@ class Account(BlockchainObject): ...@@ -487,6 +488,38 @@ class Account(BlockchainObject):
""" """
return addTzInfo(datetime.utcnow()) + self.get_recharge_timedelta(voting_power_goal) 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): 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 """ Returns a list of items in an account’s feed
......
...@@ -922,7 +922,7 @@ class Blockchain(object): ...@@ -922,7 +922,7 @@ class Blockchain(object):
>>> from beem.blockchain import Blockchain >>> from beem.blockchain import Blockchain
>>> blockchain = Blockchain() >>> blockchain = Blockchain()
>>> ret = blockchain.find_rc_accounts("test") >>> ret = blockchain.find_rc_accounts(["test"])
>>> len(ret) == 1 >>> len(ret) == 1
True True
......
...@@ -28,7 +28,21 @@ class NodeList(list): ...@@ -28,7 +28,21 @@ class NodeList(list):
nodes = [ nodes = [
{ {
"url": "https://api.steemit.com", "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", "type": "appbase",
"owner": "steemit", "owner": "steemit",
"score": 100 "score": 100
...@@ -42,7 +56,7 @@ class NodeList(list): ...@@ -42,7 +56,7 @@ class NodeList(list):
}, },
{ {
"url": "https://appbasetest.timcliff.com", "url": "https://appbasetest.timcliff.com",
"version": "0.19.11", "version": "0.20.2",
"type": "appbase", "type": "appbase",
"owner": "timcliff", "owner": "timcliff",
"score": 10 "score": 10
......
"""THIS FILE IS GENERATED FROM beem SETUP.PY.""" """THIS FILE IS GENERATED FROM beem SETUP.PY."""
version = '0.20.0' version = '0.20.1'
"""THIS FILE IS GENERATED FROM beem SETUP.PY.""" """THIS FILE IS GENERATED FROM beem SETUP.PY."""
version = '0.20.0' version = '0.20.1'
"""THIS FILE IS GENERATED FROM beem SETUP.PY.""" """THIS FILE IS GENERATED FROM beem SETUP.PY."""
version = '0.20.0' version = '0.20.1'
"""THIS FILE IS GENERATED FROM beem SETUP.PY.""" """THIS FILE IS GENERATED FROM beem SETUP.PY."""
version = '0.20.0' version = '0.20.1'
...@@ -16,7 +16,7 @@ except LookupError: ...@@ -16,7 +16,7 @@ except LookupError:
ascii = codecs.lookup('ascii') ascii = codecs.lookup('ascii')
codecs.register(lambda name, enc=ascii: {True: enc}.get(name == 'mbcs')) 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'] tests_require = ['mock >= 2.0.0', 'pytest', 'pytest-mock', 'parameterized']
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment