diff --git a/beem/account.py b/beem/account.py index ed82f978124149fb3f32bc916d1aa02ade5a0330..1c2ae67feb3150f5b20174dd4cb10df812cea573 100644 --- a/beem/account.py +++ b/beem/account.py @@ -938,6 +938,34 @@ class Account(BlockchainObject): else: return self.steem.rpc.get_conversion_requests(account) + def get_vesting_delegations(self, start_account="", limit=100, account=None): + """ Returns the vesting delegations by an account. + + :param str account: When set, a different account is used for the request (Default is object account name) + :param str start_account: Only used in pre-appbase nodes + :param int limit: Only used in pre-appbase nodes + :rtype: list + + .. code-block:: python + + >>> from beem.account import Account + >>> account = Account("test") + >>> account.get_vesting_delegations() + [] + + """ + if account is None: + account = self["name"] + elif isinstance(account, Account): + account = account["name"] + if not self.steem.is_connected(): + raise OfflineHasNoRPCException("No RPC available in offline mode!") + self.steem.rpc.set_next_node_on_empty_reply(False) + if self.steem.rpc.get_use_appbase(): + return self.steem.rpc.find_vesting_delegations({'account': account}, api="database")['delegations'] + else: + return self.steem.rpc.get_vesting_delegations(account, start_account, limit) + def get_withdraw_routes(self, account=None): """ Returns the withdraw routes for an account. diff --git a/beem/block.py b/beem/block.py index 9ec7b9f44b52cb9f0ad3fabfffc553c4fd61734a..4e19a228b15ee3cee5f8a718a8df408d18bae6c0 100644 --- a/beem/block.py +++ b/beem/block.py @@ -84,19 +84,13 @@ class Block(BlockchainObject): if p in block and isinstance(block.get(p), string_types): block[p] = formatTimeString(block.get(p, "1970-01-01T00:00:00")) if "transactions" in block: - new_transactions = [] - for trx in block["transactions"]: - if 'expiration' in trx and isinstance(trx.get('expiration'), string_types): - trx['expiration'] = formatTimeString(trx.get('expiration', "1970-01-01T00:00:00")) - new_transactions.append(trx) - block["transactions"] = new_transactions + for i in range(len(block["transactions"])): + if 'expiration' in block["transactions"][i] and isinstance(block["transactions"][i]["expiration"], string_types): + block["transactions"][i]["expiration"] = formatTimeString(block["transactions"][i]["expiration"]) elif "operations" in block: - new_operations = [] - for trx in block["operations"]: - if 'timestamp' in trx and isinstance(trx.get('timestamp'), string_types): - trx['timestamp'] = formatTimeString(trx.get('timestamp', "1970-01-01T00:00:00")) - new_operations.append(trx) - block["operations"] = new_operations + for i in range(len(block["operations"])): + if 'timestamp' in block["operations"][i] and isinstance(block["operations"][i]["timestamp"], string_types): + block["operations"][i]["timestamp"] = formatTimeString(block["operations"][i]["timestamp"]) return block def json(self): @@ -111,29 +105,19 @@ class Block(BlockchainObject): output[p] = formatTimeString(p_date) else: output[p] = p_date + if "transactions" in output: - new_transactions = [] - for trx in output["transactions"]: - if 'expiration' in trx: - p_date = trx.get('expiration', datetime(1970, 1, 1, 0, 0)) - if isinstance(p_date, (datetime, date)): - trx['expiration'] = formatTimeString(p_date) - else: - trx['expiration'] = p_date - new_transactions.append(trx) - output["transactions"] = new_transactions + for i in range(len(output["transactions"])): + if 'expiration' in output["transactions"][i] and isinstance(output["transactions"][i]["expiration"], (datetime, date)): + output["transactions"][i]["expiration"] = formatTimeString(output["transactions"][i]["expiration"]) elif "operations" in output: - new_operations = [] - for trx in output["operations"]: - if 'timestamp' in trx: - p_date = trx.get('timestamp', datetime(1970, 1, 1, 0, 0)) - if isinstance(p_date, (datetime, date)): - trx['timestamp'] = formatTimeString(p_date) - else: - trx['timestamp'] = p_date - new_operations.append(trx) - output["operations"] = new_operations - return json.loads(str(json.dumps(output))) + for i in range(len(output["operations"])): + if 'timestamp' in output["operations"][i] and isinstance(output["operations"][i]["timestamp"], (datetime, date)): + output["operations"][i]["timestamp"] = formatTimeString(output["operations"][i]["timestamp"]) + + ret = json.loads(str(json.dumps(output))) + output = self._parse_json_data(output) + return ret def refresh(self): """ Even though blocks never change, you freshly obtain its contents