Merge pull request #154 from LaurentDeMontBlanc/planetmint-tarantool

Planetmint tarantool
This commit is contained in:
Lorenz Herzberger 2022-06-22 08:54:44 +02:00 committed by GitHub
commit 31cb0395e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 21 deletions

View File

@ -7,10 +7,10 @@
from secrets import token_hex
from hashlib import sha256
from operator import itemgetter
import tarantool.error
import json
from tarantool.error import DatabaseError
from planetmint.backend import query
from planetmint.backend.utils import module_dispatch_registrar
from planetmint.backend.tarantool.connection import TarantoolDBConnection
@ -138,12 +138,15 @@ def store_asset(connection, asset):
obj[0] = json.dumps(obj[0])
return tuple(obj)
else:
(json.dumps(obj), obj["id"], obj["id"])
return (json.dumps(obj), obj["id"], obj["id"])
try:
return connection.run(
connection.space("assets").insert(convert(asset)),
only_data=False
)
except DatabaseError:
pass
return connection.run(
connection.space("assets").insert(convert(asset)),
only_data=False
)
@register_query(TarantoolDBConnection)
@ -260,10 +263,29 @@ def get_txids_filtered(connection, asset_id: str, operation: str = None,
@register_query(TarantoolDBConnection)
def text_search(conn, search, table='assets', limit=0):
pattern = ".{}.".format(search)
field_no = 1 if table == 'assets' else 2 # 2 for meta_data
res = conn.run(
conn.space(table).call('indexed_pattern_search', (table, 1, pattern))
conn.space(table).call('indexed_pattern_search', (table, field_no, pattern))
)
return res[0] if limit == 0 else res[0][:limit]
to_return = []
if len(res[0]): # NEEDS BEAUTIFICATION
if table == 'assets':
for result in res[0]:
to_return.append({
'data': json.loads(result[0])['data'],
'id': result[1]
})
else:
for result in res[0]:
to_return.append({
'metadata': json.loads(result[1]),
'id': result[0]
})
return to_return if limit == 0 else to_return[:limit]
def _remove_text_score(asset):
asset.pop('score', None)

View File

@ -62,7 +62,7 @@ INDEX_COMMANDS = {
"meta_data":
{
"id_search": "meta_datas:create_index('id_search', { type='hash' , parts={'transaction_id'}})",
"text_search": "meta_datas:create_index('secondary', {unique=false,parts={2,'string'}}"
"text_search": "meta_datas:create_index('secondary', {unique=false,parts={2,'string'}})"
},
"pre_commits":
{

View File

@ -46,7 +46,6 @@ class MetadataApi(Resource):
metadata = planet.text_search(**args)
try:
# This only works with MongoDB as the backend
return list(metadata)
except OperationError as e:
return make_error(

View File

@ -6,16 +6,10 @@
from copy import deepcopy
import pytest
import tarantool
import json
from planetmint.transactions.types.assets.create import Create
from planetmint.transactions.types.assets.transfer import Transfer
# import pymongo
# # from planetmint.backend.connection import Connection, query
# from planetmint.backend.connection import Connection
# conn = Connection(backend="tarantool_db").get_connection()
pytestmark = pytest.mark.bdb
@ -167,9 +161,7 @@ def test_text_search(table):
def test_write_metadata(db_conn):
# from planetmint.backend.connection import Connection
from planetmint.backend.tarantool import query
# conn = Connection().get_connection()
metadata = [
{'id': "1", 'data': '1'},
@ -183,7 +175,7 @@ def test_write_metadata(db_conn):
metadatas = []
for meta in metadata:
_data = db_conn.run(db_conn.space("meta_data").select(meta["id"]))[0]
metadatas.append({"id": _data[0], "data": _data[1]})
metadatas.append({"id": _data[0], "data": json.loads(_data[1])})
metadatas = sorted(metadatas, key=lambda k: k["id"])