Skip to content
Snippets Groups Projects
Commit 7d46be91 authored by Dariusz Kędzierski's avatar Dariusz Kędzierski
Browse files

Load from directory support. Bug fixes

parent 2cbc67e7
No related branches found
No related tags found
2 merge requests!456Release candidate v1 24,!336Mock data providers
""" Data provider for test operations """ """ Data provider for test operations """
import logging import logging
import os
from hive.indexer.mock_data_provider import MockDataProvider from hive.indexer.mock_data_provider import MockDataProvider
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class MockBlockProvider(MockDataProvider): class MockBlockProvider(MockDataProvider):
""" Data provider for test ops """ """ Data provider for test ops """
@classmethod
def load_block_data(cls, data_path):
if os.path.isdir(data_path):
log.warning("Loading mock block data from directory: {}".format(data_path))
cls.add_block_data_from_directory(data_path)
else:
log.warning("Loading mock block data from file: {}".format(data_path))
cls.add_block_data_from_file(data_path)
@classmethod
def add_block_data_from_directory(cls, dir_name):
for name in os.listdir(dir_name):
file_path = os.path.join(dir_name, name)
if os.path.isfile(file_path) and file_path.endswith(".json"):
cls.add_block_data_from_file(file_path)
@classmethod
def add_block_data_from_file(cls, file_name):
from json import load
data = {}
with open(file_name, "r") as src:
data = load(src)
for block_num, transactions in data.items():
cls.add_block_data(block_num, transactions)
@classmethod @classmethod
def add_block_data(cls, block_num, transactions): def add_block_data(cls, block_num, transactions):
if block_num in cls.block_data: if block_num in cls.block_data:
......
""" Data provider for test operations """ """ Data provider for test operations """
import logging import logging
from json import load, dumps
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
from json import load
class MockDataProvider(): class MockDataProvider():
""" Data provider for test operations """ """ Data provider for test operations """
block_data = {} block_data = {}
@classmethod @classmethod
def load_block_data(cls, data_path): def print_data(cls):
with open(data_path, "r") as data_file: print(dumps(cls.block_data, indent=4, sort_keys=True))
cls.block_data = load(data_file)
""" Data provider for test vops """ """ Data provider for test vops """
import logging import logging
import os
from hive.indexer.mock_data_provider import MockDataProvider from hive.indexer.mock_data_provider import MockDataProvider
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class MockVopsProvider(MockDataProvider): class MockVopsProvider(MockDataProvider):
""" Data provider for test vops """ """ Data provider for test vops """
@classmethod
def load_block_data(cls, data_path):
if os.path.isdir(data_path):
log.warning("Loading mock virtual ops data from directory: {}".format(data_path))
cls.add_block_data_from_directory(data_path)
else:
log.warning("Loading mock virtual ops data from file: {}".format(data_path))
cls.add_block_data_from_file(data_path)
@classmethod
def add_block_data_from_directory(cls, dir_name):
for name in os.listdir(dir_name):
file_path = os.path.join(dir_name, name)
if os.path.isfile(file_path) and file_path.endswith(".json"):
cls.add_block_data_from_file(file_path)
@classmethod
def add_block_data_from_file(cls, file_name):
from json import load
data = {}
with open(file_name, "r") as src:
data = load(src)
cls.add_block_data(data)
@classmethod
def add_block_data(cls, data):
if 'ops' in data:
if 'ops' in cls.block_data:
cls.block_data['ops'].extend(data['ops'])
else:
cls.block_data['ops'] = data['ops']
if 'ops_by_block' in data:
if 'ops_by_block' not in cls.block_data:
cls.block_data['ops_by_block'] = []
for ops in data['ops_by_block']:
for obb_ops in cls.block_data['ops_by_block']:
if ops['block'] == obb_ops['block']:
obb_ops['ops'].extend(ops['ops'])
@classmethod @classmethod
def get_block_data(cls, block_num): def get_block_data(cls, block_num):
ret = {'timestamp': "", 'ops' : [], 'ops_by_block' : []} ret = {}
if cls.block_data: if cls.block_data:
for ops in cls.block_data['ops']: for ops in cls.block_data['ops']:
if ops['block'] == block_num: if ops['block'] == block_num:
ret['timestamp'] = ops['timestamp'] ret['timestamp'] = ops['timestamp']
ret['ops'].append(ops) if 'ops' in ret:
ret['ops'].append(ops)
else:
ret['ops'] = [ops]
for ops in cls.block_data['ops_by_block']: for ops in cls.block_data['ops_by_block']:
if ops['block'] == block_num: if ops['block'] == block_num:
ret['timestamp'] = ops['timestamp'] ret['timestamp'] = ops['timestamp']
ret['ops_by_block'].extend(ops['ops']) if 'ops_by_block' in ret:
ret['ops_by_block'].extend(ops['ops'])
else:
ret['ops_by_block'] = ops['ops']
return ret return ret
...@@ -223,13 +223,13 @@ class Sync: ...@@ -223,13 +223,13 @@ class Sync:
mock_block_data_path = self._conf.get("mock_block_data_path") mock_block_data_path = self._conf.get("mock_block_data_path")
if mock_block_data_path: if mock_block_data_path:
log.warning("Loading mock block data from: {}".format(mock_block_data_path))
MockBlockProvider.load_block_data(mock_block_data_path) MockBlockProvider.load_block_data(mock_block_data_path)
MockBlockProvider.print_data()
mock_vops_data_path = self._conf.get("mock_vops_data_path") mock_vops_data_path = self._conf.get("mock_vops_data_path")
if mock_vops_data_path: if mock_vops_data_path:
log.warning("Loading mock virtual ops data from: {}".format(mock_vops_data_path))
MockVopsProvider.load_block_data(mock_vops_data_path) MockVopsProvider.load_block_data(mock_vops_data_path)
MockVopsProvider.print_data()
# ensure db schema up to date, check app status # ensure db schema up to date, check app status
DbState.initialize() DbState.initialize()
......
...@@ -182,20 +182,17 @@ class SteemClient: ...@@ -182,20 +182,17 @@ class SteemClient:
def add_mock_vops(ret, from_block, end_block): def add_mock_vops(ret, from_block, end_block):
for block_num in range(from_block, end_block): for block_num in range(from_block, end_block):
mock_vops = MockVopsProvider.get_block_data(block_num) mock_vops = MockVopsProvider.get_block_data(block_num)
if block_num in ret: if mock_vops:
if mock_vops['ops_by_block']: if block_num in ret:
ret[block_num]['ops'].extend([op['op'] for op in mock_vops['ops_by_block']]) if 'ops_by_block' in mock_vops:
print(ret) ret[block_num]['ops'].extend([op['op'] for op in mock_vops['ops_by_block'] if op['block'] == block_num])
if mock_vops['ops']: if 'ops' in mock_vops:
ret[block_num]['ops'].extend([op['op'] for op in mock_vops['ops']]) ret[block_num]['ops'].extend([op['op'] for op in mock_vops['ops'] if op['block'] == block_num])
print(ret) else:
else: if 'ops_by_block' in mock_vops:
if mock_vops['ops_by_block']: ret[block_num] = {'timestamp':mock_vops['timestamp'], "ops" : [op['op'] for op in mock_vops['ops_by_block'] if op['block'] == block_num]}
ret[block_num] = {'timestamp':mock_vops['timestamp'], "ops" : [op['op'] for op in mock_vops['ops_by_block']]} if 'ops' in mock_vops:
print(ret) ret[block_num] = {'timestamp':mock_vops['timestamp'], "ops" : [op['op'] for op in mock_vops['ops'] if op['block'] == block_num]}
if mock_vops['ops']:
ret[block_num] = {'timestamp':mock_vops['timestamp'], "ops" : [op['op'] for op in mock_vops['ops']]}
print(ret)
ret = {} ret = {}
......
{
"5000007": {
"previous": "004c4b4600000000000000000000000000000000",
"timestamp": "2016-09-15T19:47:39",
"witness": "initminer",
"transaction_merkle_root": "0000000000000000000000000000000000000000",
"extensions": [],
"witness_signature": "",
"transactions": [],
"block_id": "004c4b4700000000000000000000000000000000",
"signing_key": "",
"transaction_ids": []
},
"5000008": {
"previous": "004c4b4700000000000000000000000000000000",
"timestamp": "2016-09-15T19:47:39",
"witness": "initminer",
"transaction_merkle_root": "0000000000000000000000000000000000000000",
"extensions": [],
"witness_signature": "",
"transactions": [],
"block_id": "004c4b4800000000000000000000000000000000",
"signing_key": "",
"transaction_ids": []
}
}
\ No newline at end of file
{
"ops": [
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 301,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 1,
"timestamp": "2016-03-24T16:20:33",
"op": {
"type": "producer_reward_operation",
"value": {
"producer": "tester1",
"vesting_shares": {
"amount": "1000000",
"precision": 6,
"nai": "@@000000037"
}
}
},
"operation_id": "9223372039063639274"
}
],
"ops_by_block": [],
"next_block_range_begin": 10977,
"next_operation_begin": 0
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment