def run_configure(args): """Run a script to configure the current node.""" config_path = args.config or bigchaindb.config_utils.CONFIG_DEFAULT_PATH config_file_exists = False # if the config path is `-` then it's stdout if config_path != '-': config_file_exists = os.path.exists(config_path) if config_file_exists and not args.yes: want = input_on_stderr( 'Config file `{}` exists, do you want to ' 'override it? (cannot be undone) [y/N]: '.format(config_path)) if want != 'y': return conf = copy.deepcopy(bigchaindb.config) # select the correct config defaults based on the backend print('Generating default configuration for backend {}'.format( args.backend), file=sys.stderr) database_keys = bigchaindb._database_keys_map[args.backend] conf['database'] = bigchaindb._database_map[args.backend] if not args.yes: for key in ('bind', ): val = conf['server'][key] conf['server'][key] = input_on_stderr( 'API Server {}? (default `{}`): '.format(key, val), val) for key in ('scheme', 'host', 'port'): val = conf['wsserver'][key] conf['wsserver'][key] = input_on_stderr( 'WebSocket Server {}? (default `{}`): '.format(key, val), val) for key in database_keys: val = conf['database'][key] conf['database'][key] = input_on_stderr( 'Database {}? (default `{}`): '.format(key, val), val) for key in ('host', 'port'): val = conf['tendermint'][key] conf['tendermint'][key] = input_on_stderr( 'Tendermint {}? (default `{}`)'.format(key, val), val) if config_path != '-': bigchaindb.config_utils.write_config(conf, config_path) else: print(json.dumps(conf, indent=4, sort_keys=True)) print('Configuration written to {}'.format(config_path), file=sys.stderr) print('Ready to go!', file=sys.stderr)
def test_input_on_stderr(): from bigchaindb.commands.utils import input_on_stderr, _convert with patch('builtins.input', return_value='I love cats'): assert input_on_stderr() == 'I love cats' # input_on_stderr uses `_convert` internally, from now on we will # just use that function assert _convert('hack the planet') == 'hack the planet' assert _convert('42') == '42' assert _convert('42', default=10) == 42 assert _convert('', default=10) == 10 assert _convert('42', convert=int) == 42 assert _convert('True', convert=bool) is True assert _convert('False', convert=bool) is False assert _convert('t', convert=bool) is True assert _convert('3.14', default=1.0) == 3.14 assert _convert('TrUe', default=False) is True with pytest.raises(ValueError): assert _convert('TRVE', default=False) with pytest.raises(ValueError): assert _convert('ಠ_ಠ', convert=int)
def test_input_on_stderr(): from bigchaindb.commands.utils import input_on_stderr, _convert with patch('builtins.input', return_value='I love cats'): assert input_on_stderr() == 'I love cats' # input_on_stderr uses `_convert` internally, from now on we will # just use that function assert _convert('hack the planet') == 'hack the planet' assert _convert('42') == '42' assert _convert('42', default=10) == 42 assert _convert('', default=10) == 10 assert _convert('42', convert=int) == 42 assert _convert('True', convert=bool) is True assert _convert('False', convert=bool) is False assert _convert('t', convert=bool) is True assert _convert('3.14', default=1.0) == 3.14 assert _convert('TrUe', default=False) is True with pytest.raises(ValueError): assert _convert('TRVE', default=False) with pytest.raises(ValueError): assert _convert('ಠ_ಠ', convert=int)
def run_configure(args): """Run a script to configure the current node.""" config_path = args.config or bigchaindb.config_utils.CONFIG_DEFAULT_PATH config_file_exists = False # if the config path is `-` then it's stdout if config_path != '-': config_file_exists = os.path.exists(config_path) if config_file_exists and not args.yes: want = input_on_stderr('Config file `{}` exists, do you want to ' 'override it? (cannot be undone) [y/N]: '.format(config_path)) if want != 'y': return conf = copy.deepcopy(bigchaindb.config) # select the correct config defaults based on the backend print('Generating default configuration for backend {}' .format(args.backend), file=sys.stderr) database_keys = bigchaindb._database_keys_map[args.backend] conf['database'] = bigchaindb._database_map[args.backend] if not args.yes: for key in ('bind', ): val = conf['server'][key] conf['server'][key] = input_on_stderr('API Server {}? (default `{}`): '.format(key, val), val) for key in ('scheme', 'host', 'port'): val = conf['wsserver'][key] conf['wsserver'][key] = input_on_stderr('WebSocket Server {}? (default `{}`): '.format(key, val), val) for key in database_keys: val = conf['database'][key] conf['database'][key] = input_on_stderr('Database {}? (default `{}`): '.format(key, val), val) for key in ('host', 'port'): val = conf['tendermint'][key] conf['tendermint'][key] = input_on_stderr('Tendermint {}? (default `{}`)'.format(key, val), val) if config_path != '-': bigchaindb.config_utils.write_config(conf, config_path) else: print(json.dumps(conf, indent=4, sort_keys=True)) print('Configuration written to {}'.format(config_path), file=sys.stderr) print('Ready to go!', file=sys.stderr)
def run_drop(args): """Drop the database""" dbname = bigchaindb.config['database']['name'] if not args.yes: response = input_on_stderr('Do you want to drop `{}` database? [y/n]: '.format(dbname)) if response != 'y': return conn = backend.connect() dbname = bigchaindb.config['database']['name'] schema.drop_database(conn, dbname)
def run_drop(args): """Drop the database""" dbname = bigchaindb.config['database']['name'] if not args.yes: response = input_on_stderr('Do you want to drop `{}` database? [y/n]: '.format(dbname)) if response != 'y': return conn = backend.connect() try: schema.drop_database(conn, dbname) except DatabaseDoesNotExist: print("Cannot drop '{name}'. The database does not exist.".format(name=dbname), file=sys.stderr)
def run_drop(args): """Drop the database""" dbname = bigchaindb.config['database']['name'] if not args.yes: response = input_on_stderr('Do you want to drop `{}` database? [y/n]: '.format(dbname)) if response != 'y': return conn = backend.connect() dbname = bigchaindb.config['database']['name'] try: schema.drop_database(conn, dbname) except DatabaseDoesNotExist: print("Cannot drop '{name}'. The database does not exist.".format(name=dbname), file=sys.stderr)
def run_configure(args, skip_if_exists=False): """Run a script to configure the current node. Args: skip_if_exists (bool): skip the function if a config file already exists """ config_path = args.config or bigchaindb.config_utils.CONFIG_DEFAULT_PATH config_file_exists = False # if the config path is `-` then it's stdout if config_path != '-': config_file_exists = os.path.exists(config_path) if config_file_exists and skip_if_exists: return if config_file_exists and not args.yes: want = input_on_stderr( 'Config file `{}` exists, do you want to ' 'override it? (cannot be undone) [y/N]: '.format(config_path)) if want != 'y': return conf = copy.deepcopy(bigchaindb.config) # Patch the default configuration with the new values conf = bigchaindb.config_utils.update( conf, bigchaindb.config_utils.env_config(bigchaindb.config)) print('Generating keypair', file=sys.stderr) conf['keypair']['private'], conf['keypair']['public'] = \ crypto.generate_key_pair() # select the correct config defaults based on the backend print('Generating default configuration for backend {}'.format( args.backend), file=sys.stderr) database_keys = bigchaindb._database_keys_map[args.backend] conf['database'] = bigchaindb._database_map[args.backend] if not args.yes: for key in ('bind', ): val = conf['server'][key] conf['server'][key] = input_on_stderr( 'API Server {}? (default `{}`): '.format(key, val), val) for key in ('scheme', 'host', 'port'): val = conf['wsserver'][key] conf['wsserver'][key] = input_on_stderr( 'WebSocket Server {}? (default `{}`): '.format(key, val), val) for key in database_keys: val = conf['database'][key] conf['database'][key] = input_on_stderr( 'Database {}? (default `{}`): '.format(key, val), val) val = conf['backlog_reassign_delay'] conf['backlog_reassign_delay'] = input_on_stderr( 'Stale transaction reassignment delay (in seconds)? (default `{}`): ' .format(val), val) if config_path != '-': bigchaindb.config_utils.write_config(conf, config_path) else: print(json.dumps(conf, indent=4, sort_keys=True)) print('Configuration written to {}'.format(config_path), file=sys.stderr) print('Ready to go!', file=sys.stderr)
def run_configure(args, skip_if_exists=False): """Run a script to configure the current node. Args: skip_if_exists (bool): skip the function if a config file already exists """ config_path = args.config or bigchaindb.config_utils.CONFIG_DEFAULT_PATH config_file_exists = False # if the config path is `-` then it's stdout if config_path != '-': config_file_exists = os.path.exists(config_path) if config_file_exists and skip_if_exists: return if config_file_exists and not args.yes: want = input_on_stderr('Config file `{}` exists, do you want to ' 'override it? (cannot be undone) [y/N]: '.format(config_path)) if want != 'y': return conf = copy.deepcopy(bigchaindb.config) # Patch the default configuration with the new values conf = bigchaindb.config_utils.update( conf, bigchaindb.config_utils.env_config(bigchaindb.config)) print('Generating keypair', file=sys.stderr) conf['keypair']['private'], conf['keypair']['public'] = \ crypto.generate_key_pair() # select the correct config defaults based on the backend print('Generating default configuration for backend {}' .format(args.backend), file=sys.stderr) database_keys = bigchaindb._database_keys_map[args.backend] conf['database'] = bigchaindb._database_map[args.backend] if not args.yes: for key in ('bind', ): val = conf['server'][key] conf['server'][key] = input_on_stderr('API Server {}? (default `{}`): '.format(key, val), val) for key in ('host', 'port'): val = conf['wsserver'][key] conf['wsserver'][key] = input_on_stderr('WebSocket Server {}? (default `{}`): '.format(key, val), val) for key in database_keys: val = conf['database'][key] conf['database'][key] = input_on_stderr('Database {}? (default `{}`): '.format(key, val), val) val = conf['backlog_reassign_delay'] conf['backlog_reassign_delay'] = input_on_stderr( 'Stale transaction reassignment delay (in seconds)? (default `{}`): '.format(val), val) if config_path != '-': bigchaindb.config_utils.write_config(conf, config_path) else: print(json.dumps(conf, indent=4, sort_keys=True)) print('Configuration written to {}'.format(config_path), file=sys.stderr) print('Ready to go!', file=sys.stderr)