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 secrets import token_hex
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
|
||||||
import tarantool.error
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
from tarantool.error import DatabaseError
|
||||||
|
|
||||||
from planetmint.backend import query
|
from planetmint.backend import query
|
||||||
from planetmint.backend.utils import module_dispatch_registrar
|
from planetmint.backend.utils import module_dispatch_registrar
|
||||||
from planetmint.backend.tarantool.connection import TarantoolDBConnection
|
from planetmint.backend.tarantool.connection import TarantoolDBConnection
|
||||||
@ -138,12 +138,15 @@ def store_asset(connection, asset):
|
|||||||
obj[0] = json.dumps(obj[0])
|
obj[0] = json.dumps(obj[0])
|
||||||
return tuple(obj)
|
return tuple(obj)
|
||||||
else:
|
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)
|
@register_query(TarantoolDBConnection)
|
||||||
@ -260,10 +263,29 @@ def get_txids_filtered(connection, asset_id: str, operation: str = None,
|
|||||||
@register_query(TarantoolDBConnection)
|
@register_query(TarantoolDBConnection)
|
||||||
def text_search(conn, search, table='assets', limit=0):
|
def text_search(conn, search, table='assets', limit=0):
|
||||||
pattern = ".{}.".format(search)
|
pattern = ".{}.".format(search)
|
||||||
|
field_no = 1 if table == 'assets' else 2 # 2 for meta_data
|
||||||
res = conn.run(
|
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):
|
def _remove_text_score(asset):
|
||||||
asset.pop('score', None)
|
asset.pop('score', None)
|
||||||
|
|||||||
@ -62,7 +62,7 @@ INDEX_COMMANDS = {
|
|||||||
"meta_data":
|
"meta_data":
|
||||||
{
|
{
|
||||||
"id_search": "meta_datas:create_index('id_search', { type='hash' , parts={'transaction_id'}})",
|
"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":
|
"pre_commits":
|
||||||
{
|
{
|
||||||
|
|||||||
@ -46,7 +46,6 @@ class MetadataApi(Resource):
|
|||||||
metadata = planet.text_search(**args)
|
metadata = planet.text_search(**args)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# This only works with MongoDB as the backend
|
|
||||||
return list(metadata)
|
return list(metadata)
|
||||||
except OperationError as e:
|
except OperationError as e:
|
||||||
return make_error(
|
return make_error(
|
||||||
|
|||||||
@ -6,16 +6,10 @@
|
|||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import tarantool
|
import json
|
||||||
from planetmint.transactions.types.assets.create import Create
|
from planetmint.transactions.types.assets.create import Create
|
||||||
from planetmint.transactions.types.assets.transfer import Transfer
|
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
|
pytestmark = pytest.mark.bdb
|
||||||
|
|
||||||
|
|
||||||
@ -167,9 +161,7 @@ def test_text_search(table):
|
|||||||
|
|
||||||
|
|
||||||
def test_write_metadata(db_conn):
|
def test_write_metadata(db_conn):
|
||||||
# from planetmint.backend.connection import Connection
|
|
||||||
from planetmint.backend.tarantool import query
|
from planetmint.backend.tarantool import query
|
||||||
# conn = Connection().get_connection()
|
|
||||||
|
|
||||||
metadata = [
|
metadata = [
|
||||||
{'id': "1", 'data': '1'},
|
{'id': "1", 'data': '1'},
|
||||||
@ -183,7 +175,7 @@ def test_write_metadata(db_conn):
|
|||||||
metadatas = []
|
metadatas = []
|
||||||
for meta in metadata:
|
for meta in metadata:
|
||||||
_data = db_conn.run(db_conn.space("meta_data").select(meta["id"]))[0]
|
_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"])
|
metadatas = sorted(metadatas, key=lambda k: k["id"])
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user