From fa98397a4d73a876c31f88a577cc5bfc51e1d628 Mon Sep 17 00:00:00 2001 From: Holger Nahrstaedt <holger@nahrstaedt.de> Date: Sat, 28 Apr 2018 09:33:21 +0200 Subject: [PATCH] Allow condenser_api calls for appbase nodes steem * add option use_condenser steemnoderpc * refactoring Graphenerpc * condenser_api calls shen use_condenser=True is set. unit tests * test_comment and test_discussion uses 19.4 nodes now --- README.rst | 1 + beem/steem.py | 4 +--- beemapi/steemnoderpc.py | 5 ----- beemgrapheneapi/graphenerpc.py | 14 ++++++++++++-- tests/beem/test_comment.py | 3 ++- tests/beem/test_discussions.py | 3 ++- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/README.rst b/README.rst index 043bebdb..70ef94ce 100644 --- a/README.rst +++ b/README.rst @@ -136,6 +136,7 @@ Changelog * Memory consumption fer requests and websocket reduced when creating more instances of steem * trade_history added to market * Issue #4 fixed +* Steem(use_condenser=True) activates condenser_api calls for 19.4 nodes 0.19.23 ------- diff --git a/beem/steem.py b/beem/steem.py index 7c1bdb7a..53302590 100644 --- a/beem/steem.py +++ b/beem/steem.py @@ -129,7 +129,7 @@ class Steem(object): "irrversible") :param bool bundle: Do not broadcast transactions right away, but allow to bundle operations *(optional)* - :param bool appbase: Use the new appbase rpc protocol on nodes with version + :param bool use_condenser: Use the old condenser_api rpc protocol on nodes with version 0.19.4 or higher. The settings has no effect on nodes with version of 0.19.3 or lower. :param int num_retries: Set the maximum number of reconnects to the nodes before NumRetriesReached is raised. Disabled for -1. (default is -1) @@ -146,7 +146,6 @@ class Steem(object): self.expiration = int(kwargs.get("expiration", 30)) self.bundle = bool(kwargs.get("bundle", False)) self.blocking = kwargs.get("blocking", False) - appbase = kwargs.get("appbase", True) # Store config for access through other Classes self.config = config @@ -156,7 +155,6 @@ class Steem(object): rpcuser=rpcuser, rpcpassword=rpcpassword, **kwargs) - self.rpc.appbase = appbase self.data = {'last_refresh': None, 'dynamic_global_properties': None, 'feed_history': None, 'get_feed_history': None, 'hardfork_properties': None, diff --git a/beemapi/steemnoderpc.py b/beemapi/steemnoderpc.py index 8cf691c5..0f993c76 100644 --- a/beemapi/steemnoderpc.py +++ b/beemapi/steemnoderpc.py @@ -27,13 +27,8 @@ class SteemNodeRPC(GrapheneRPC): def __init__(self, *args, **kwargs): super(SteemNodeRPC, self).__init__(*args, **kwargs) - self.appbase = kwargs.get("appbase", False) self.next_node_on_empty_reply = False - def get_use_appbase(self): - """Returns True if appbase ready and appbase calls are set""" - return self.appbase and self.is_appbase_ready() - def set_next_node_on_empty_reply(self, next_node_on_empty_reply=True): """Switch to next node on empty reply for the next rpc call""" self.next_node_on_empty_reply = next_node_on_empty_reply diff --git a/beemgrapheneapi/graphenerpc.py b/beemgrapheneapi/graphenerpc.py index 3b9869f5..fd4ffe8a 100644 --- a/beemgrapheneapi/graphenerpc.py +++ b/beemgrapheneapi/graphenerpc.py @@ -161,6 +161,7 @@ class GrapheneRPC(object): self.rpc_queue = [] self.timeout = kwargs.get('timeout', 60) self.num_retries = kwargs.get("num_retries", -1) + self.use_condenser = kwargs.get("use_condenser", False) self.error_cnt = {} self.num_retries_call = kwargs.get("num_retries_call", 5) self.error_cnt_call = 0 @@ -185,6 +186,10 @@ class GrapheneRPC(object): """Check if node is appbase ready""" return self.current_rpc >= 2 + def get_use_appbase(self): + """Returns True if appbase ready and appbase calls are set""" + return not self.use_condenser and self.is_appbase_ready() + def rpcconnect(self, next_url=True): """Connect to next url in a loop.""" if self.urls is None: @@ -216,7 +221,10 @@ class GrapheneRPC(object): self.rpclogin(self.user, self.password) try: props = None - props = self.get_config(api="database") + if not self.use_condenser: + props = self.get_config(api="database") + else: + props = self.get_config() except Exception as e: if re.search("Bad Cast:Invalid cast from type", str(e)): self.current_rpc += 2 @@ -400,11 +408,13 @@ class GrapheneRPC(object): def method(*args, **kwargs): api_name = get_api_name(self.is_appbase_ready(), *args, **kwargs) + if self.is_appbase_ready() and self.use_condenser: + api_name = "condenser_api" # let's be able to define the num_retries per query self.num_retries_call = kwargs.get("num_retries_call", self.num_retries_call) add_to_queue = kwargs.get("add_to_queue", False) - query = get_query(self.is_appbase_ready(), self.get_request_id(), api_name, name, args) + query = get_query(self.is_appbase_ready() and not self.use_condenser, self.get_request_id(), api_name, name, args) if add_to_queue: self.rpc_queue.append(query) return None diff --git a/tests/beem/test_comment.py b/tests/beem/test_comment.py index a843389d..2fa81acc 100644 --- a/tests/beem/test_comment.py +++ b/tests/beem/test_comment.py @@ -19,7 +19,8 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): cls.bts = Steem( - node=get_node_list(appbase=False), + node=get_node_list(appbase=True), + use_condenser=True, nobroadcast=True, keys={"active": wif}, num_retries=10 diff --git a/tests/beem/test_discussions.py b/tests/beem/test_discussions.py index 1ed80f94..c11b68e5 100644 --- a/tests/beem/test_discussions.py +++ b/tests/beem/test_discussions.py @@ -25,7 +25,8 @@ class Testcases(unittest.TestCase): @classmethod def setUpClass(cls): cls.bts = Steem( - node=get_node_list(appbase=False), + node=get_node_list(appbase=True), + use_condenser=True, nobroadcast=True, keys={"active": wif}, num_retries=10 -- GitLab