Browse Source

scripts/create-token.py, test.py oneshot_warning; minor fixes

The MMGen Project 3 years ago
parent
commit
9c5f4de936
2 changed files with 16 additions and 15 deletions
  1. 11 12
      scripts/create-token.py
  2. 5 3
      test/test_py_d/ts_misc.py

+ 11 - 12
scripts/create-token.py

@@ -24,9 +24,9 @@ from mmgen.common import *
 ti = namedtuple('token_param_info',['default','conversion','test'])
 ti = namedtuple('token_param_info',['default','conversion','test'])
 class TokenData:
 class TokenData:
 	fields = ('decimals','supply','name','symbol','owner_addr')
 	fields = ('decimals','supply','name','symbol','owner_addr')
-	decimals   = ti('18', int, lambda s: s.isdigit() and 0 < int(s) <= 36)
+	decimals   = ti('18', int, lambda s: s.isascii() and s.isdigit() and 0 < int(s) <= 36)
 	name       = ti(None, str, lambda s: s.isascii() and s.isprintable() and len(s) < 256)
 	name       = ti(None, str, lambda s: s.isascii() and s.isprintable() and len(s) < 256)
-	supply     = ti(None, int, lambda s: s.isdigit() and 0 < int(s) <= 2**256 - 1)
+	supply     = ti(None, int, lambda s: s.isascii() and s.isdigit() and 0 < int(s) <= 2**256 - 1)
 	symbol     = ti(None, str, lambda s: s.isascii() and s.isalnum() and len(s) <= 20)
 	symbol     = ti(None, str, lambda s: s.isascii() and s.isalnum() and len(s) <= 20)
 	owner_addr = ti(None, str, lambda s: s.isascii() and s.isalnum() and len(s) == 40) # checked separately
 	owner_addr = ti(None, str, lambda s: s.isascii() and s.isalnum() and len(s) == 40) # checked separately
 
 
@@ -180,20 +180,19 @@ def create_src(proto,template,token_data,owner_addr):
 	def gen():
 	def gen():
 		for k in token_data.fields:
 		for k in token_data.fields:
 			field = getattr(token_data,k)
 			field = getattr(token_data,k)
-			val = (
-				owner_addr     if k == 'owner_addr' else
-				getattr(opt,k) if getattr(opt,k,None) else
-				field.default  if field.default is not None else
-				die(1,f'The --{k} option must be specified')
-			)
-
 			if k == 'owner_addr':
 			if k == 'owner_addr':
 				from mmgen.obj import is_coin_addr
 				from mmgen.obj import is_coin_addr
 				if not is_coin_addr( proto, owner_addr.lower() ):
 				if not is_coin_addr( proto, owner_addr.lower() ):
 					die(1,f'{owner_addr}: not a valid {proto.coin} coin address')
 					die(1,f'{owner_addr}: not a valid {proto.coin} coin address')
-				val = '0x' + val
+				val = '0x' + owner_addr
-			elif not field.test(val):
+			else:
-				die(1,f'{val!r}: invalid parameter for option --{k}')
+				val = (
+					getattr(opt,k) if getattr(opt,k,None) else
+					field.default  if field.default is not None else
+					die(1,f'The --{k} option must be specified')
+				)
+				if not field.test(val):
+					die(1,f'{val!r}: invalid parameter for option --{k}')
 
 
 			yield(k,field.conversion(val))
 			yield(k,field.conversion(val))
 
 

+ 5 - 3
test/test_py_d/ts_misc.py

@@ -123,8 +123,8 @@ class TestSuiteOutput(TestSuiteBase):
 
 
 	def oneshot_warning(self):
 	def oneshot_warning(self):
 		t = self.spawn('test/misc/oneshot_warning.py',cmd_dir='.')
 		t = self.spawn('test/misc/oneshot_warning.py',cmd_dir='.')
-		t.expect('pw\nwg1')
 		for s in (
 		for s in (
+			'pw\nwg1',
 			'foo is experimental',
 			'foo is experimental',
 			'wg2', 'The bar command is dangerous',
 			'wg2', 'The bar command is dangerous',
 			'wg3', 'baz variant alpha',
 			'wg3', 'baz variant alpha',
@@ -132,12 +132,14 @@ class TestSuiteOutput(TestSuiteBase):
 			'w1', 'foo variant alpha',
 			'w1', 'foo variant alpha',
 			'w2', 'foo variant beta',
 			'w2', 'foo variant beta',
 			'w3', 'bar is experimental',
 			'w3', 'bar is experimental',
-			'bottom',
+			'pw',
 			"passphrase from file 'A'",
 			"passphrase from file 'A'",
 			"passphrase from file 'B'",
 			"passphrase from file 'B'",
-			'bottom',
+			'wg1\nwg2\nwg3\nwg4\nw1\nw2\nw3',
+			'pw',
 			"passphrase from file 'A'",
 			"passphrase from file 'A'",
 			"passphrase from file 'B'",
 			"passphrase from file 'B'",
+			'wg1\nwg2\nwg3\nwg4\nw1\nw2\nw3',
 			'bottom',
 			'bottom',
 		):
 		):
 			t.expect(s)
 			t.expect(s)