Browse Source

devtools.pmsg(): add color support, add test

The MMGen Project 1 year ago
parent
commit
24d2ec0bba
2 changed files with 49 additions and 19 deletions
  1. 30 18
      mmgen/devtools.py
  2. 19 1
      test/unit_tests_d/ut_devtools.py

+ 30 - 18
mmgen/devtools.py

@@ -14,29 +14,40 @@ devtools: Developer tools for the MMGen suite
 
 
 import sys
 import sys
 
 
-def pfmt(*args):
+color_funcs = {
+	name: lambda s, n=n: f'\033[{n};1m{s}\033[0m'
+		for name,n in (
+			('red',   31),
+			('green', 32),
+			('yellow',33),
+			('blue',  34),
+			('purple',35))
+}
+
+def pfmt(*args,color=None):
 	import pprint
 	import pprint
-	return pprint.PrettyPrinter(indent=4).pformat(
+	ret = pprint.PrettyPrinter(indent=4).pformat(
 		args if len(args) > 1 else '' if not args else args[0] )
 		args if len(args) > 1 else '' if not args else args[0] )
+	return color_funcs[color](ret) if color else ret
 
 
-def pmsg(*args):
-	sys.stderr.write(pfmt(*args) + '\n')
+def pmsg(*args,color=None):
+	sys.stderr.write(pfmt(*args,color=color) + '\n')
 
 
-def pmsg_r(*args):
-	sys.stderr.write(pfmt(*args))
+def pmsg_r(*args,color=None):
+	sys.stderr.write(pfmt(*args,color=color))
 
 
 def pdie(*args,exit_val=1):
 def pdie(*args,exit_val=1):
-	pmsg(*args)
+	pmsg(*args,color='red')
 	sys.exit(exit_val)
 	sys.exit(exit_val)
 
 
 def pexit(*args):
 def pexit(*args):
 	pdie(*args,exit_val=0)
 	pdie(*args,exit_val=0)
 
 
-def Pmsg(*args):
-	sys.stdout.write(pfmt(*args) + '\n')
+def Pmsg(*args,color=None):
+	sys.stdout.write(pfmt(*args,color=color) + '\n')
 
 
 def Pdie(*args,exit_val=1):
 def Pdie(*args,exit_val=1):
-	Pmsg(*args)
+	Pmsg(*args,color='red')
 	sys.exit(exit_val)
 	sys.exit(exit_val)
 
 
 def Pexit(*args):
 def Pexit(*args):
@@ -98,17 +109,17 @@ def get_ndiff(a,b):
 class MMGenObjectMethods: # mixin class for MMGenObject
 class MMGenObjectMethods: # mixin class for MMGenObject
 
 
 	# Pretty-print an MMGenObject instance, recursing into sub-objects - WIP
 	# Pretty-print an MMGenObject instance, recursing into sub-objects - WIP
-	def pmsg(self):
-		sys.stdout.write('\n'+self.pfmt())
+	def pmsg(self,color=None):
+		sys.stdout.write('\n'+self.pfmt(color=color))
 
 
-	def pdie(self,exit_val=1):
-		self.pmsg()
+	def pdie(self,exit_val=1,color=None):
+		self.pmsg(color=color)
 		sys.exit(exit_val)
 		sys.exit(exit_val)
 
 
-	def pexit(self):
-		self.pdie(exit_val=0)
+	def pexit(self,color=None):
+		self.pdie(exit_val=0,color=color)
 
 
-	def pfmt(self,lvl=0,id_list=[]):
+	def pfmt(self,lvl=0,id_list=[],color=None):
 		from decimal import Decimal
 		from decimal import Decimal
 		scalars = (str,int,float,Decimal)
 		scalars = (str,int,float,Decimal)
 		def do_list(out,e,lvl=0,is_dict=False):
 		def do_list(out,e,lvl=0,is_dict=False):
@@ -178,4 +189,5 @@ class MMGenObjectMethods: # mixin class for MMGenObject
 					l=(lvl*8)+4 ))
 					l=(lvl*8)+4 ))
 
 
 		import re
 		import re
-		return re.sub('\n+','\n',''.join(out))
+		ret = re.sub('\n+','\n',''.join(out))
+		return color_funcs[color](ret) if color else ret

+ 19 - 1
test/unit_tests_d/ut_devtools.py

@@ -6,6 +6,7 @@ test.unit_tests_d.ut_devtools: devtools unit tests for the MMGen suite
 
 
 import os,json
 import os,json
 from mmgen.devtools import *
 from mmgen.devtools import *
+from mmgen.util import msg
 from . import unit_tests_base
 from . import unit_tests_base
 
 
 textA = """
 textA = """
@@ -86,5 +87,22 @@ class unit_tests(unit_tests_base):
 			seed        = Seed(cfg,seed_bin=bytes.fromhex('bead'*16)),
 			seed        = Seed(cfg,seed_bin=bytes.fromhex('bead'*16)),
 			addr_idxs   = '1',
 			addr_idxs   = '1',
 			mmtype      = 'B',
 			mmtype      = 'B',
-			skip_chksum = True ).pmsg()
+			skip_chksum = True ).pmsg(color='green')
+		return True
+
+	def pmsg(self,name,ut):
+		colors = (None,'red','green','yellow','blue','purple')
+
+		msg('\npmsg_r():')
+		for color in colors:
+			pmsg_r({'color':color},color=color)
+
+		msg('\n\npmsg():')
+		for color in colors:
+			pmsg({'color':color},color=color)
+
+		msg('\nPmsg():')
+		for color in colors:
+			Pmsg({'color':color},color=color)
+
 		return True
 		return True