From f9af464623297d02bc0f4d5e5840e5bcf6439c15 Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 5 Apr 2022 17:51:05 +0300 Subject: [PATCH] initialize and drop database fixed --- planetmint/backend/schema.py | 2 +- planetmint/backend/tarantool/connection.py | 21 ++++++++++------- planetmint/backend/tarantool/init_db.txt | 26 +++++++++++++++++++--- planetmint/commands/planetmint.py | 10 +++++---- planetmint/lib.py | 22 +++++++++--------- 5 files changed, 54 insertions(+), 27 deletions(-) diff --git a/planetmint/backend/schema.py b/planetmint/backend/schema.py index f0f2912..fbb0180 100644 --- a/planetmint/backend/schema.py +++ b/planetmint/backend/schema.py @@ -63,7 +63,7 @@ def drop_database(connection, dbname): raise NotImplementedError -def init_database(connection=None, dbname=None): # FIXME HERE IS INIT DATABASE +def init_database(connection=None, dbname=None): """Initialize the configured backend for use with Planetmint. Creates a database with :attr:`dbname` with any required tables diff --git a/planetmint/backend/tarantool/connection.py b/planetmint/backend/tarantool/connection.py index b74e4f7..0eb847a 100644 --- a/planetmint/backend/tarantool/connection.py +++ b/planetmint/backend/tarantool/connection.py @@ -27,9 +27,14 @@ class TarantoolDB: self.port = port self.db_connect = tarantool.connect(host=host, port=port, user=user, password=password) if reset_database: + self._load_setup_files() self.drop_database() self.init_database() + def _load_setup_files(self): + self.drop_commands = self.__read_commands(file_path="drop_db.txt") + self.init_commands = self.__read_commands(file_path="init_db.txt") + def space(self, space_name: str): return self.db_connect.space(space_name) @@ -45,15 +50,15 @@ class TarantoolDB: def drop_database(self): from planetmint.backend.tarantool.utils import run db_config = Config().get()["database"] - drop_config = db_config["drop_config"] - f_path = "%s%s" % (drop_config["relative_path"], drop_config["drop_file"]) - commands = self.__read_commands(file_path=f_path) - run(commands=commands, config=db_config) + # drop_config = db_config["drop_config"] + # f_path = "%s%s" % (drop_config["relative_path"], drop_config["drop_file"]) + # commands = self.__read_commands(file_path=f_path) + run(commands=self.drop_commands, config=db_config) def init_database(self): from planetmint.backend.tarantool.utils import run db_config = Config().get()["database"] - init_config = db_config["init_config"] - f_path = "%s%s" % (init_config["relative_path"], init_config["init_file"]) - commands = self.__read_commands(file_path=f_path) - run(commands=commands, config=db_config) + # init_config = db_config["init_config"] + # f_path = "%s%s" % (init_config["relative_path"], init_config["init_file"]) + # commands = self.__read_commands(file_path=f_path) + run(commands=self.init_commands, config=db_config) diff --git a/planetmint/backend/tarantool/init_db.txt b/planetmint/backend/tarantool/init_db.txt index 8bb7749..fb8db3e 100644 --- a/planetmint/backend/tarantool/init_db.txt +++ b/planetmint/backend/tarantool/init_db.txt @@ -1,3 +1,5 @@ +box.cfg{listen = 3301} + abci_chains = box.schema.space.create('abci_chains',{engine = 'memtx' , is_sync = false}) abci_chains:format({{name='height' , type='integer'},{name='is_synched' , type='boolean'},{name='chain_id',type='string'}}) abci_chains:create_index('id_search' ,{type='hash', parts={'chain_id'}}) @@ -39,7 +41,7 @@ validators:create_index('id_search' , {type='hash' , parts={'validator_id'}}) validators:create_index('height_search' , {type='tree', unique=true, parts={'height'}}) transactions = box.schema.space.create('transactions',{engine='memtx' , is_sync=false}) -transactions:format({{name='transaction_id' , type='string'}, {name='operation' , type='string'}, {name='version' ,type='string'}, {name='asset_id', type='string'}}) +transactions:format({{name='transaction_id' , type='string'}, {name='operation' , type='string'}, {name='version' ,type='string'}, {name='asset_id', type='string'}, {name='dict_map', type='any'}}) transactions:create_index('id_search' , {type = 'hash' , parts={'transaction_id'}}) transactions:create_index('only_asset_search', {type = 'tree', unique=false, parts={'asset_id'}}) transactions:create_index('asset_search' , {type = 'tree',unique=false, parts={'operation', 'asset_id'}}) @@ -47,13 +49,13 @@ transactions:create_index('transaction_search' , {type = 'tree',unique=false, pa transactions:create_index('both_search' , {type = 'tree',unique=false, parts={'asset_id', 'transaction_id'}}) inputs = box.schema.space.create('inputs') -inputs:format({{name='transaction_id' , type='string'}, {name='fulfillment' , type='string'}, {name='owners_before' , type='array'}, {name='fulfills_transaction_id', type = 'string'}, {name='fulfills_output_index', type = 'string'}, {name='input_id', type='string'}}) +inputs:format({{name='transaction_id' , type='string'}, {name='fulfillment' , type='any'}, {name='owners_before' , type='array'}, {name='fulfills_transaction_id', type = 'string'}, {name='fulfills_output_index', type = 'string'}, {name='input_id', type='string'}, {name='input_index', type='number'}}) inputs:create_index('delete_search' , {type = 'hash', parts={'input_id'}}) inputs:create_index('spent_search' , {type = 'tree', unique=false, parts={'fulfills_transaction_id', 'fulfills_output_index'}}) inputs:create_index('id_search', {type = 'tree', unique=false, parts = {'transaction_id'}}) outputs = box.schema.space.create('outputs') -outputs:format({{name='transaction_id' , type='string'}, {name='amount' , type='string'}, {name='uri', type='string'}, {name='details_type', type='string'}, {name='details_public_key', type='string'}, {name = 'output_id', type = 'string'}}) +outputs:format({{name='transaction_id' , type='string'}, {name='amount' , type='string'}, {name='uri', type='string'}, {name='details_type', type='string'}, {name='details_public_key', type='any'}, {name = 'output_id', type = 'string'}, {name='treshold', type='any'}, {name='subconditions', type='any'}, {name='output_index', type='number'}}) outputs:create_index('unique_search' ,{type='hash', parts={'output_id'}}) outputs:create_index('id_search' ,{type='tree', unique=false, parts={'transaction_id'}}) @@ -63,3 +65,21 @@ keys:create_index('id_search', {type = 'hash', parts={'id'}}) keys:create_index('keys_search', {type = 'tree', unique=false, parts={'public_key'}}) keys:create_index('txid_search', {type = 'tree', unique=false, parts={'transaction_id'}}) keys:create_index('output_search', {type = 'tree', unique=false, parts={'output_id'}}) + + +box.schema.user.create('planetmint', {if_not_exists=true, password = 'planet_user'}) +box.schema.user.grant('planetmint', 'read, write', 'space', 'abci_chains') +box.schema.user.grant('planetmint', 'read, write', 'space', 'assets') +box.schema.user.grant('planetmint', 'read, write', 'space', 'blocks') +box.schema.user.grant('planetmint', 'read, write', 'space', 'blocks_tx') +box.schema.user.grant('planetmint', 'read, write', 'space', 'elections') +box.schema.user.grant('planetmint', 'read, write', 'space', 'meta_data') +box.schema.user.grant('planetmint', 'read, write', 'space', 'pre_commits') +box.schema.user.grant('planetmint', 'read, write', 'space', 'validators') +box.schema.user.grant('planetmint', 'read, write', 'space', 'transactions') +box.schema.user.grant('planetmint', 'read, write', 'space', 'inputs') +box.schema.user.grant('planetmint', 'read, write', 'space', 'outputs') +box.schema.user.grant('planetmint', 'read, write', 'space', 'keys') + +local console = require('console') +console.start() diff --git a/planetmint/commands/planetmint.py b/planetmint/commands/planetmint.py index 641ca6d..b6c34d2 100644 --- a/planetmint/commands/planetmint.py +++ b/planetmint/commands/planetmint.py @@ -245,12 +245,12 @@ def run_election_show(args, planet): def _run_init(): - pass # bdb = planetmint.Planetmint() # schema.init_database(connection=bdb.connection) - - # init_tarantool() + from planetmint.backend.connection import Connection + conn = Connection() + conn.init_database() @configure_planetmint @@ -268,7 +268,9 @@ def run_drop(args): if response != 'y': return - # drop_tarantool() + from planetmint.backend.connection import Connection + conn = Connection() + conn.drop_database() def run_recover(b): diff --git a/planetmint/lib.py b/planetmint/lib.py index f22fa91..1e22bec 100644 --- a/planetmint/lib.py +++ b/planetmint/lib.py @@ -244,17 +244,17 @@ class Planetmint(object): transaction = backend.query.get_transaction(self.connection, transaction_id) if transaction: - # asset = backend.query.get_asset(self.connection, transaction_id) - # metadata = backend.query.get_metadata(self.connection, [transaction_id]) - # if asset: - # transaction['asset'] = asset - # - # if 'metadata' not in transaction: - # metadata = metadata[0] if metadata else None - # if metadata: - # metadata = metadata.get('metadata') - # - # transaction.update({'metadata': metadata}) + asset = backend.query.get_asset(self.connection, transaction_id) + metadata = backend.query.get_metadata(self.connection, [transaction_id]) + if asset: + transaction['asset'] = asset + + if 'metadata' not in transaction: + metadata = metadata[0] if metadata else None + if metadata: + metadata = metadata.get('metadata') + + transaction.update({'metadata': metadata}) transaction = Transaction.from_dict(transaction)