diff --git a/apps/cic-cache/cic_cache/cache.py b/apps/cic-cache/cic_cache/cache.py index c8fae935..10e8c458 100644 --- a/apps/cic-cache/cic_cache/cache.py +++ b/apps/cic-cache/cic_cache/cache.py @@ -117,17 +117,17 @@ class DataCache(Cache): if limit == 0: limit = DEFAULT_LIMIT rows = list_transactions_mined_with_data(self.session, offset, limit, block_offset, block_limit, oldest=oldest) - return self.__process_rows(rows) + return self.__process_rows(rows, oldest) def load_transactions_account_with_data(self, address, offset, limit, block_offset=None, block_limit=None, oldest=False): if limit == 0: limit = DEFAULT_LIMIT rows = list_transactions_account_mined_with_data(self.session, address, offset, limit, block_offset, block_limit, oldest=oldest) - return self.__process_rows(rows) + return self.__process_rows(rows, oldest) - def __process_rows(self, rows): + def __process_rows(self, rows, oldest): tx_cache = [] highest_block = -1; lowest_block = -1; @@ -135,7 +135,12 @@ class DataCache(Cache): for r in rows: if highest_block == -1: highest_block = r['block_number'] - lowest_block = r['block_number'] + lowest_block = r['block_number'] + else: + if oldest: + highest_block = r['block_number'] + else: + lowest_block = r['block_number'] tx_type = 'unknown' if r['value'] != None: diff --git a/apps/cic-cache/cic_cache/db/list.py b/apps/cic-cache/cic_cache/db/list.py index 48916bee..4052471e 100644 --- a/apps/cic-cache/cic_cache/db/list.py +++ b/apps/cic-cache/cic_cache/db/list.py @@ -172,7 +172,7 @@ def list_transactions_account_mined_with_data( else: s = "SELECT tx_hash, block_number, date_block, sender, recipient, from_value, to_value, source_token, destination_token, success, domain, value FROM tx LEFT JOIN tag_tx_link ON tx.id = tag_tx_link.tx_id LEFT JOIN tag ON tag_tx_link.tag_id = tag.id WHERE block_number >= {} AND (sender = '{}' OR recipient = '{}') ORDER BY block_number {}, tx_index {} LIMIT {} OFFSET {}".format(block_offset, address, address, order_by, order_by, limit, offset) else: - s = "SELECT tx_hash, block_number, date_block, sender, recipient, from_value, to_value, source_token, destination_token, success, domain, value FROM tx LEFT JOIN tag_tx_link ON tx.id = tag_tx_link.tx_id LEFT JOIN tag ON tag_tx_link.tag_id = tag.id WHERE sender = '{}' OR recipient = '{}' ORDER BY block_number , tx_index {} LIMIT {} OFFSET {}".format(address, address, order_by, order_by, limit, offset) + s = "SELECT tx_hash, block_number, date_block, sender, recipient, from_value, to_value, source_token, destination_token, success, domain, value FROM tx LEFT JOIN tag_tx_link ON tx.id = tag_tx_link.tx_id LEFT JOIN tag ON tag_tx_link.tag_id = tag.id WHERE sender = '{}' OR recipient = '{}' ORDER BY block_number {}, tx_index {} LIMIT {} OFFSET {}".format(address, address, order_by, order_by, limit, offset) r = session.execute(s) return r diff --git a/apps/cic-cache/tests/conftest.py b/apps/cic-cache/tests/conftest.py index c158034e..478c261f 100644 --- a/apps/cic-cache/tests/conftest.py +++ b/apps/cic-cache/tests/conftest.py @@ -127,7 +127,8 @@ def more_txs( session.commit() - return txs + [tx_hash] + return [tx_hash] + txs + @pytest.fixture(scope='function') def tag_txs( diff --git a/apps/cic-cache/tests/test_cache.py b/apps/cic-cache/tests/test_cache.py index c3eed0ca..a5fdcc0d 100644 --- a/apps/cic-cache/tests/test_cache.py +++ b/apps/cic-cache/tests/test_cache.py @@ -44,7 +44,6 @@ def test_cache_data( session = init_database c = DataCache(session) - #b = c.load_transactions_with_data(0, 100, block_offset=410000, block_limit=420000, oldest=True) b = c.load_transactions_with_data(0, 3) #410000, 420000) #, 100, block_offset=410000, block_limit=420000, oldest=True) assert len(b[2]) == 2 @@ -96,6 +95,10 @@ def test_cache_ranges( assert b[0] == oldest assert b[1] == mid + b = c.load_transactions(0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block'], oldest=True) + assert b[0] == oldest + assert b[1] == mid + # now check when supplying account b = c.load_transactions_account(list_actors['alice'], 0, 100) assert b[0] == oldest @@ -132,7 +135,7 @@ def test_cache_ranges_data( list_defaults, list_actors, list_tokens, - txs, + more_txs, ): session = init_database @@ -142,62 +145,108 @@ def test_cache_ranges_data( newest = list_defaults['block'] + 2 c = DataCache(session) + b = c.load_transactions_with_data(0, 100) - assert len(b) == 3 + assert b[0] == oldest + assert b[1] == newest + assert len(b[2]) == 3 + assert b[2][0]['tx_hash'] == more_txs[0] + assert b[2][2]['tx_hash'] == more_txs[2] + b = c.load_transactions_with_data(1, 2) + assert b[0] == oldest + assert b[1] == mid + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[1] + assert b[2][1]['tx_hash'] == more_txs[2] -# b = c.load_transactions(1, 2) -# assert b[0] == oldest -# assert b[1] == mid -# -# b = c.load_transactions(0, 2) -# assert b[0] == mid -# assert b[1] == newest -# -# b = c.load_transactions(0, 1) -# assert b[0] == newest -# assert b[1] == newest -# -# b = c.load_transactions(0, 100, oldest=True) -# assert b[0] == oldest -# assert b[1] == newest -# -# b = c.load_transactions(0, 100, block_offset=list_defaults['block']) -# assert b[0] == mid -# assert b[1] == newest -# -# b = c.load_transactions(0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block']) -# assert b[0] == oldest -# assert b[1] == mid -# -# # now check when supplying account -# b = c.load_transactions_account(list_actors['alice'], 0, 100) -# assert b[0] == oldest -# assert b[1] == newest -# -# b = c.load_transactions_account(list_actors['bob'], 0, 100) -# assert b[0] == mid -# assert b[1] == mid -# -# b = c.load_transactions_account(list_actors['diane'], 0, 100) -# assert b[0] == oldest -# assert b[1] == newest -# -# # add block filter to the mix -# b = c.load_transactions_account(list_actors['alice'], 0, 100, block_offset=list_defaults['block']) -# assert b[0] == mid -# assert b[1] == newest -# -# b = c.load_transactions_account(list_actors['alice'], 0, 100, block_offset=list_defaults['block']) -# assert b[0] == mid -# assert b[1] == newest -# -# b = c.load_transactions_account(list_actors['bob'], 0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block']) -# assert b[0] == mid -# assert b[1] == mid -# -# b = c.load_transactions_account(list_actors['diane'], 0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block']) -# assert b[0] == oldest -# assert b[1] == oldest -# -# + b = c.load_transactions_with_data(0, 2) + assert b[0] == mid + assert b[1] == newest + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[0] + assert b[2][1]['tx_hash'] == more_txs[1] + + b = c.load_transactions_with_data(0, 1) + assert b[0] == newest + assert b[1] == newest + assert len(b[2]) == 1 + assert b[2][0]['tx_hash'] == more_txs[0] + + b = c.load_transactions_with_data(0, 100, oldest=True) + assert b[0] == oldest + assert b[1] == newest + assert len(b[2]) == 3 + assert b[2][0]['tx_hash'] == more_txs[2] + assert b[2][1]['tx_hash'] == more_txs[1] + assert b[2][2]['tx_hash'] == more_txs[0] + + b = c.load_transactions_with_data(0, 100, block_offset=list_defaults['block']) + assert b[0] == mid + assert b[1] == newest + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[0] + assert b[2][1]['tx_hash'] == more_txs[1] + + b = c.load_transactions_with_data(0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block']) + assert b[0] == oldest + assert b[1] == mid + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[1] + assert b[2][1]['tx_hash'] == more_txs[2] + + b = c.load_transactions_with_data(0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block'], oldest=True) + assert b[0] == oldest + assert b[1] == mid + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[2] + assert b[2][1]['tx_hash'] == more_txs[1] + + # now check when supplying account + b = c.load_transactions_account_with_data(list_actors['alice'], 0, 100) + assert b[0] == oldest + assert b[1] == newest + assert len(b[2]) == 3 + assert b[2][0]['tx_hash'] == more_txs[0] + assert b[2][1]['tx_hash'] == more_txs[1] + assert b[2][2]['tx_hash'] == more_txs[2] + + b = c.load_transactions_account_with_data(list_actors['bob'], 0, 100) + assert b[0] == mid + assert b[1] == mid + assert len(b[2]) == 1 + assert b[2][0]['tx_hash'] == more_txs[1] + + b = c.load_transactions_account_with_data(list_actors['diane'], 0, 100) + assert b[0] == oldest + assert b[1] == newest + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[0] + assert b[2][1]['tx_hash'] == more_txs[2] + + # add block filter to the mix + b = c.load_transactions_account_with_data(list_actors['alice'], 0, 100, block_offset=list_defaults['block']) + assert b[0] == mid + assert b[1] == newest + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[0] + assert b[2][1]['tx_hash'] == more_txs[1] + + b = c.load_transactions_account_with_data(list_actors['alice'], 0, 100, block_offset=list_defaults['block']) + assert b[0] == mid + assert b[1] == newest + assert len(b[2]) == 2 + assert b[2][0]['tx_hash'] == more_txs[0] + assert b[2][1]['tx_hash'] == more_txs[1] + + b = c.load_transactions_account_with_data(list_actors['bob'], 0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block']) + assert b[0] == mid + assert b[1] == mid + assert len(b[2]) == 1 + assert b[2][0]['tx_hash'] == more_txs[1] + + b = c.load_transactions_account_with_data(list_actors['diane'], 0, 100, block_offset=list_defaults['block'] - 1, block_limit=list_defaults['block']) + assert b[0] == oldest + assert b[1] == oldest + assert len(b[2]) == 1 + assert b[2][0]['tx_hash'] == more_txs[2]