Browse Source

cfg.py: prefix internally used attrs with underscore

The MMGen Project 2 years ago
parent
commit
d81d82fe35

+ 21 - 18
mmgen/cfg.py

@@ -24,9 +24,12 @@ import sys,os
 from collections import namedtuple
 from .base_obj import Lockable
 
-def die(exit_val,s=''):
-	if s:
-		sys.stderr.write(s+'\n')
+def die(*args,**kwargs):
+	from .util import die
+	die(*args,**kwargs)
+
+def die2(exit_val,s):
+	sys.stderr.write(s+'\n')
 	sys.exit(exit_val)
 
 class GlobalConstants(Lockable):
@@ -57,14 +60,14 @@ class GlobalConstants(Lockable):
 			platform = { 'linux':'linux', 'win':'win', 'msys':'win' }[k]
 			break
 	else:
-		die(1,f'{sys.platform!r}: platform not supported by {proj_name}')
+		die2(1,f'{sys.platform!r}: platform not supported by {proj_name}')
 
 	if os.getenv('HOME'):   # Linux or MSYS2
 		home_dir = os.getenv('HOME')
 	elif platform == 'win': # Windows without MSYS2 - not supported
-		die(1,f'$HOME not set!  {proj_name} for Windows must be run in MSYS2 environment')
+		die2(1,f'$HOME not set!  {proj_name} for Windows must be run in MSYS2 environment')
 	else:
