Change data endpoint to block range

This commit is contained in:
nolash 2021-05-18 18:16:02 +02:00
parent f035bd3e9f
commit dd9305a0f2
Signed by untrusted user who does not match committer: lash
GPG Key ID: 21D2E7BB88C2A746
6 changed files with 33 additions and 19 deletions

View File

@ -97,8 +97,8 @@ class BloomCache(Cache):
class DataCache(Cache): class DataCache(Cache):
def load_transactions_with_data(self, offset, limit): def load_transactions_with_data(self, offset, end):
rows = list_transactions_mined_with_data(self.session, offset, limit) rows = list_transactions_mined_with_data(self.session, offset, end)
tx_cache = [] tx_cache = []
highest_block = -1; highest_block = -1;
lowest_block = -1; lowest_block = -1;

View File

@ -31,7 +31,7 @@ def list_transactions_mined(
def list_transactions_mined_with_data( def list_transactions_mined_with_data(
session, session,
offset, offset,
limit, end,
): ):
"""Executes db query to return all confirmed transactions according to the specified offset and limit. """Executes db query to return all confirmed transactions according to the specified offset and limit.
@ -42,12 +42,12 @@ def list_transactions_mined_with_data(
:result: Result set :result: Result set
:rtype: SQLAlchemy.ResultProxy :rtype: SQLAlchemy.ResultProxy
""" """
s = "SELECT tx_hash, block_number, date_block, sender, recipient, from_value, to_value, source_token, destination_token, 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" s = "SELECT tx_hash, block_number, date_block, sender, recipient, from_value, to_value, source_token, destination_token, 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 block_number <= {} ORDER BY block_number ASC, tx_index ASC".format(offset, end)
r = session.execute(s) r = session.execute(s)
return r return r
def list_transactions_account_mined( def list_transactions_account_mined(
session, session,
address, address,

View File

@ -14,7 +14,7 @@ logg = logging.getLogger(__name__)
re_transactions_all_bloom = r'/tx/(\d+)?/?(\d+)/?' re_transactions_all_bloom = r'/tx/(\d+)?/?(\d+)/?'
re_transactions_account_bloom = r'/tx/user/((0x)?[a-fA-F0-9]+)/?(\d+)?/?(\d+)/?' re_transactions_account_bloom = r'/tx/user/((0x)?[a-fA-F0-9]+)/?(\d+)?/?(\d+)/?'
re_transactions_all_data = re_transactions_all_bloom re_transactions_all_data = r'/txa/(\d+)/(\d+)/?'
DEFAULT_LIMIT = 100 DEFAULT_LIMIT = 100
@ -87,15 +87,13 @@ def process_transactions_all_data(session, env):
if env.get('HTTP_X_CIC_CACHE_MODE') != 'all': if env.get('HTTP_X_CIC_CACHE_MODE') != 'all':
return None return None
offset = DEFAULT_LIMIT offset = r[1]
if r.lastindex > 0: end = r[2]
offset = r[1] if r[2] < r[1]:
limit = 0 raise ValueError('cart before the horse, dude')
if r.lastindex > 1:
limit = r[2]
c = DataCache(session) c = DataCache(session)
(lowest_block, highest_block, tx_cache) = c.load_transactions_with_data(offset, limit) (lowest_block, highest_block, tx_cache) = c.load_transactions_with_data(offset, end)
for r in tx_cache: for r in tx_cache:
r['date_block'] = r['date_block'].timestamp() r['date_block'] = r['date_block'].timestamp()

View File

@ -59,7 +59,12 @@ def application(env, start_response):
process_transactions_all_bloom, process_transactions_all_bloom,
process_transactions_account_bloom, process_transactions_account_bloom,
]: ]:
r = handler(session, env) r = None
try:
r = handler(session, env)
except ValueError as e:
start_response('400 {}'.format(str(e)))
return []
if r != None: if r != None:
(mime_type, content) = r (mime_type, content) = r
break break

View File

@ -1,6 +1,9 @@
# standard imports # standard imports
import json import json
# external imports
import pytest
# local imports # local imports
from cic_cache.runnable.daemons.query import process_transactions_all_data from cic_cache.runnable.daemons.query import process_transactions_all_data
@ -11,10 +14,18 @@ def test_api_all_data(
): ):
env = { env = {
'PATH_INFO': '/tx/0/100', 'PATH_INFO': '/txa/410000/420000',
'HTTP_X_CIC_CACHE_MODE': 'all', 'HTTP_X_CIC_CACHE_MODE': 'all',
} }
j = process_transactions_all_data(init_database, env) j = process_transactions_all_data(init_database, env)
o = json.loads(j[1]) o = json.loads(j[1])
assert len(o['data']) == 2 assert len(o['data']) == 2
env = {
'PATH_INFO': '/txa/420000/410000',
'HTTP_X_CIC_CACHE_MODE': 'all',
}
with pytest.raises(ValueError):
j = process_transactions_all_data(init_database, env)

View File

@ -47,10 +47,10 @@ def test_cache_data(
session = init_database session = init_database
c = DataCache(session) c = DataCache(session)
b = c.load_transactions_with_data(0, 100) b = c.load_transactions_with_data(410000, 420000)
assert len(b[2]) == 2 assert len(b[2]) == 2
assert b[2][0]['tx_hash'] == txs[0] assert b[2][0]['tx_hash'] == txs[1]
assert b[2][0]['tx_type'] == 'unknown' assert b[2][1]['tx_type'] == 'unknown'
assert b[2][1]['tx_type'] == 'test.taag' assert b[2][0]['tx_type'] == 'test.taag'