chainlib/chainlib/cli/config.py

138 lines
4.0 KiB
Python
Raw Normal View History

2021-08-21 09:31:59 +02:00
# standard imports
import logging
import os
2021-09-13 08:47:00 +02:00
import sys
2022-02-20 19:27:00 +01:00
import stat
2021-08-21 09:31:59 +02:00
# external imports
import confini
# local imports
from .base import (
Flag,
default_config_dir as default_parent_config_dir,
)
logg = logging.getLogger(__name__)
2021-08-21 09:31:59 +02:00
def logcallback(config):
"""Callback to dump config contents to log after completed config load
:param config: Config object
:type config: confini.Config
"""
2021-08-21 09:31:59 +02:00
logg.debug('config loaded:\n{}'.format(config))
class Config(confini.Config):
"""Extends confini.Config.
2021-08-21 09:31:59 +02:00
Processes argument parser attributes to configuration variables.
Provides sane configuration overrides and fallbacks.
"""
2021-08-21 09:31:59 +02:00
default_base_config_dir = default_parent_config_dir
default_fee_limit = 0
2022-05-11 20:20:45 +02:00
def __init__(self, config_dir=None, namespace=None):
self.namespace = namespace
if config_dir == None:
config_dir = self.default_base_config_dir
if self.namespace != None:
config_dir = os.path.join(config_dir, namespace)
super(Config, self).__init__(config_dir)
def add_user_dir(self, v):
if self.namespace != None:
v = os.path.join(v, self.namespace)
return super(Config, self).add_override_dir(v)
2022-05-11 20:20:45 +02:00
def process_config(config, arg, args, flags):
if arg.match('env', flags):
config.set_env_prefix(getattr(args, 'env_prefix'))
config.process()
2022-05-11 20:20:45 +02:00
args_override = {}
if arg.match('raw', flags):
config.add(getattr(args, 'raw', None), '_RAW')
2022-05-11 20:20:45 +02:00
if arg.match('provider', flags):
args_override['RPC_PROVIDER'] = getattr(args, 'p')
args_override['RPC_DIALECT'] = getattr(args, 'rpc_dialect')
if arg.match('chain_spec', flags):
args_override['CHAIN_SPEC'] = getattr(args, 'i')
if arg.match('config', flags):
config.add(getattr(args, 'namespace', None), 'CONFIG_USER_NAMESPACE')
if arg.match('key_file', flags):
args_override['WALLET_KEY_FILE'] = getattr(args, 'y')
fp = getattr(args, 'passphrase_file')
if fp != None:
st = os.stat(fp)
if stat.S_IMODE(st.st_mode) & (stat.S_IRWXO | stat.S_IRWXG) > 0:
logg.warning('others than owner have access on password file')
f = open(fp, 'r')
args_override['WALLET_PASSPHRASE'] = f.read()
f.close()
config.censor('PASSPHRASE', 'WALLET')
2022-05-13 15:44:15 +02:00
if arg.match('backend', flags):
args_override['STATE_BACKEND'] = getattr(args, 'backend')
if arg.match('path', flags):
args_override['STATE_PATH'] = getattr(args, 'state_path')
2022-05-11 20:20:45 +02:00
config.dict_override(args_override, 'cli args', allow_empty=True)
2022-05-11 20:25:46 +02:00
if arg.match('provider', flags):
2022-05-12 15:21:22 +02:00
if arg.match('target', flags):
config.add(getattr(args, 'height'), '_HEIGHT')
if arg.match('unsafe', flags):
config.add(getattr(args, 'u'), '_UNSAFE')
2022-05-11 20:25:46 +02:00
if arg.match('sign', flags):
config.add(getattr(args, 's'), '_RPC_SEND')
2022-05-11 20:20:45 +02:00
if arg.match('fee', flags):
config.add(getattr(args, 'fee_price'), '_FEE_PRICE')
fee_limit = getattr(args, 'fee_limit')
if fee_limit == None:
2022-05-12 15:21:22 +02:00
fee_limit = int(config.get('CHAIN_MIN_FEE'))
config.add(fee_limit, '_FEE_LIMIT')
2022-05-11 20:20:45 +02:00
if arg.match('nonce', flags):
config.add(getattr(args, 'nonce'), '_NONCE')
2022-05-11 20:20:45 +02:00
if arg.match('wait', flags):
if args.ww:
config.add(True, '_WAIT_ALL')
config.add(True, '_WAIT')
elif args.w:
config.add(True, '_WAIT')
2022-05-12 08:26:34 +02:00
if arg.match('seq', flags):
2022-05-11 20:20:45 +02:00
config.add(getattr(args, 'seq'), '_SEQ')
if arg.match('wallet', flags):
2022-05-11 20:20:45 +02:00
config.add(getattr(args, 'recipient'), '_RECIPIENT')
if arg.match('exec', flags):
2022-05-11 20:20:45 +02:00
config.add(getattr(args, 'executable_address'), '_EXEC_ADDRESS')
if arg.match('rpc_auth', flags):
2022-05-11 20:20:45 +02:00
config.add(getattr(args, 'rpc_auth'), 'RPC_AUTH')
config.add(getattr(args, 'rpc_credentials'), 'RPC_CREDENTIALS')
2021-09-13 08:47:00 +02:00
2022-05-13 15:44:15 +02:00
return config