-		die(2,'$HOME is not set!  Unable to determine home directory')
+		die2(2,'$HOME is not set!  Unable to determine home directory')
 
 	def get_mmgen_data_file(self,filename,package='mmgen'):
 		"""
@@ -218,7 +221,7 @@ class Config(Lockable):
 	pager = False
 
 	# 'long' opts (subset of common_opts_data):
-	common_opts = (
+	_common_opts = (
 		'accept_defaults',
 		'aiohttp_rpc_queue_len',
 		'bob',
@@ -242,10 +245,10 @@ class Config(Lockable):
 		'testnet',
 		'token' )
 
-	# opts not in common_opts but required to be set during opts initialization
-	init_opts = ('show_hash_presets','yes','verbose')
+	# opts not in _common_opts but required to be set during opts initialization
+	_init_opts = ('show_hash_presets','yes','verbose')
 
-	incompatible_opts = (
+	_incompatible_opts = (
 		('help','longhelp'),
 		('bob','alice','carol'),
 		('label','keep_label'),
@@ -253,7 +256,7 @@ class Config(Lockable):
 		('tx_id','terse_info'),
 	)
 
-	cfg_file_opts = (
+	_cfg_file_opts = (
 		'autochg_ignore_labels',
 		'color',
 		'daemon_data_dir',
@@ -295,7 +298,7 @@ class Config(Lockable):
 	# Supported environmental vars
 	# The corresponding attributes (lowercase, without 'mmgen_') must exist in the class.
 	# The 'MMGEN_DISABLE_' prefix sets the corresponding attribute to False.
-	env_opts = (
+	_env_opts = (
 		'MMGEN_DEBUG_ALL', # special: there is no `debug_all` attribute
 
 		'MMGEN_COLUMNS',
@@ -331,7 +334,7 @@ class Config(Lockable):
 		'MMGEN_ENABLE_ERIGON',
 		'MMGEN_DISABLE_COLOR',
 	)
-	infile_opts = (
+	_infile_opts = (
 		'keys_from_file',
 		'mmgen_keys_from_file',
 		'passwd_file',
@@ -341,12 +344,12 @@ class Config(Lockable):
 	)
 	# Auto-typechecked and auto-set opts - first value in list is the default
 	_ov = namedtuple('autoset_opt_info',['type','choices'])
-	autoset_opts = {
+	_autoset_opts = {
 		'fee_estimate_mode': _ov('nocase_pfx', ['conservative','economical']),
 		'rpc_backend':       _ov('nocase_pfx', ['auto','httplib','curl','aiohttp','requests']),
 	}
 
-	auto_typeset_opts = {
+	_auto_typeset_opts = {
 		'seed_len': int,
 		'subseeds': int,
 		'vsize_adj': float,
@@ -367,7 +370,7 @@ class Config(Lockable):
 			_reset_ok += ('force_standalone_scrypt_module',)
 
 	if os.getenv('MMGEN_DEBUG_ALL'):
-		for name in env_opts:
+		for name in _env_opts:
 			if name[:11] == 'MMGEN_DEBUG':
 				os.environ[name] = '1'
 
@@ -379,8 +382,8 @@ class Config(Lockable):
 		if hasattr(self,'_data_dir_root'):
 			return self._data_dir_root
 		else:
-			if self.data_dir_root_override:
-				self._data_dir_root = os.path.normpath(os.path.abspath(self.data_dir_root_override))
+			if self._data_dir_root_override:
+				self._data_dir_root = os.path.normpath(os.path.abspath(self._data_dir_root_override))
 			elif self.test_suite:
 				from test.include.common import get_test_data_dir
 				self._data_dir_root = get_test_data_dir()

+ 2 - 2
mmgen/main_txcreate.py

@@ -68,8 +68,8 @@ opts_data = {
 		'options': lambda cfg,proto,help_notes,s: s.format(
 			fu=help_notes('rel_fee_desc'),
 			fl=help_notes('fee_spec_letters'),
-			fe_all=fmt_list(cfg.autoset_opts['fee_estimate_mode'].choices,fmt='no_spc'),
-			fe_dfl=cfg.autoset_opts['fee_estimate_mode'].choices[0],
+			fe_all=fmt_list(cfg._autoset_opts['fee_estimate_mode'].choices,fmt='no_spc'),
+			fe_dfl=cfg._autoset_opts['fee_estimate_mode'].choices[0],
 			cu=proto.coin,
 			cfg=cfg),
 		'notes': lambda cfg,help_notes,s: s.format(

+ 2 - 2
mmgen/main_txdo.py

@@ -110,8 +110,8 @@ FMT CODES:
 			fl=help_notes('fee_spec_letters'),
 			ss=help_notes('dfl_subseeds'),
 			ss_max=SubSeedIdxRange.max_idx,
-			fe_all=fmt_list(cfg.autoset_opts['fee_estimate_mode'].choices,fmt='no_spc'),
-			fe_dfl=cfg.autoset_opts['fee_estimate_mode'].choices[0],
+			fe_all=fmt_list(cfg._autoset_opts['fee_estimate_mode'].choices,fmt='no_spc'),
+			fe_dfl=cfg._autoset_opts['fee_estimate_mode'].choices[0],
 			dsl=help_notes('dfl_seed_len'),
 			cu=proto.coin),
 		'notes': lambda cfg,help_notes,s: s.format(

+ 18 - 18
mmgen/opts.py

@@ -83,7 +83,7 @@ def fmt_opt(o):
 	return '--' + o.replace('_','-')
 
 def die_on_incompatible_opts(cfg):
-	for group in cfg.incompatible_opts:
+	for group in cfg._incompatible_opts:
 		bad = [k for k in cfg.__dict__ if k in group and getattr(cfg,k) != None]
 		if len(bad) > 1:
 			from .util import die
@@ -161,7 +161,7 @@ def set_cfg_from_cfg_file(
 		from .protocol import init_proto
 
 	for d in ucfg.get_lines():
-		if d.name in cfg.cfg_file_opts:
+		if d.name in cfg._cfg_file_opts:
 			ns = d.name.split('_')
 			if ns[0] in gc.core_coins:
 				if not need_proto:
@@ -183,9 +183,9 @@ def set_cfg_from_cfg_file(
 			val_conv = set_for_type(val,refval,attr,src=ucfg.fn)
 			if attr not in env_cfg:
 				setattr(cls,attr,val_conv)
-		elif d.name in cfg.autoset_opts:
+		elif d.name in cfg._autoset_opts:
 			cfgfile_autoset_opts[d.name] = d.value
-		elif d.name in cfg.auto_typeset_opts:
+		elif d.name in cfg._auto_typeset_opts:
 			cfgfile_auto_typeset_opts[d.name] = d.value
 		else:
 			from .util import die
@@ -195,7 +195,7 @@ def set_cfg_from_env(cfg):
 	for name,val in ((k,v) for k,v in os.environ.items() if k.startswith('MMGEN_')):
 		if name == 'MMGEN_DEBUG_ALL':
 			continue
-		elif name in cfg.env_opts:
+		elif name in cfg._env_opts:
 			if val: # ignore empty string values; string value of '0' or 'false' sets variable to False
 				disable = name.startswith('MMGEN_DISABLE_')
 				gname = name[(6,14)[disable]:].lower()
@@ -218,16 +218,16 @@ def show_common_opts_diff(cfg):
 		from .util import fmt_list
 		return fmt_list(['--'+s.replace('_','-') for s in set_data],fmt='col',indent='   ')
 
-	a = cfg.common_opts
+	a = cfg._common_opts
 	b = list(common_opts_data_to_list())
 	a_minus_b = [e for e in a if e not in b]
 	b_minus_a = [e for e in b if e not in a]
 	a_and_b   = [e for e in a if e in b]
 
 	from .util import msg
-	msg(f'cfg.common_opts - common_opts_data:\n   {do_fmt(a_minus_b) if a_minus_b else "None"}\n')
-	msg(f'common_opts_data - cfg.common_opts (these do not set global var):\n{do_fmt(b_minus_a)}\n')
-	msg(f'common_opts_data ^ cfg.common_opts (these set global var):\n{do_fmt(a_and_b)}\n')
+	msg(f'cfg._common_opts - common_opts_data:\n   {do_fmt(a_minus_b) if a_minus_b else "None"}\n')
+	msg(f'common_opts_data - cfg._common_opts (these do not set global var):\n{do_fmt(b_minus_a)}\n')
+	msg(f'common_opts_data ^ cfg._common_opts (these set global var):\n{do_fmt(a_and_b)}\n')
 
 	sys.exit(0)
 
@@ -323,8 +323,8 @@ def init(
 			+ po.filtered_opts
 			+ tuple(add_opts or [])
 			+ tuple(init_opts or [])
-			+ cfg.init_opts
-			+ cfg.common_opts ):
+			+ cfg._init_opts
+			+ cfg._common_opts ):
 		setattr(opt,o,po.user_opts[o] if o in po.user_opts else None)
 
 	if opt.version:
@@ -345,7 +345,7 @@ def init(
 	init_term(cfg)
 
 	# --data-dir overrides computed value of data_dir_root
-	cfg.data_dir_root_override = opt.data_dir
+	cfg._data_dir_root_override = opt.data_dir
 	if opt.data_dir:
 		del opt.data_dir
 
@@ -368,7 +368,7 @@ def init(
 			need_proto )
 
 	# Set cfg from opts, setting type from original class attr in Config if it exists:
-	auto_keys = tuple(cfg.autoset_opts.keys()) + tuple(cfg.auto_typeset_opts.keys())
+	auto_keys = tuple(cfg._autoset_opts.keys()) + tuple(cfg._auto_typeset_opts.keys())
 	for key,val in opt.__dict__.items():
 		if val is not None and key not in auto_keys:
 			setattr(cfg, key, set_for_type(val,getattr(cfg,key),'--'+key) if hasattr(cfg,key) else val)
@@ -396,7 +396,7 @@ def init(
 	check_or_create_dir(cfg.data_dir)
 
 	# Set globals from opts, setting type from original global value if it exists:
-	for key in cfg.autoset_opts:
+	for key in cfg._autoset_opts:
 		if hasattr(opt,key):
 			assert not hasattr(cfg,key), f'{key!r} is in cfg!'
 			if getattr(opt,key) is not None:
@@ -404,7 +404,7 @@ def init(
 			elif key in cfgfile_autoset_opts:
 				setattr(cfg, key, get_autoset_opt(cfg,key,cfgfile_autoset_opts[key],src='cfgfile'))
 			else:
-				setattr(cfg, key, cfg.autoset_opts[key].choices[0])
+				setattr(cfg, key, cfg._autoset_opts[key].choices[0])
 
 	set_auto_typeset_opts(cfg,cfgfile_auto_typeset_opts)
 
@@ -637,7 +637,7 @@ def check_usr_opts(cfg,usr_opts): # Raises an exception if any check fails
 		val = getattr(cfg,key)
 		desc = f'parameter for {fmt_opt(key)!r} option'
 
-		if key in cfg.infile_opts:
+		if key in cfg._infile_opts:
 			from .fileutil import check_infile
 			check_infile(val) # file exists and is readable - dies on error
 		elif key == 'outdir':
@@ -654,7 +654,7 @@ def set_auto_typeset_opts(cfg,cfgfile_auto_typeset_opts):
 		assert not hasattr(cfg,key), f'{key!r} is in cfg!'
 		setattr(cfg,key,None if val is None else ref_type(val))
 
-	for key,ref_type in cfg.auto_typeset_opts.items():
+	for key,ref_type in cfg._auto_typeset_opts.items():
 		if hasattr(opt,key):
 			do_set(key, getattr(opt,key), ref_type)
 		elif key in cfgfile_auto_typeset_opts:
@@ -690,6 +690,6 @@ def get_autoset_opt(cfg,key,val,src):
 			else:
 				die_on_err('unique substring of')
 
-	data = cfg.autoset_opts[key]
+	data = cfg._autoset_opts[key]
 
 	return getattr(opt_type,data.type)()

+ 3 - 3
test/misc/opts.py

@@ -55,8 +55,8 @@ if cfg._args == ['show_common_opts_diff']:
 for k in (
 	'foo',               # added opt
 	'print_checksum',    # sets 'quiet'
-	'quiet','verbose',   # init_opts, incompatible_opts
-	'passwd_file',       # infile_opts - check_infile()
+	'quiet','verbose',   # _incompatible_opts
+	'passwd_file',       # _infile_opts - check_infile()
 	'outdir',            # check_outdir()
 	'cached_balances',   # opt_sets_global
 	'minconf',           # global_sets_opt
@@ -73,6 +73,6 @@ for k in (
 
 msg('')
 for k in (
-	'fee_estimate_mode', # autoset_opts
+	'fee_estimate_mode', # _autoset_opts
 	):
 	msg('{:30} {}'.format( f'cfg.{k}:', getattr(cfg,k) ))

+ 1 - 1
test/test.py

@@ -341,7 +341,7 @@ def set_environ_for_spawned_scripts():
 	os.environ['MMGEN_COLUMNS'] = str(get_terminal_size().width)
 
 	if os.getenv('MMGEN_DEBUG_ALL'):
-		for name in cfg.env_opts:
+		for name in cfg._env_opts:
 			if name[:11] == 'MMGEN_DEBUG':
 				os.environ[name] = '1'
 

+ 1 - 1
test/test_py_d/common.py

@@ -97,7 +97,7 @@ def randbool():
 def disable_debug():
 	global save_debug
 	save_debug = {}
-	for k in cfg.env_opts:
+	for k in cfg._env_opts:
 		if k[:11] == 'MMGEN_DEBUG':
 			save_debug[k] = os.getenv(k)
 			os.environ[k] = ''

+ 1 - 1
test/test_py_d/ts_misc.py

@@ -41,7 +41,7 @@ class TestSuiteMisc(TestSuiteBase):
 	color = True
 
 	def rpc_backends(self):
-		backends = cfg.autoset_opts['rpc_backend'][1]
+		backends = cfg._autoset_opts['rpc_backend'][1]
 		for b in backends:
 			t = self.spawn_chk('mmgen-tool',[f'--rpc-backend={b}','daemon_version'],extra_desc=f'({b})')
 		return t

+ 4 - 4
test/test_py_d/ts_opts.py

@@ -59,13 +59,13 @@ class TestSuiteOpts(TestSuiteBase):
 				(
 					('cfg.foo',                 'None'),         # added opt
 					('cfg.print_checksum',      'None'),         # sets 'quiet'
-					('cfg.quiet',               'False'),        # init_opts, incompatible_opts
-					('cfg.verbose',             'False'),        # init_opts, incompatible_opts
-					('cfg.passwd_file',         ''),             # infile_opts - check_infile()
+					('cfg.quiet',               'False'),        # _incompatible_opts
+					('cfg.verbose',             'False'),        # _incompatible_opts
+					('cfg.passwd_file',         ''),             # _infile_opts - check_infile()
 					('cfg.outdir',              ''),             # check_outdir()
 					('cfg.cached_balances',     'False'),
 					('cfg.minconf',             '1'),
-					('cfg.fee_estimate_mode',   'conservative'), # autoset_opts
+					('cfg.fee_estimate_mode',   'conservative'), # _autoset_opts
 				)
 			)
 

+ 1 - 1
test/unit_tests_d/ut_rpc.py

@@ -114,7 +114,7 @@ def run_test(network_ids,test_cf_auth=False,daemon_ids=None):
 			d.remove_datadir()
 			d.start()
 
-		for n,backend in enumerate(cfg.autoset_opts['rpc_backend'].choices):
+		for n,backend in enumerate(cfg._autoset_opts['rpc_backend'].choices):
 			test = getattr(init_test,d.proto.coin.lower())
 			rpc = async_run(test(d.proto,backend,d))
 			if not n and cfg.verbose: