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):
 		from .rpc import rpc_init
-		from .tw.view import TwLabel
+		from .tw.shared import TwLabel
 		from .globalvars import g
 		from .seed import SeedID
 		self.proto = proto

+ 1 - 1
mmgen/main_addrimport.py

@@ -24,7 +24,7 @@ from collections import namedtuple
 
 from .common import *
 from .addrlist import AddrList,KeyAddrList
-from .tw.view import TwLabel
+from .tw.shared import TwLabel
 
 opts_data = {
 	'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.view import TwLabel,get_obj
+from ....tw.shared import TwLabel
 from ....util import msg,msg_r
 from ....addr import CoinAddr
-from ....obj import NonNegativeInt
+from ....obj import NonNegativeInt,get_obj
 from .common import 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.view import get_tw_label
+from ....tw.shared import get_tw_label
 
 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 ....util import die,msg,rmsg
 from ....obj import MMGenList
-from ....tw.view import get_tw_label
+from ....tw.shared import get_tw_label
 
 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 ....tw.json import TwJSON
-from ....tw.view import TwMMGenID
+from ....tw.shared import TwMMGenID
 
 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 ....globalvars import g
 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 ....util import msg,msg_r
 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.view import TwView
 from ....addr import CoinAddr
-from ....tw.view import TwLabel
+from ....tw.shared import TwLabel
 
 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 ....tw.json import TwJSON
-from ....tw.view import TwMMGenID
+from ....tw.shared import TwMMGenID
 
 class EthereumTwJSON(TwJSON):
 

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

@@ -20,7 +20,7 @@
 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 .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 ..addr import CoinAddr,MMGenID
 from ..color import red,green
-from .view import TwView,TwMMGenID
+from .view import TwView
+from .shared import TwMMGenID
 
 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 ..addr import CoinAddr,is_mmgen_id,is_coin_addr
 from ..rpc import rpc_init
-from .view import TwMMGenID,TwLabel
+from .shared import TwMMGenID,TwLabel
 
 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 )
 from ..addr import CoinAddr,MMGenID
 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):
 

+ 1 - 67
mmgen/tw/view.py

@@ -25,10 +25,9 @@ from collections import namedtuple
 
 from ..globalvars import g
 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 ..util import msg,msg_r,fmt,die,capfirst,make_timestr
-from ..addr import MMGenID
 
 # base class for TwUnspentOutputs,TwAddresses,TwTxHistory:
 class TwView:
@@ -506,68 +505,3 @@ class TwView:
 					return None
 
 			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)
 
 		if cmdline_inputs:
-			from mmgen.tw.view import TwLabel
+			from mmgen.tw.shared import TwLabel
 			cmd_args = [
 				'--inputs={},{},{},{},{},{}'.format(
 					TwLabel(self.proto,dfake[0][self.lbl_id]).mmid,dfake[1]['address'],