Browse Source

'add_label' and 'remove_label' utilities for mmgen/tool.py

philemon 10 years ago
parent
commit
1c1659add0
1 changed files with 40 additions and 6 deletions
  1. 40 6
      mmgen/tool.py

+ 40 - 6
mmgen/tool.py

@@ -34,7 +34,7 @@ pnm = g.proj_name
 
 from collections import OrderedDict
 cmd_data = OrderedDict([
-	("help",         []),
+	("help",         ['<tool command> [str]']),
 	("usage",        ['<tool command> [str]']),
 	("strtob58",     ['<string> [str]']),
 	("b58tostr",     ['<b58 number> [str]']),
@@ -79,6 +79,8 @@ cmd_data = OrderedDict([
 	("getbalance",   ['minconf [int=1]']),
 	("txview",       ['<{pnm} tx file> [str]','pager [bool=False]','terse [bool=False]'.format(pnm=pnm)]),
 
+	("add_label",       ['<{pnm} address> [str]'.format(pnm=pnm),'<label> [str]']),
+	("remove_label",    ['<{pnm} address> [str]'.format(pnm=pnm)]),
 	("addrfile_chksum", ['<{pnm} addr file> [str]'.format(pnm=pnm)]),
 	("keyaddrfile_chksum", ['<{pnm} addr file> [str]'.format(pnm=pnm)]),
 	("find_incog_data", ['<file or device name> [str]','<Incog ID> [str]','keep_searching [bool=False]']),
@@ -133,6 +135,8 @@ cmd_help = """
       * The encrypted file is indistinguishable from random data
 
   {pnm}-specific operations:
+  add_label          - add descriptive label for {pnm} address in tracking wallet
+  remove_label       - remove descriptive label from {pnm} address in tracking wallet
   addrfile_chksum    - compute checksum for {pnm} address file
   keyaddrfile_chksum - compute checksum for {pnm} key-address file
   find_incog_data    - Use an Incog ID to find hidden incognito wallet data
@@ -170,7 +174,7 @@ def process_args(prog_name, command, cmd_args):
 	u_kwargs = cmd_args[len(c_args):]
 
 	if len(u_args) < len(c_args):
-		msg("%s args required" % len(c_args))
+		msg("%s arg%s required" % (len(c_args),suf(c_args,"k")))
 		tool_usage(prog_name, command)
 		sys.exit(1)
 
@@ -217,10 +221,10 @@ def process_args(prog_name, command, cmd_args):
 
 # Individual cmd_data
 
-def help():
-	Msg("Available commands:")
-	for k in cmd_data.keys():
-		Msg("%-16s %s" % (k," ".join(cmd_data[k])))
+# def help():
+# 	Msg("Available commands:")
+# 	for k in sorted(cmd_data.keys()):
+# 		Msg("%-16s %s" % (k," ".join(cmd_data[k])))
 
 def are_equal(a,b,dtype=""):
 	if dtype == "str": return a.lstrip("\0") == b.lstrip("\0")
@@ -245,6 +249,8 @@ def print_convert_results(indata,enc,dec,dtype):
 def usage(cmd):
 	tool_usage(g.prog_name, cmd)
 
+help = usage
+
 def hexdump(infile, cols=8, line_nums=True):
 	Msg(pretty_hexdump(get_data_from_file(infile,dash=True,silent=True),
 			cols=cols, line_nums=line_nums))
@@ -427,6 +433,34 @@ def txview(infile,pager=False,terse=False):
 	metadata,tx_hex,inputs_data,b2m_map,comment = parse_tx_file(tx_data,infile)
 	view_tx_data(c,inputs_data,tx_hex,b2m_map,comment,metadata,pager,pause=False,terse=terse)
 
+def add_label(mmaddr,label,remove=False):
+	if not is_mmgen_addr(mmaddr):
+		die(1,"{a}: not a valid {pnm} address".format(pnm=pnm,a=mmaddr))
+	check_addr_label(label)  # Exits on failure
+
+	c = connect_to_bitcoind()
+	from mmgen.addr import AddrInfoList
+	ail = AddrInfoList(bitcoind_connection=c)
+
+	btcaddr = ""
+	sid,idx = mmaddr.split(":")
+	if sid in ail.seed_ids():
+		btcaddr = ail.addrinfo(sid).btcaddr(int(idx))
+	if not btcaddr:
+		die(1,"{pnm} address {a} not found in tracking wallet".format(
+				pnm=pnm,a=mmaddr))
+
+	try:
+		c.importaddress(btcaddr," ".join((mmaddr,label)),rescan=False)
+	except:
+		die(1,"Unable to add label")
+
+	s = "{pnm} address {a} in tracking wallet".format(a=mmaddr,pnm=pnm)
+	if remove: msg("Removed label from {}".format(s))
+	else:      msg("Added label '{}' for {}".format(label,s))
+
+def remove_label(mmaddr): add_label(mmaddr,"",remove=True)
+
 def addrfile_chksum(infile):
 	from mmgen.addr import AddrInfo
 	AddrInfo(infile)