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
|
||||
from planetmint.backend import schema, query # noqa
|
||||
from planetmint.backend import schema, query, convert # noqa
|
||||
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.
|
||||
from planetmint.backend.localmongodb import schema, query # noqa
|
||||
from planetmint.backend.localmongodb import schema, query, convert # noqa
|
||||
|
||||
# MongoDBConnection should always be accessed via
|
||||
# ``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.
|
||||
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
|
||||
# ``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 planetmint
|
||||
from copy import deepcopy
|
||||
from planetmint.config import Config
|
||||
from planetmint import backend, config_utils, fastquery
|
||||
from planetmint.models import Transaction
|
||||
@ -128,24 +129,30 @@ class Planetmint(object):
|
||||
txns = []
|
||||
assets = []
|
||||
txn_metadatas = []
|
||||
|
||||
for t in transactions:
|
||||
transaction = t.tx_dict if t.tx_dict else rapidjson.loads(rapidjson.dumps(t.to_dict()))
|
||||
|
||||
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')
|
||||
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)
|
||||
|
||||
backend.query.store_metadatas(self.connection, txn_metadatas)
|
||||
backend.query.store_assets(self.connection, assets)
|
||||
if assets:
|
||||
backend.query.store_assets(self.connection, assets)
|
||||
return backend.query.store_transactions(self.connection, txns)
|
||||
|
||||
def delete_transactions(self, txs):
|
||||
@ -511,5 +518,4 @@ class Planetmint(object):
|
||||
return backend.query.delete_elections(self.connection, height)
|
||||
|
||||
|
||||
|
||||
Block = namedtuple('Block', ('app_hash', 'height', 'transactions'))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user