mirror of
https://github.com/planetmint/planetmint.git
synced 2025-11-24 14:35:45 +00:00
Merge pull request #154 from LaurentDeMontBlanc/planetmint-tarantool
Planetmint tarantool
This commit is contained in:
commit
31cb0395e8
@ -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)
|
||||
|
||||
@ -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":
|
||||
{
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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"])
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user