diff --git a/beem/amount.py b/beem/amount.py index b96b275d1512c19a9bf59f90790171f7350a37f7..63f126854a738a235dab97693ea8a188926d10f1 100644 --- a/beem/amount.py +++ b/beem/amount.py @@ -223,7 +223,7 @@ class Amount(dict): if not other["asset"] == self["asset"]: raise AssertionError() from .price import Price - return Price(self, other) + return Price(self, other, steem_instance=self.steem) else: a["amount"] //= other return a @@ -234,7 +234,7 @@ class Amount(dict): if not other["asset"] == self["asset"]: raise AssertionError() from .price import Price - return Price(self, other) + return Price(self, other, steem_instance=self.steem) else: a["amount"] /= other return a diff --git a/beem/cli.py b/beem/cli.py index d49c95f35ea60d9bf31e3040ccf9514426576b97..a747dea21e07d4e5b0907d45800e978a7a836024 100644 --- a/beem/cli.py +++ b/beem/cli.py @@ -1149,7 +1149,7 @@ def setprofile(variable, value, account, pair): acc["json_metadata"] = Profile(acc["json_metadata"] if acc["json_metadata"] else {}) acc["json_metadata"].update(profile) - tx = acc.update_account_profile(acc["json_metadata"]) + tx = acc.update_account_metadata(acc["json_metadata"]) if stm.unsigned and stm.nobroadcast and stm.steemconnect is not None: tx = stm.steemconnect.url_from_tx(tx) tx = json.dumps(tx, indent=4) @@ -1389,8 +1389,8 @@ def pricehistory(width, height, ascii): price_history = feed_history["price_history"] price = [] for h in price_history: - base = Amount(h["base"]) - quote = Amount(h["quote"]) + base = Amount(h["base"], steem_instance=stm) + quote = Amount(h["quote"], steem_instance=stm) price.append(base.amount / quote.amount) if ascii: charset = u'ascii' @@ -2384,7 +2384,7 @@ def pending(accounts, only_sum, post, comment, curation, length, author, permlin if curation: votes = AccountVotes(account, start=limit_time, steem_instance=stm) for vote in votes: - c = Comment(vote["authorperm"]) + c = Comment(vote["authorperm"], steem_instance=stm) rewards = c.get_curation_rewards() if not rewards["pending_rewards"]: continue diff --git a/beem/steem.py b/beem/steem.py index c08265b00ec3845e658b4673c256b0dec3fb869d..68213ec3462f4171ba681ac7b8d27959da9f1308 100644 --- a/beem/steem.py +++ b/beem/steem.py @@ -627,11 +627,13 @@ class Steem(object): @property def chain_params(self): - if self.offline: + if self.offline or self.rpc is None: from beemgraphenebase.chains import known_chains return known_chains["STEEM"] - else: + elif self.rpc.chain_params is not None: return self.rpc.chain_params + else: + return self.rpc.get_network() @property def prefix(self): @@ -790,7 +792,7 @@ class Steem(object): """ if tx: # If tx is provided, we broadcast the tx - return TransactionBuilder(tx).broadcast() + return TransactionBuilder(tx, steem_instance=self).broadcast() else: return self.txbuffer.broadcast() diff --git a/beemapi/graphenerpc.py b/beemapi/graphenerpc.py index 99b5574e1b5bb773fb71f2c8431c544ef23fc64b..3eb927d02fa9ad95eb7acc75d859f50ff8320235 100644 --- a/beemapi/graphenerpc.py +++ b/beemapi/graphenerpc.py @@ -137,6 +137,7 @@ class GrapheneRPC(object): self.ws = None self.url = None self.session = None + self.chain_params = None self.rpc_queue = [] if kwargs.get("autoconnect", True): self.rpcconnect() diff --git a/tests/beem/test_instance.py b/tests/beem/test_instance.py index be907b01c6c218353d685ca430d4bf86e70e6b7b..eec91a37b19a996289b66c13ac648a7a31af7a2d 100644 --- a/tests/beem/test_instance.py +++ b/tests/beem/test_instance.py @@ -8,6 +8,7 @@ import mock import string import unittest import random +from parameterized import parameterized from pprint import pprint from beem import Steem from beem.amount import Amount @@ -20,12 +21,13 @@ from beem.market import Market from beem.price import Price from beem.comment import Comment from beem.vote import Vote +from beemapi.exceptions import NumRetriesReached from beem.wallet import Wallet from beem.transactionbuilder import TransactionBuilder from beembase.operations import Transfer from beemgraphenebase.account import PasswordKey, PrivateKey, PublicKey from beem.utils import parse_time, formatTimedelta -from beemapi.rpcutils import NumRetriesReached +from beem.nodelist import NodeList # Py3 compatibility import sys @@ -36,77 +38,325 @@ core_unit = "STM" class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): - stm = shared_steem_instance() + nodelist = NodeList() + stm = Steem(node=nodelist.get_nodes()) stm.config.refreshBackup() - stm.set_default_nodes("") + stm.set_default_nodes(["xyz"]) del stm - cls.url = "https://api.steemitdev.com" - bts = Steem( - node=[cls.url], + + cls.urls = nodelist.get_nodes() + cls.bts = Steem( + node=cls.urls, nobroadcast=True, num_retries=10 ) - set_shared_steem_instance(bts) + set_shared_steem_instance(cls.bts) @classmethod def tearDownClass(cls): - stm = shared_steem_instance() + nodelist = NodeList() + stm = Steem(node=nodelist.get_nodes()) stm.config.recover_with_latest_backup() - def test_account(self): - acc = Account("test") - self.assertEqual(acc.steem.rpc.url, self.url) - self.assertEqual(acc["balance"].steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_account(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + acc = Account("test") + self.assertIn(acc.steem.rpc.url, self.urls) + self.assertIn(acc["balance"].steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Account("test", steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + acc = Account("test", steem_instance=stm) + self.assertIn(acc.steem.rpc.url, self.urls) + self.assertIn(acc["balance"].steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Account("test") - def test_amount(self): - o = Amount("1 SBD") - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_amount(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Amount("1 SBD") + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Amount("1 SBD", steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Amount("1 SBD", steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Amount("1 SBD") - def test_block(self): - o = Block(1) - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_block(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Block(1) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Block(1, steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Block(1, steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Block(1) - def test_blockchain(self): - o = Blockchain() - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_blockchain(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Blockchain() + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Blockchain(steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Blockchain(steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Blockchain() - def test_comment(self): - o = Comment("@gtg/witness-gtg-log") - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_comment(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Comment("@gtg/witness-gtg-log") + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Comment("@gtg/witness-gtg-log", steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Comment("@gtg/witness-gtg-log", steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Comment("@gtg/witness-gtg-log") - def test_market(self): - o = Market() - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_market(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Market() + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Market(steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Market(steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Market() - def test_price(self): - o = Price(10.0, "STEEM/SBD") - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_price(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Price(10.0, "STEEM/SBD") + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Price(10.0, "STEEM/SBD", steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Price(10.0, "STEEM/SBD", steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Price(10.0, "STEEM/SBD") - def test_vote(self): - o = Vote("@gtg/ffdhu-gtg-witness-log|gandalf") - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_vote(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Vote("@gtg/ffdhu-gtg-witness-log|gandalf") + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Vote("@gtg/ffdhu-gtg-witness-log|gandalf", steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Vote("@gtg/ffdhu-gtg-witness-log|gandalf", steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Vote("@gtg/ffdhu-gtg-witness-log|gandalf") - def test_wallet(self): - o = Wallet() - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_wallet(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Wallet() + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + o = Wallet(steem_instance=stm) + o.steem.get_config() + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Wallet(steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + o = Wallet() + o.steem.get_config() - def test_witness(self): - o = Witness("gtg") - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_witness(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Witness("gtg") + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Witness("gtg", steem_instance=stm) + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = Witness("gtg", steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + Witness("gtg") - def test_transactionbuilder(self): - o = TransactionBuilder() - self.assertEqual(o.steem.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_transactionbuilder(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = TransactionBuilder() + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + o = TransactionBuilder(steem_instance=stm) + o.steem.get_config() + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = TransactionBuilder(steem_instance=stm) + self.assertIn(o.steem.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + o = TransactionBuilder() + o.steem.get_config() - def test_steem(self): - stm = shared_steem_instance() - stm = Steem() - del stm - o = shared_steem_instance() - self.assertEqual(o.rpc.url, self.url) + @parameterized.expand([ + ("instance"), + ("steem") + ]) + def test_steem(self, node_param): + if node_param == "instance": + stm = Steem(node="abc", autoconnect=False, num_retries=1) + set_shared_steem_instance(self.bts) + o = Steem(node=self.urls) + o.get_config() + self.assertIn(o.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + stm.get_config() + else: + set_shared_steem_instance(Steem(node="abc", autoconnect=False, num_retries=1)) + stm = self.bts + o = stm + o.get_config() + self.assertIn(o.rpc.url, self.urls) + with self.assertRaises( + NumRetriesReached + ): + stm = shared_steem_instance() + stm.get_config() def test_config(self): - set_shared_config({"node": [self.url]}) + set_shared_config({"node": self.urls}) set_shared_steem_instance(None) o = shared_steem_instance() - self.assertEqual(o.rpc.url, self.url) + self.assertIn(o.rpc.url, self.urls)