mirror of
https://github.com/planetmint/planetmint.git
synced 2025-11-24 14:35:45 +00:00
Merge pull request #157 from andreitricolici/planetmint-tarantool
Implementing assets and metadata preparation.
This commit is contained in:
commit
14601b0f25
@ -12,5 +12,5 @@ configuration or the ``PLANETMINT_DATABASE_BACKEND`` environment variable.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Include the backend interfaces
|
# Include the backend interfaces
|
||||||
from planetmint.backend import schema, query # noqa
|
from planetmint.backend import schema, query, convert # noqa
|
||||||
from planetmint.backend.connection import connect, Connection
|
from planetmint.backend.connection import connect, Connection
|
||||||
|
|||||||
26
planetmint/backend/convert.py
Normal file
26
planetmint/backend/convert.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Copyright © 2020 Interplanetary Database Association e.V.,
|
||||||
|
# Planetmint and IPDB software contributors.
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
||||||
|
# Code is Apache-2.0 and docs are CC-BY-4.0
|
||||||
|
|
||||||
|
"""Convert interfaces for backends."""
|
||||||
|
|
||||||
|
from functools import singledispatch
|
||||||
|
|
||||||
|
|
||||||
|
@singledispatch
|
||||||
|
def prepare_asset(connection, transaction_type, transaction_id, filter_operation, asset):
|
||||||
|
"""
|
||||||
|
This function is used for preparing assets,
|
||||||
|
before storing them to database.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
@singledispatch
|
||||||
|
def prepare_metadata(connection, transaction_id, metadata):
|
||||||
|
"""
|
||||||
|
This function is used for preparing metadata,
|
||||||
|
before storing them to database.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError
|
||||||
@ -22,7 +22,7 @@ generic backend interfaces to the implementations in this module.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Register the single dispatched modules on import.
|
# Register the single dispatched modules on import.
|
||||||
from planetmint.backend.localmongodb import schema, query # noqa
|
from planetmint.backend.localmongodb import schema, query, convert # noqa
|
||||||
|
|
||||||
# MongoDBConnection should always be accessed via
|
# MongoDBConnection should always be accessed via
|
||||||
# ``planetmint.backend.connect()``.
|
# ``planetmint.backend.connect()``.
|
||||||
|
|||||||
25
planetmint/backend/localmongodb/convert.py
Normal file
25
planetmint/backend/localmongodb/convert.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Copyright © 2020 Interplanetary Database Association e.V.,
|
||||||
|
# Planetmint and IPDB software contributors.
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
||||||
|
# Code is Apache-2.0 and docs are CC-BY-4.0
|
||||||
|
|
||||||
|
"""Convert implementation for MongoDb"""
|
||||||
|
|
||||||
|
from planetmint.backend.utils import module_dispatch_registrar
|
||||||
|
from planetmint.backend import convert
|
||||||
|
from planetmint.backend.localmongodb.connection import LocalMongoDBConnection
|
||||||
|
|
||||||
|
register_query = module_dispatch_registrar(convert)
|
||||||
|
|
||||||
|
|
||||||
|
@register_query(LocalMongoDBConnection)
|
||||||
|
def prepare_asset(connection, transaction_type, transaction_id, filter_operation, asset):
|
||||||
|
if transaction_type == filter_operation:
|
||||||
|
asset['id'] = transaction_id
|
||||||
|
return asset
|
||||||
|
|
||||||
|
|
||||||
|
@register_query(LocalMongoDBConnection)
|
||||||
|
def prepare_metadata(connection, transaction_id, metadata):
|
||||||
|
return {'id': transaction_id,
|
||||||
|
'metadata': metadata}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
# Register the single dispatched modules on import.
|
# Register the single dispatched modules on import.
|
||||||
from planetmint.backend.tarantool import query, connection, schema # noqa
|
from planetmint.backend.tarantool import query, connection, schema, convert # noqa
|
||||||
|
|
||||||
# MongoDBConnection should always be accessed via
|
# MongoDBConnection should always be accessed via
|
||||||
# ``planetmint.backend.connect()``.
|
# ``planetmint.backend.connect()``.
|
||||||
|
|||||||
26
planetmint/backend/tarantool/convert.py
Normal file
26
planetmint/backend/tarantool/convert.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Copyright © 2020 Interplanetary Database Association e.V.,
|
||||||
|
# Planetmint and IPDB software contributors.
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
||||||
|
# Code is Apache-2.0 and docs are CC-BY-4.0
|
||||||
|
|
||||||
|
"""Convert implementation for Tarantool"""
|
||||||
|
|
||||||
|
from planetmint.backend.utils import module_dispatch_registrar
|
||||||
|
from planetmint.backend import convert
|
||||||
|
from planetmint.backend.tarantool.connection import TarantoolDBConnection
|
||||||
|
|
||||||
|
register_query = module_dispatch_registrar(convert)
|
||||||
|
|
||||||
|
|
||||||
|
@register_query(TarantoolDBConnection)
|
||||||
|
def prepare_asset(connection, transaction_type, transaction_id, filter_operation, asset):
|
||||||
|
asset_id = transaction_id
|
||||||
|
if transaction_type != filter_operation:
|
||||||
|
asset_id = asset['id']
|
||||||
|
return tuple([asset, transaction_id, asset_id])
|
||||||
|
|
||||||
|
|
||||||
|
@register_query(TarantoolDBConnection)
|
||||||
|
def prepare_metadata(connection, transaction_id, metadata):
|
||||||
|
return {'id': transaction_id,
|
||||||
|
'metadata': metadata}
|
||||||
@ -22,6 +22,7 @@ except ImportError:
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
import planetmint
|
import planetmint
|
||||||
|
from copy import deepcopy
|
||||||
from planetmint.config import Config
|
from planetmint.config import Config
|
||||||
from planetmint import backend, config_utils, fastquery
|
from planetmint import backend, config_utils, fastquery
|
||||||
from planetmint.models import Transaction
|
from planetmint.models import Transaction
|
||||||
@ -128,23 +129,29 @@ class Planetmint(object):
|
|||||||
txns = []
|
txns = []
|
||||||
assets = []
|
assets = []
|
||||||
txn_metadatas = []
|
txn_metadatas = []
|
||||||
|
|
||||||
for t in transactions:
|
for t in transactions:
|
||||||
transaction = t.tx_dict if t.tx_dict else rapidjson.loads(rapidjson.dumps(t.to_dict()))
|
transaction = t.tx_dict if t.tx_dict else rapidjson.loads(rapidjson.dumps(t.to_dict()))
|
||||||
|
|
||||||
asset = transaction.pop('asset')
|
asset = transaction.pop('asset')
|
||||||
asset_id = transaction['id']
|
|
||||||
if transaction['operation'] != t.CREATE:
|
|
||||||
asset_id = asset['id']
|
|
||||||
assets.append((asset,
|
|
||||||
transaction['id'],
|
|
||||||
asset_id))
|
|
||||||
|
|
||||||
metadata = transaction.pop('metadata')
|
metadata = transaction.pop('metadata')
|
||||||
txn_metadatas.append({'id': transaction['id'],
|
|
||||||
'metadata': metadata})
|
asset = backend.convert.prepare_asset(self.connection,
|
||||||
|
transaction_type=transaction["operation"],
|
||||||
|
transaction_id=transaction["id"],
|
||||||
|
filter_operation=t.CREATE,
|
||||||
|
asset=asset)
|
||||||
|
|
||||||
|
metadata = backend.convert.prepare_metadata(self.connection,
|
||||||
|
transaction_id=transaction["id"],
|
||||||
|
metadata=metadata)
|
||||||
|
|
||||||
|
txn_metadatas.append(metadata)
|
||||||
|
assets.append(asset)
|
||||||
txns.append(transaction)
|
txns.append(transaction)
|
||||||
|
|
||||||
backend.query.store_metadatas(self.connection, txn_metadatas)
|
backend.query.store_metadatas(self.connection, txn_metadatas)
|
||||||
|
if assets:
|
||||||
backend.query.store_assets(self.connection, assets)
|
backend.query.store_assets(self.connection, assets)
|
||||||
return backend.query.store_transactions(self.connection, txns)
|
return backend.query.store_transactions(self.connection, txns)
|
||||||
|
|
||||||
@ -511,5 +518,4 @@ class Planetmint(object):
|
|||||||
return backend.query.delete_elections(self.connection, height)
|
return backend.query.delete_elections(self.connection, height)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Block = namedtuple('Block', ('app_hash', 'height', 'transactions'))
|
Block = namedtuple('Block', ('app_hash', 'height', 'transactions'))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user