Browse Source

minor fixes and cleanups

The MMGen Project 2 years ago
parent
commit
729dc369fd
5 changed files with 31 additions and 12 deletions
  1. 11 1
      mmgen/base_proto/ethereum/tw/ctl.py
  2. 5 6
      mmgen/tw/ctl.py
  3. 6 2
      mmgen/util.py
  4. 2 2
      test/overlay/__init__.py
  5. 7 1
      test/test_py_d/ts_ethdev.py

+ 11 - 1
mmgen/base_proto/ethereum/tw/ctl.py

@@ -36,7 +36,12 @@ class EthereumTrackingWallet(TrackingWallet):
 		return addr in self.data_root
 
 	def init_empty(self):
-		self.data = { 'coin': self.proto.coin, 'accounts': {}, 'tokens': {} }
+		self.data = {
+			'coin': self.proto.coin,
+			'network': self.proto.network.upper(),
+			'accounts': {},
+			'tokens': {},
+		}
 
 	def upgrade_wallet_maybe(self):
 
@@ -70,6 +75,11 @@ class EthereumTrackingWallet(TrackingWallet):
 			add_token_params_fields()
 			upgraded = True
 
+		if not 'network' in self.data:
+			ymsg(f'Upgrading {self.desc} (v3->v4: network field added)')
+			self.data['network'] = self.proto.network.upper()
+			upgraded = True
+
 		if upgraded:
 			self.force_write()
 			msg(f'{self.desc} upgraded successfully!')

+ 5 - 6
mmgen/tw/ctl.py

@@ -203,7 +203,7 @@ class TrackingWallet(MMGenObject,metaclass=AsyncInit):
 		self.mode = mode_save
 
 	@write_mode
-	def write_changed(self,data):
+	def write_changed(self,data,quiet):
 		from ..fileutil import write_data_to_file
 		write_data_to_file(
 			self.tw_fn,
@@ -211,25 +211,24 @@ class TrackingWallet(MMGenObject,metaclass=AsyncInit):
 			desc              = f'{self.base_desc} data',
 			ask_overwrite     = False,
 			ignore_opt_outdir = True,
-			quiet             = True,
-			check_data        = True,
+			quiet             = quiet,
+			check_data        = True, # die if wallet has been altered by another program
 			cmp_data          = self.orig_data )
 
 		self.orig_data = data
 
-	def write(self): # use 'check_data' to check wallet hasn't been altered by another program
+	def write(self,quiet=True):
 		if not self.use_tw_file:
 			dmsg("'use_tw_file' is False, doing nothing")
 			return
 		dmsg(f'write(): checking if {self.desc} data has changed')
 
 		wdata = json.dumps(self.data)
-
 		if self.orig_data != wdata:
 			if g.debug:
 				print_stack_trace(f'TW DATA CHANGED {self!r}')
 				print_diff(self.orig_data,wdata,from_json=True)
-			self.write_changed(wdata)
+			self.write_changed(wdata,quiet=quiet)
 		elif g.debug:
 			msg('Data is unchanged\n')
 

+ 6 - 2
mmgen/util.py

@@ -650,7 +650,7 @@ def get_subclasses(cls,names=False):
 				yield j
 	return tuple((c.__name__ for c in gen(cls)) if names else gen(cls))
 
-def base_proto_subclass(cls,proto,subdir,modname):
+def base_proto_subclass(cls,proto,subdir,modname,sub_clsname=None):
 	"""
 	magic module loading and class selection
 	"""
@@ -658,13 +658,17 @@ def base_proto_subclass(cls,proto,subdir,modname):
 		proto.base_proto.lower(),
 		subdir + '.' if subdir else '',
 		modname )
+
 	clsname = (
 		proto.mod_clsname
 		+ ('Token' if proto.tokensym else '')
 		+ cls.__name__ )
 
 	import importlib
-	return getattr(importlib.import_module(modpath),clsname)
+	if sub_clsname:
+		return getattr(getattr(importlib.import_module(modpath),clsname),sub_clsname)
+	else:
+		return getattr(importlib.import_module(modpath),clsname)
 
 # decorator for TrackingWallet
 def write_mode(orig_func):

+ 2 - 2
test/overlay/__init__.py

@@ -30,10 +30,10 @@ def overlay_setup(repo_root):
 					os.path.join(destdir,link_fn) )
 
 	overlay_dir = get_overlay_dir(repo_root)
-	fakemod_root = os.path.join(repo_root,'test','overlay','fakemods')
-	make_link = os.symlink if sys.platform == 'linux' else shutil.copy2
 
 	if not os.path.exists(os.path.join(overlay_dir,'mmgen','main.py')):
+		fakemod_root = os.path.join(repo_root,'test','overlay','fakemods')
+		make_link = os.symlink if sys.platform == 'linux' else shutil.copy2
 		sys.stderr.write('Setting up overlay tree\n')
 		shutil.rmtree(overlay_dir,ignore_errors=True)
 		for d in (

+ 7 - 1
test/test_py_d/ts_ethdev.py

@@ -56,6 +56,7 @@ vbal2 = '99.997088755'
 vbal3 = '1.23142525'
 vbal4 = '127.0287909'
 vbal5 = '1000126.14828654512345678'
+vbal6 = '1000124.91944564512345678'
 
 bals = {
 	'1': [  ('98831F3A:E:1','123.456')],
@@ -301,6 +302,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 		('token_edit_label1',  f'adding label to addr #{del_addrs[0]} in {coin} token tracking wallet'),
 
 		('remove_addr1',       f'removing addr #{del_addrs[0]} from {coin} tracking wallet'),
+		('twview6',            'twview (balance reduced after address removal)'),
 		('remove_addr2',       f'removing addr #{del_addrs[1]} from {coin} tracking wallet'),
 		('token_remove_addr1', f'removing addr #{del_addrs[0]} from {coin} token tracking wallet'),
 		('token_remove_addr2', f'removing addr #{del_addrs[1]} from {coin} token tracking wallet'),
@@ -1080,7 +1082,9 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 		return self.token_bal(n='3')
 
 	def del_dev_addr(self):
-		return self.spawn('mmgen-tool', self.eth_args + ['remove_address',dfl_devaddr])
+		t = self.spawn('mmgen-tool', self.eth_args + ['remove_address', dfl_devaddr])
+		t.expect(f"'{dfl_devaddr}' deleted")
+		return t
 
 	def bal1_getbalance(self):
 		return self.bal_getbalance('1',etc_adj=True)
@@ -1199,6 +1203,8 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
 		return self.twview(tool_args=['wide=1','minconf=999999999'])
 	def twview5(self):
 		return self.twview(tool_args=['wide=1','minconf=0'])
+	def twview6(self):
+		return self.twview(expect_str=vbal6)
 
 	def token_twview1(self):
 		return self.twview(args=['--token=mm1'])