Browse Source

move TwMMGenID, TwLabel, get_tw_label() to tw.shared

The MMGen Project 2 years ago
parent
commit
a7b11f1d3b

+ 1 - 1
mmgen/addrdata.py

@@ -73,7 +73,7 @@ class TwAddrData(AddrData,metaclass=AsyncInit):
 
 
 	async def __init__(self,proto,wallet=None):
 	async def __init__(self,proto,wallet=None):
 		from .rpc import rpc_init
 		from .rpc import rpc_init
-		from .tw.view import TwLabel
+		from .tw.shared import TwLabel
 		from .globalvars import g
 		from .globalvars import g
 		from .seed import SeedID
 		from .seed import SeedID
 		self.proto = proto
 		self.proto = proto

+ 1 - 1
mmgen/main_addrimport.py

@@ -24,7 +24,7 @@ from collections import namedtuple
 
 
 from .common import *
 from .common import *
 from .addrlist import AddrList,KeyAddrList
 from .addrlist import AddrList,KeyAddrList
-from .tw.view import TwLabel
+from .tw.shared import TwLabel
 
 
 opts_data = {
 opts_data = {
 	'text': {
 	'text': {

+ 2 - 2
mmgen/proto/btc/tw/addresses.py

@@ -13,10 +13,10 @@ proto.btc.tw.addresses: Bitcoin base protocol tracking wallet address list class
 """
 """
 
 
 from ....tw.addresses import TwAddresses
 from ....tw.addresses import TwAddresses
-from ....tw.view import TwLabel,get_obj
+from ....tw.shared import TwLabel
 from ....util import msg,msg_r
 from ....util import msg,msg_r
 from ....addr import CoinAddr
 from ....addr import CoinAddr
-from ....obj import NonNegativeInt
+from ....obj import NonNegativeInt,get_obj
 from .common import BitcoinTwCommon
 from .common import BitcoinTwCommon
 
 
 class BitcoinTwAddresses(TwAddresses,BitcoinTwCommon):
 class BitcoinTwAddresses(TwAddresses,BitcoinTwCommon):

+ 1 - 1
mmgen/proto/btc/tw/bal.py

@@ -13,7 +13,7 @@ proto.btc.twbal: Bitcoin base protocol tracking wallet balance class
 """
 """
 
 
 from ....tw.bal import TwGetBalance
 from ....tw.bal import TwGetBalance
-from ....tw.view import get_tw_label
+from ....tw.shared import get_tw_label
 
 
 class BitcoinTwGetBalance(TwGetBalance):
 class BitcoinTwGetBalance(TwGetBalance):
 
 

+ 1 - 1
mmgen/proto/btc/tw/common.py

@@ -15,7 +15,7 @@ proto.btc.tw.common: Bitcoin base protocol tracking wallet dependency classes
 from ....addr import CoinAddr
 from ....addr import CoinAddr
 from ....util import die,msg,rmsg
 from ....util import die,msg,rmsg
 from ....obj import MMGenList
 from ....obj import MMGenList
-from ....tw.view import get_tw_label
+from ....tw.shared import get_tw_label
 
 
 class BitcoinTwCommon:
 class BitcoinTwCommon:
 
 

+ 1 - 1
mmgen/proto/btc/tw/json.py

@@ -14,7 +14,7 @@ proto.btc.tw.json: export and import tracking wallet to JSON format
 
 
 from collections import namedtuple
 from collections import namedtuple
 from ....tw.json import TwJSON
 from ....tw.json import TwJSON
-from ....tw.view import TwMMGenID
+from ....tw.shared import TwMMGenID
 
 
 class BitcoinTwJSON(TwJSON):
 class BitcoinTwJSON(TwJSON):
 
 

+ 1 - 1
mmgen/proto/btc/tw/txhistory.py

@@ -15,7 +15,7 @@ proto.btc.tw.txhistory: Bitcoin base protocol tracking wallet transaction histor
 from collections import namedtuple
 from collections import namedtuple
 from ....globalvars import g
 from ....globalvars import g
 from ....tw.txhistory import TwTxHistory
 from ....tw.txhistory import TwTxHistory
-from ....tw.view import get_tw_label,TwMMGenID
+from ....tw.shared import get_tw_label,TwMMGenID
 from ....addr import CoinAddr
 from ....addr import CoinAddr
 from ....util import msg,msg_r
 from ....util import msg,msg_r
 from ....color import nocolor,red,pink,gray
 from ....color import nocolor,red,pink,gray

+ 1 - 1
mmgen/proto/eth/tw/common.py

@@ -15,7 +15,7 @@ from ....globalvars import g
 from ....tw.ctl import TrackingWallet
 from ....tw.ctl import TrackingWallet
 from ....tw.view import TwView
 from ....tw.view import TwView
 from ....addr import CoinAddr
 from ....addr import CoinAddr
-from ....tw.view import TwLabel
+from ....tw.shared import TwLabel
 
 
 class EthereumTwCommon(TwView):
 class EthereumTwCommon(TwView):
 
 

+ 1 - 1
mmgen/proto/eth/tw/json.py

@@ -14,7 +14,7 @@ proto.eth.tw.json: export and import tracking wallet to JSON format
 
 
 from collections import namedtuple
 from collections import namedtuple
 from ....tw.json import TwJSON
 from ....tw.json import TwJSON
-from ....tw.view import TwMMGenID
+from ....tw.shared import TwMMGenID
 
 
 class EthereumTwJSON(TwJSON):
 class EthereumTwJSON(TwJSON):
 
 

+ 1 - 1
mmgen/proto/eth/tw/unspent.py

@@ -20,7 +20,7 @@
 proto.eth.twuo: Ethereum tracking wallet unspent outputs class
 proto.eth.twuo: Ethereum tracking wallet unspent outputs class
 """
 """
 
 
-from ....tw.view import TwLabel
+from ....tw.shared import TwLabel
 from ....tw.unspent import TwUnspentOutputs
 from ....tw.unspent import TwUnspentOutputs
 from .common import EthereumTwCommon
 from .common import EthereumTwCommon
 
 

+ 2 - 1
mmgen/tw/addresses.py

@@ -19,7 +19,8 @@ from ..obj import MMGenListItem,ImmutableAttr,ListItemAttr,TwComment,NonNegative
 from ..rpc import rpc_init
 from ..rpc import rpc_init
 from ..addr import CoinAddr,MMGenID
 from ..addr import CoinAddr,MMGenID
 from ..color import red,green
 from ..color import red,green
-from .view import TwView,TwMMGenID
+from .view import TwView
+from .shared import TwMMGenID
 
 
 class TwAddresses(MMGenObject,TwView,metaclass=AsyncInit):
 class TwAddresses(MMGenObject,TwView,metaclass=AsyncInit):
 
 

+ 1 - 1
mmgen/tw/ctl.py

@@ -36,7 +36,7 @@ from ..objmethods import MMGenObject
 from ..obj import TwComment,get_obj
 from ..obj import TwComment,get_obj
 from ..addr import CoinAddr,is_mmgen_id,is_coin_addr
 from ..addr import CoinAddr,is_mmgen_id,is_coin_addr
 from ..rpc import rpc_init
 from ..rpc import rpc_init
-from .view import TwMMGenID,TwLabel
+from .shared import TwMMGenID,TwLabel
 
 
 addr_info = namedtuple('addr_info',['twmmid','coinaddr'])
 addr_info = namedtuple('addr_info',['twmmid','coinaddr'])
 
 

+ 82 - 0
mmgen/tw/shared.py

@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+#
+# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
+# Copyright (C)2013-2022 The MMGen Project <mmgen@tuta.io>
+# Licensed under the GNU General Public License, Version 3:
+#   https://www.gnu.org/licenses
+# Public project repositories:
+#   https://github.com/mmgen/mmgen
+#   https://gitlab.com/mmgen/mmgen
+
+"""
+tw.shared: classes and functions shared by all tracking wallet classes
+"""
+
+from ..objmethods import Hilite,InitErrors,MMGenObject
+from ..obj import TwComment
+from ..addr import MMGenID
+
+class TwMMGenID(str,Hilite,InitErrors,MMGenObject):
+	color = 'orange'
+	width = 0
+	trunc_ok = False
+	def __new__(cls,proto,id_str):
+		if type(id_str) == cls:
+			return id_str
+		try:
+			ret = addr = disp = MMGenID(proto,id_str)
+			sort_key,idtype = (ret.sort_key,'mmgen')
+		except Exception as e:
+			try:
+				coin,addr = id_str.split(':',1)
+				assert coin == proto.base_coin.lower(),(
+					f'not a string beginning with the prefix {proto.base_coin.lower()!r}:' )
+				assert addr.isascii() and addr.isalnum(), 'not an ASCII alphanumeric string'
+				ret,sort_key,idtype,disp = (id_str,'z_'+id_str,'non-mmgen','non-MMGen')
+				addr = proto.coin_addr(addr)
+			except Exception as e2:
+				return cls.init_fail(e,id_str,e2=e2)
+
+		me = str.__new__(cls,ret)
+		me.obj = ret
+		me.disp = disp
+		me.addr = addr
+		me.sort_key = sort_key
+		me.type = idtype
+		me.proto = proto
+		return me
+
+	@classmethod
+	def fmtc(cls,twmmid,*args,**kwargs):
+		return super().fmtc(twmmid.disp,*args,**kwargs)
+
+# non-displaying container for TwMMGenID,TwComment
+class TwLabel(str,InitErrors,MMGenObject):
+	exc = 'BadTwLabel'
+	passthru_excs = ('BadTwComment',)
+	def __new__(cls,proto,text):
+		if type(text) == cls:
+			return text
+		try:
+			ts = text.split(None,1)
+			mmid = TwMMGenID(proto,ts[0])
+			comment = TwComment(ts[1] if len(ts) == 2 else '')
+			me = str.__new__( cls, mmid + (' ' + comment if comment else '') )
+			me.mmid = mmid
+			me.comment = comment
+			me.proto = proto
+			return me
+		except Exception as e:
+			return cls.init_fail(e,text)
+
+def get_tw_label(proto,s):
+	"""
+	raise an exception on a malformed comment, return None on an empty or invalid label
+	"""
+	try:
+		return TwLabel(proto,s)
+	except Exception as e:
+		if type(e).__name__ == 'BadTwComment': # do it this way to avoid importing .exception
+			raise
+		else:
+			return None

+ 2 - 1
mmgen/tw/unspent.py

@@ -35,7 +35,8 @@ from ..obj import (
 	NonNegativeInt )
 	NonNegativeInt )
 from ..addr import CoinAddr,MMGenID
 from ..addr import CoinAddr,MMGenID
 from ..rpc import rpc_init
 from ..rpc import rpc_init
-from .view import TwView,TwMMGenID,get_tw_label
+from .view import TwView
+from .shared import TwMMGenID,get_tw_label
 
 
 class TwUnspentOutputs(MMGenObject,TwView,metaclass=AsyncInit):
 class TwUnspentOutputs(MMGenObject,TwView,metaclass=AsyncInit):
 
 

+ 1 - 67
mmgen/tw/view.py

@@ -25,10 +25,9 @@ from collections import namedtuple
 
 
 from ..globalvars import g
 from ..globalvars import g
 from ..objmethods import Hilite,InitErrors,MMGenObject
 from ..objmethods import Hilite,InitErrors,MMGenObject
-from ..obj import TwComment,get_obj,MMGenIdx,MMGenList
+from ..obj import get_obj,MMGenIdx,MMGenList
 from ..color import nocolor,yellow,green,red,blue
 from ..color import nocolor,yellow,green,red,blue
 from ..util import msg,msg_r,fmt,die,capfirst,make_timestr
 from ..util import msg,msg_r,fmt,die,capfirst,make_timestr
-from ..addr import MMGenID
 
 
 # base class for TwUnspentOutputs,TwAddresses,TwTxHistory:
 # base class for TwUnspentOutputs,TwAddresses,TwTxHistory:
 class TwView:
 class TwView:
@@ -506,68 +505,3 @@ class TwView:
 					return None
 					return None
 
 
 			return await do_comment_add(res)
 			return await do_comment_add(res)
-
-class TwMMGenID(str,Hilite,InitErrors,MMGenObject):
-	color = 'orange'
-	width = 0
-	trunc_ok = False
-	def __new__(cls,proto,id_str):
-		if type(id_str) == cls:
-			return id_str
-		try:
-			ret = addr = disp = MMGenID(proto,id_str)
-			sort_key,idtype = (ret.sort_key,'mmgen')
-		except Exception as e:
-			try:
-				coin,addr = id_str.split(':',1)
-				assert coin == proto.base_coin.lower(),(
-					f'not a string beginning with the prefix {proto.base_coin.lower()!r}:' )
-				assert addr.isascii() and addr.isalnum(), 'not an ASCII alphanumeric string'
-				ret,sort_key,idtype,disp = (id_str,'z_'+id_str,'non-mmgen','non-MMGen')
-				addr = proto.coin_addr(addr)
-			except Exception as e2:
-				return cls.init_fail(e,id_str,e2=e2)
-
-		me = str.__new__(cls,ret)
-		me.obj = ret
-		me.disp = disp
-		me.addr = addr
-		me.sort_key = sort_key
-		me.type = idtype
-		me.proto = proto
-		return me
-
-	@classmethod
-	def fmtc(cls,twmmid,*args,**kwargs):
-		return super().fmtc(twmmid.disp,*args,**kwargs)
-
-# non-displaying container for TwMMGenID,TwComment
-class TwLabel(str,InitErrors,MMGenObject):
-	exc = 'BadTwLabel'
-	passthru_excs = ('BadTwComment',)
-	def __new__(cls,proto,text):
-		if type(text) == cls:
-			return text
-		try:
-			ts = text.split(None,1)
-			mmid = TwMMGenID(proto,ts[0])
-			comment = TwComment(ts[1] if len(ts) == 2 else '')
-			me = str.__new__( cls, mmid + (' ' + comment if comment else '') )
-			me.mmid = mmid
-			me.comment = comment
-			me.proto = proto
-			return me
-		except Exception as e:
-			return cls.init_fail(e,text)
-
-def get_tw_label(proto,s):
-	"""
-	raise an exception on a malformed comment, return None on an empty or invalid label
-	"""
-	try:
-		return TwLabel(proto,s)
-	except Exception as e:
-		if type(e).__name__ == 'BadTwComment': # do it this way to avoid importing .exception
-			raise
-		else:
-			return None

+ 1 - 1
test/test_py_d/ts_main.py

@@ -483,7 +483,7 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
 		cmd_args = self._make_txcreate_cmdline(tx_data)
 		cmd_args = self._make_txcreate_cmdline(tx_data)
 
 
 		if cmdline_inputs:
 		if cmdline_inputs:
-			from mmgen.tw.view import TwLabel
+			from mmgen.tw.shared import TwLabel
 			cmd_args = [
 			cmd_args = [
 				'--inputs={},{},{},{},{},{}'.format(
 				'--inputs={},{},{},{},{},{}'.format(
 					TwLabel(self.proto,dfake[0][self.lbl_id]).mmid,dfake[1]['address'],
 					TwLabel(self.proto,dfake[0][self.lbl_id]).mmid,dfake[1]['address'],