Change data endpoint to block range
This commit is contained in:
parent
f035bd3e9f
commit
dd9305a0f2
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user