Browse Source

new MMGEN_BLACKLIST_DAEMONS environment var

The MMGen Project 2 years ago
parent
commit
84ff9f643a
4 changed files with 20 additions and 2 deletions
  1. 14 1
      mmgen/daemon.py
  2. 1 1
      mmgen/data/version
  3. 2 0
      mmgen/globalvars.py
  4. 3 0
      test/test.py

+ 14 - 1
mmgen/daemon.py

@@ -26,7 +26,7 @@ from collections import namedtuple
 
 
 from .globalvars import g
 from .globalvars import g
 from .color import set_vt100
 from .color import set_vt100
-from .util import msg,Msg_r,ymsg,die,remove_dups
+from .util import msg,Msg_r,ymsg,die,remove_dups,oneshot_warning
 from .flags import *
 from .flags import *
 
 
 _dd = namedtuple('daemon_data',['coind_name','coind_version','coind_version_str']) # latest tested version
 _dd = namedtuple('daemon_data',['coind_name','coind_version','coind_version_str']) # latest tested version
@@ -274,12 +274,25 @@ class CoinDaemon(Daemon):
 	def all_daemon_ids(cls):
 	def all_daemon_ids(cls):
 		return [i for coin in cls.coins for i in cls.coins[coin].daemon_ids]
 		return [i for coin in cls.coins for i in cls.coins[coin].daemon_ids]
 
 
+	class warn_blacklisted(oneshot_warning):
+		color = 'yellow'
+		message = 'blacklisted daemon: {!r}'
+
 	@classmethod
 	@classmethod
 	def get_daemon_ids(cls,coin):
 	def get_daemon_ids(cls,coin):
 
 
 		ret = cls.coins[coin].daemon_ids
 		ret = cls.coins[coin].daemon_ids
 		if 'erigon' in ret and not g.enable_erigon:
 		if 'erigon' in ret and not g.enable_erigon:
 			ret.remove('erigon')
 			ret.remove('erigon')
+		if g.blacklist_daemons:
+			blacklist = g.blacklist_daemons.split()
+			def gen():
+				for daemon_id in ret:
+					if daemon_id in blacklist:
+						cls.warn_blacklisted(div=daemon_id,fmt_args=[daemon_id])
+					else:
+						yield daemon_id
+			ret = list(gen())
 		return ret
 		return ret
 
 
 	@classmethod
 	@classmethod

+ 1 - 1
mmgen/data/version

@@ -1 +1 @@
-13.2.dev7
+13.2.dev8

+ 2 - 0
mmgen/globalvars.py

@@ -146,6 +146,7 @@ class GlobalContext(Lockable):
 	data_dir_root,data_dir,cfg_file = (None,None,None)
 	data_dir_root,data_dir,cfg_file = (None,None,None)
 	daemon_data_dir = '' # set by user
 	daemon_data_dir = '' # set by user
 	daemon_id = ''
 	daemon_id = ''
+	blacklist_daemons = ''
 
 
 	# must match CoinProtocol.coins
 	# must match CoinProtocol.coins
 	core_coins = ('btc','bch','ltc','eth','etc','zec','xmr')
 	core_coins = ('btc','bch','ltc','eth','etc','zec','xmr')
@@ -243,6 +244,7 @@ class GlobalContext(Lockable):
 		'MMGEN_TEST_SUITE',
 		'MMGEN_TEST_SUITE',
 		'MMGEN_TEST_SUITE_DETERMINISTIC',
 		'MMGEN_TEST_SUITE_DETERMINISTIC',
 		'MMGEN_TEST_SUITE_POPEN_SPAWN',
 		'MMGEN_TEST_SUITE_POPEN_SPAWN',
+		'MMGEN_BLACKLIST_DAEMONS',
 		'MMGEN_BOGUS_SEND',
 		'MMGEN_BOGUS_SEND',
 		'MMGEN_DEBUG',
 		'MMGEN_DEBUG',
 		'MMGEN_DEBUG_OPTS',
 		'MMGEN_DEBUG_OPTS',

+ 3 - 0
test/test.py

@@ -171,6 +171,9 @@ opts.UserOpts._reset_ok += ('no_daemon_autostart','names','no_timings','exit_aft
 # step 2: opts.init will create new data_dir in ./test (if not skipping_deps)
 # step 2: opts.init will create new data_dir in ./test (if not skipping_deps)
 usr_args = opts.init(opts_data)
 usr_args = opts.init(opts_data)
 
 
+if opt.daemon_id and opt.daemon_id in g.blacklist_daemons.split():
+	die(0,f'test.py: daemon {opt.daemon_id!r} blacklisted, exiting')
+
 network_id = g.coin.lower() + ('_tn' if opt.testnet else '')
 network_id = g.coin.lower() + ('_tn' if opt.testnet else '')
 
 
 from mmgen.protocol import init_proto_from_opts
 from mmgen.protocol import init_proto_from_opts