From e1a7ade68cf5a6ed2fe44e23f72c904ef372ef4f Mon Sep 17 00:00:00 2001 From: Lorenz Herzberger Date: Tue, 14 Jun 2022 17:15:05 +0200 Subject: [PATCH] adjusted some queries, wip print statements to be removed Signed-off-by: Lorenz Herzberger --- planetmint/backend/tarantool/query.py | 50 +++++++++++-------- planetmint/backend/tarantool/schema.py | 7 +-- .../backend/tarantool/transaction/tools.py | 12 +++-- planetmint/web/views/metadata.py | 2 +- 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/planetmint/backend/tarantool/query.py b/planetmint/backend/tarantool/query.py index f9446ab..5fbc1a3 100644 --- a/planetmint/backend/tarantool/query.py +++ b/planetmint/backend/tarantool/query.py @@ -9,6 +9,7 @@ from hashlib import sha256 from operator import itemgetter import tarantool.error +import json from planetmint.backend import query from planetmint.backend.utils import module_dispatch_registrar @@ -34,6 +35,9 @@ def _group_transaction_by_ids(connection, txids: list): _txassets = connection.run(connection.space("assets").select(txid, index="txid_search")) _txmeta = connection.run(connection.space("meta_data").select(txid, index="id_search")) + print('TX ASSETS') + print(_txassets) + _txinputs = sorted(_txinputs, key=itemgetter(6), reverse=False) _txoutputs = sorted(_txoutputs, key=itemgetter(8), reverse=False) result_map = { @@ -109,7 +113,7 @@ def store_metadatas(connection, metadata: list): for meta in metadata: connection.run( connection.space("meta_data").insert( - (meta["id"], meta["data"] if not "metadata" in meta else meta["metadata"])) + (meta["id"], json.dumps(meta["data"] if not "metadata" in meta else meta["metadata"]))) ) @@ -122,33 +126,30 @@ def get_metadata(connection, transaction_ids: list): ) if metadata is not None: if len(metadata) > 0: - _returned_data.append(metadata) + _returned_data.append(json.loads(metadata)) return _returned_data if len(_returned_data) > 0 else None @register_query(TarantoolDBConnection) def store_asset(connection, asset): - convert = lambda obj: obj if isinstance(obj, tuple) else (obj, obj["id"], obj["id"]) - try: - return connection.run( - connection.space("assets").insert(convert(asset)), - only_data=False - ) - except tarantool.error.DatabaseError: - pass + def convert(obj): + if isinstance(obj, tuple): + obj = list(obj) + obj[0] = json.dumps(obj[0]) + return tuple(obj) + else: + (json.dumps(obj), obj["id"], obj["id"]) + + return connection.run( + connection.space("assets").insert(convert(asset)), + only_data=False + ) @register_query(TarantoolDBConnection) def store_assets(connection, assets: list): - convert = lambda obj: obj if isinstance(obj, tuple) else (obj, obj["id"], obj["id"]) for asset in assets: - try: - connection.run( - connection.space("assets").insert(convert(asset)), - only_data=False - ) - except tarantool.error.DatabaseError: - pass + store_asset(connection, asset) @register_query(TarantoolDBConnection) @@ -156,7 +157,12 @@ def get_asset(connection, asset_id: str): _data = connection.run( connection.space("assets").select(asset_id, index="txid_search") ) - return _data[0][0] if len(_data) > 0 else [] + + print('GET ASSET') + + print(_data) + + return json.loads(_data[0][0]) if len(_data) > 0 else [] @register_query(TarantoolDBConnection) @@ -165,6 +171,10 @@ def get_assets(connection, assets_ids: list) -> list: for _id in list(set(assets_ids)): asset = get_asset(connection, _id) _returned_data.append(asset) + + print('############# RETURNED DATA ##########') + print(_returned_data) + return sorted(_returned_data, key=lambda k: k["id"], reverse=False) @@ -276,7 +286,7 @@ def get_txids_filtered(connection, asset_id: str, operation: str = None, # return (_remove_text_score(obj) for obj in cursor) @register_query(TarantoolDBConnection) -def text_search(conn, search, table='assets'): +def text_search(conn, search, table='assets', limit=0): pattern = ".{}.".format(search) res = conn.run( conn.space(table).call('indexed_pattern_search', (table, 1, pattern)) diff --git a/planetmint/backend/tarantool/schema.py b/planetmint/backend/tarantool/schema.py index de3b384..6ef03b4 100644 --- a/planetmint/backend/tarantool/schema.py +++ b/planetmint/backend/tarantool/schema.py @@ -37,10 +37,10 @@ INDEX_COMMANDS = { }, "assets": { + "secondary": "assets:create_index('secondary', {unique=false,parts={1,'string',2,'string',3,'string'}})", "txid_search": "assets:create_index('txid_search', {type='hash', parts={'tx_id'}})", "assetid_search": "assets:create_index('assetid_search', {type='tree',unique=false, parts={'asset_id', 'tx_id'}})", - "only_asset_search": "assets:create_index('only_asset_search', {type='tree', unique=false, parts={'asset_id'}})", - "secondary": "assets:create_index('secondary', {unique=false,parts={1,'string',2,'string',3,'string'}})" + "only_asset_search": "assets:create_index('only_asset_search', {type='tree', unique=false, parts={'asset_id'}})" }, "blocks": { @@ -61,6 +61,7 @@ INDEX_COMMANDS = { }, "meta_data": { + "secondary": "meta_datas:create_index('secondary', {unique=false,parts={1,'string',2,'string'}}", "id_search": "meta_datas:create_index('id_search', { type='hash' , parts={'transaction_id'}})" }, "pre_commits": @@ -114,7 +115,7 @@ SCHEMA_COMMANDS = { "blocks_tx": "blocks_tx:format{{name='transaction_id', type = 'string'}, {name = 'block_id', type = 'string'}}", "elections": "elections:format({{name='election_id' , type='string'},{name='height' , type='integer'}, {name='is_concluded' , type='boolean'}})", - "meta_data": "meta_datas:format({{name='transaction_id' , type='string'}, {name='meta_data' , type='any'}})", + "meta_data": "meta_datas:format({{name='transaction_id' , type='string'}, {name='meta_data' , type='string'}})", "pre_commits": "pre_commits:format({{name='commit_id', type='string'}, {name='height',type='integer'}, {name='transactions',type=any}})", "validators": diff --git a/planetmint/backend/tarantool/transaction/tools.py b/planetmint/backend/tarantool/transaction/tools.py index 28fea32..5e7371a 100644 --- a/planetmint/backend/tarantool/transaction/tools.py +++ b/planetmint/backend/tarantool/transaction/tools.py @@ -1,5 +1,6 @@ from secrets import token_hex import copy +import json from planetmint.transactions.common.memoize import HDict @@ -56,14 +57,14 @@ class TransactionDecompose: if metadata is None: return - self._tuple_transaction["metadata"] = (self._transaction["id"], metadata) + self._tuple_transaction["metadata"] = (self._transaction["id"], json.dumps(metadata)) def __asset_check(self): _asset = self._transaction.get("asset") if _asset is None: return asset_id = _asset["id"] if _asset.get("id") is not None else self._transaction["id"] - self._tuple_transaction["asset"] = (_asset, self._transaction["id"], asset_id) + self._tuple_transaction["asset"] = (json.loads(_asset), self._transaction["id"], asset_id) def __prepare_inputs(self): _inputs = [] @@ -152,12 +153,15 @@ class TransactionCompose: return self.db_results["transaction"][0] def _get_asset(self): + print('_GET_ASSET') _asset = iter(self.db_results["asset"]) + print(_asset) _res_asset = next(iter(next(_asset, iter([]))), None) - return _res_asset + print(_res_asset) + return json.loads(_res_asset) def _get_metadata(self): - return self.db_results["metadata"][0][1] if len(self.db_results["metadata"]) == 1 else None + return json.loads(self.db_results["metadata"][0][1]) if len(self.db_results["metadata"]) == 1 else None def _get_inputs(self): _inputs = [] diff --git a/planetmint/web/views/metadata.py b/planetmint/web/views/metadata.py index cf1a61d..d8faf19 100644 --- a/planetmint/web/views/metadata.py +++ b/planetmint/web/views/metadata.py @@ -42,7 +42,7 @@ class MetadataApi(Resource): pool = current_app.config['bigchain_pool'] with pool() as planet: - args['table'] = 'metadata' + args['table'] = 'meta_data' metadata = planet.text_search(**args) try: