whitespace: test/misc

This commit is contained in:
The MMGen Project 2024-10-18 10:32:13 +00:00
commit f9e6d994f0
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
11 changed files with 131 additions and 135 deletions

View file

@ -3,6 +3,6 @@
from mmgen.main import launch
import sys
sys.path.insert(0,'test')
sys.path.insert(0, 'test')
launch(fqmod='misc.cfg_main')

View file

@ -11,9 +11,9 @@ cmd_args = cfg._args
from mmgen.cfgfile import mmgen_cfg_file
cf_usr = mmgen_cfg_file(cfg,'usr')
cf_sys = mmgen_cfg_file(cfg,'sys')
cf_sample = mmgen_cfg_file(cfg,'sample')
cf_usr = mmgen_cfg_file(cfg, 'usr')
cf_sys = mmgen_cfg_file(cfg, 'sys')
cf_sample = mmgen_cfg_file(cfg, 'sample')
msg(f'Usr cfg file: {os.path.relpath(cf_usr.fn)}')
msg(f'Sys cfg file: {os.path.relpath(cf_sys.fn)}')
@ -24,13 +24,13 @@ if cmd_args:
ps = cf_sample.get_lines()
msg(f'parsed chunks: {len(ps)}')
pu = cf_usr.get_lines()
msg('usr cfg: {}'.format( ' '.join(f'{i.name}={i.value}' for i in pu) ))
msg('usr cfg: {}'.format(' '.join(f'{i.name}={i.value}' for i in pu)))
elif cmd_args[0] == 'coin_specific_vars':
for varname in cmd_args[1:]:
msg('{}.{}: {}'.format(
type(cfg._proto).__name__,
varname,
getattr(cfg._proto,varname)
getattr(cfg._proto, varname)
))
elif cmd_args[0] == 'autoset_opts':
assert cfg.rpc_backend == 'aiohttp', "cfg.rpc_backend != 'aiohttp'"
@ -40,5 +40,5 @@ if cmd_args:
from mmgen.mn_entry import mn_entry
msg('mnemonic_entry_modes: {}\nmmgen: {}\nbip39: {}'.format(
cfg.mnemonic_entry_modes,
mn_entry(cfg,'mmgen').usr_dfl_entry_mode,
mn_entry(cfg,'bip39').usr_dfl_entry_mode ))
mn_entry(cfg, 'mmgen').usr_dfl_entry_mode,
mn_entry(cfg, 'bip39').usr_dfl_entry_mode))

View file

@ -1,11 +1,11 @@
#!/usr/bin/env python3
import sys,os
import sys, os
pn = os.path.abspath(os.path.dirname(sys.argv[0]))
os.chdir(os.path.dirname(os.path.dirname(pn)))
sys.path[0] = os.curdir
from mmgen.cfg import Config,gc
from mmgen.cfg import Config, gc
from mmgen.util import msg
opts_data = {
@ -23,7 +23,7 @@ opts_data = {
}
}
cfg = Config( opts_data=opts_data, init_opts={'color':True} )
cfg = Config(opts_data=opts_data, init_opts={'color': True})
def crypto():
desc = 'test data'
@ -31,10 +31,10 @@ def crypto():
from mmgen.crypto import Crypto
crypto = Crypto(cfg)
pw = crypto.get_new_passphrase(data_desc=desc,hash_preset=gc.dfl_hash_preset,passwd_file=None)
pw = crypto.get_new_passphrase(data_desc=desc, hash_preset=gc.dfl_hash_preset, passwd_file=None)
msg(f'==> got new passphrase: [{pw}]\n')
pw = crypto.get_passphrase(data_desc=desc,passwd_file=None)
pw = crypto.get_passphrase(data_desc=desc, passwd_file=None)
msg(f'==> got passphrase: [{pw}]\n')
hp = crypto.get_hash_preset_from_user(data_desc=desc)
@ -47,18 +47,18 @@ def seed():
from mmgen.wallet import Wallet
for n in range(1,3):
for n in range(1, 3):
msg(f'------- NEW WALLET {n} -------\n')
w1 = Wallet(cfg)
msg(f'\n==> got pw,preset,lbl: [{w1.ssdata.passwd}][{w1.ssdata.hash_preset}][{w1.ssdata.label}]\n')
msg(f'\n==> got pw, preset, lbl: [{w1.ssdata.passwd}][{w1.ssdata.hash_preset}][{w1.ssdata.label}]\n')
for n in range(1,3):
for n in range(1, 3):
msg(f'------- PASSCHG {n} -------\n')
w2 = Wallet(cfg,ss=w1,passchg=True)
msg(f'\n==> got pw,preset,lbl: [{w2.ssdata.passwd}][{w2.ssdata.hash_preset}][{w2.ssdata.label}]\n')
w2 = Wallet(cfg, ss=w1, passchg=True)
msg(f'\n==> got pw, preset, lbl: [{w2.ssdata.passwd}][{w2.ssdata.hash_preset}][{w2.ssdata.label}]\n')
msg('------- WALLET FROM FILE -------\n')
w3 = Wallet(cfg,fn='test/ref/FE3C6545-D782B529[128,1].mmdat') # passphrase: 'reference password'
msg(f'\n==> got pw,preset,lbl: [{w3.ssdata.passwd}][{w3.ssdata.hash_preset}][{w3.ssdata.label}]\n')
w3 = Wallet(cfg, fn='test/ref/FE3C6545-D782B529[128,1].mmdat') # passphrase: 'reference password'
msg(f'\n==> got pw, preset, lbl: [{w3.ssdata.passwd}][{w3.ssdata.hash_preset}][{w3.ssdata.label}]\n')
globals()[cfg._args[0]]()

View file

@ -1,7 +1,7 @@
#!/usr/bin/env python3
# this script is used both for interactive and automated testing
import sys,os
import sys, os
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(sys.argv[0])))))
sys.path[0] = os.curdir
@ -26,9 +26,9 @@ if cmd == 'passphrase':
from mmgen.ui import get_words_from_user
pw = get_words_from_user(
cfg,
('Enter passphrase: ','Enter passphrase (echoed): ')[bool(cfg.echo_passphrase)] )
('Enter passphrase: ', 'Enter passphrase (echoed): ')[bool(cfg.echo_passphrase)] )
msg('Entered: {}'.format(' '.join(pw)))
elif cmd in ('get_char','line_input'):
elif cmd in ('get_char', 'line_input'):
from mmgen.term import get_char
from mmgen.ui import line_input
from ast import literal_eval
@ -37,9 +37,9 @@ elif cmd in ('get_char','line_input'):
msg(f' cfg.hold_protect_disable: {cfg.hold_protect_disable}')
if cmd == 'line_input':
func_args.update({'cfg':cfg})
msg(' Calling {name}( {args} )'.format(
msg(' Calling {name}({args})'.format(
name = cmd,
args = ', '.join(f'{k}={v!r}' for k,v in func_args.items())
args = ', '.join(f'{k}={v!r}' for k, v in func_args.items())
))
ret = locals()[cmd](**func_args)
msg(f' ==> {ret!r}')

View file

@ -1,7 +1,7 @@
#!/usr/bin/env python3
from mmgen.cfg import Config
from mmgen.util import msg,oneshot_warning,oneshot_warning_group
from mmgen.util import msg, oneshot_warning, oneshot_warning_group
cfg = Config()
@ -29,28 +29,28 @@ class wg(oneshot_warning_group):
color = 'orange'
message = 'baz variant {} selected'
for i in (1,2,3):
for i in (1, 2, 3):
from mmgen.crypto import Crypto
msg('\npw')
for k in ('A','B'):
for k in ('A', 'B'):
ret = Crypto.pwfile_reuse_warning(k).warning_shown
assert ret == (i != 1), 'warning_shown incorrect'
msg('wg1')
wg('foo')
msg('wg2')
wg('bar',fmt_args=['dangerous','computer'])
wg('bar', fmt_args=['dangerous', 'computer'])
msg('wg3')
wg('baz',div='alpha',fmt_args=['alpha'])
wg('baz', div='alpha', fmt_args=['alpha'])
msg('wg4')
wg('baz',div='beta',fmt_args=['beta'])
wg('baz', div='beta', fmt_args=['beta'])
msg('w1')
foo(div='alpha',fmt_args=['alpha'])
foo(div='alpha', fmt_args=['alpha'])
msg('w2')
foo(div='beta',fmt_args=['beta'])
foo(div='beta', fmt_args=['beta'])
msg('w3')
bar()

View file

@ -3,6 +3,6 @@
from mmgen.main import launch
import sys
sys.path.insert(0,'test')
sys.path.insert(0, 'test')
launch(fqmod='misc.opts_main')

View file

@ -4,7 +4,7 @@ from mmgen.cfg import Config
from mmgen.util import msg
opts_data = {
'sets': [('print_checksum',True,'quiet',True)],
'sets': [('print_checksum', True, 'quiet', True)],
'text': {
'desc': 'Opts test',
'usage':'[args] [opts]',
@ -41,7 +41,7 @@ sample note: {nn}
"""
},
'code': {
'options': lambda cfg,help_notes,s: s.format(
'options': lambda cfg, help_notes, s: s.format(
kgs=help_notes('keygen_backends'),
coin_id=help_notes('coin_id'),
),
@ -52,38 +52,34 @@ sample note: {nn}
cfg = Config(opts_data=opts_data)
for k in (
'foo', # added opt
'print_checksum', # sets 'quiet'
'quiet','verbose', # _incompatible_opts
'passwd_file', # _infile_opts - check_infile()
'outdir', # check_outdir()
'cached_balances', # opt_sets_global
'minconf', # global_sets_opt
'hidden_incog_input_params',
'keep_label',
'seed_len',
'hash_preset',
'label',
'min_temp',
'max_temp',
'coin',
'pager',
'point',
):
msg('{:30} {}'.format( f'cfg.{k}:', getattr(cfg,k) ))
'foo', # added opt
'print_checksum', # sets 'quiet'
'quiet', 'verbose', # _incompatible_opts
'passwd_file', # _infile_opts - check_infile()
'outdir', # check_outdir()
'cached_balances', # opt_sets_global
'minconf', # global_sets_opt
'hidden_incog_input_params',
'keep_label',
'seed_len',
'hash_preset',
'label',
'min_temp',
'max_temp',
'coin',
'pager',
'point'):
msg('{:30} {}'.format(f'cfg.{k}:', getattr(cfg, k)))
msg('')
for k in (
'cached_balances', # opt_sets_global
'minconf', # global_sets_opt
):
msg('{:30} {}'.format( f'cfg.{k}:', getattr(cfg,k) ))
'cached_balances', # opt_sets_global
'minconf'): # global_sets_opt
msg('{:30} {}'.format(f'cfg.{k}:', getattr(cfg, k)))
msg('')
for k in (
'fee_estimate_mode', # _autoset_opts
):
msg('{:30} {}'.format( f'cfg.{k}:', getattr(cfg,k) ))
for k in ('fee_estimate_mode',): # _autoset_opts
msg('{:30} {}'.format(f'cfg.{k}:', getattr(cfg, k)))
msg('')
for n, k in enumerate(cfg._args, 1):

View file

@ -1,14 +1,14 @@
#!/usr/bin/env python3
import sys,os
import sys, os
pn = os.path.abspath(os.path.dirname(sys.argv[0]))
parpar = os.path.dirname(os.path.dirname(pn))
os.chdir(parpar)
sys.path[0] = os.curdir
from mmgen.cfg import Config,gc
from mmgen.color import yellow,blue,cyan,set_vt100
from mmgen.util import msg,ymsg,gmsg,fmt,fmt_list,die
from mmgen.cfg import Config, gc
from mmgen.color import yellow, blue, cyan, set_vt100
from mmgen.util import msg, ymsg, gmsg, fmt, fmt_list, die
commands = [
'start',
@ -41,24 +41,24 @@ opts_data = {
""",
'notes': f"""
available commands for platform {sys.platform!r}:
{fmt_list(commands,fmt='col',indent=' ')}
{fmt_list(commands, fmt='col', indent=' ')}
"""
}
}
cfg = Config(opts_data=opts_data)
from mmgen.term import get_char,get_char_raw,get_terminal_size,get_term
from mmgen.ui import line_input,keypress_confirm,do_license_msg
from mmgen.term import get_char, get_char_raw, get_terminal_size, get_term
from mmgen.ui import line_input, keypress_confirm, do_license_msg
import mmgen.term as term_mod
def cmsg(m):
msg('\n'+cyan(m))
def confirm(m):
if not keypress_confirm( cfg, m ):
if keypress_confirm( cfg, 'Are you sure you want to exit test?' ):
die(1,'Exiting test at user request')
if not keypress_confirm(cfg, m):
if keypress_confirm(cfg, 'Are you sure you want to exit test?'):
die(1, 'Exiting test at user request')
else:
msg('Continuing...')
@ -93,12 +93,12 @@ def tt_line_input():
The held-down "y" and ENTER keys should be blocked, not affecting the output
on screen or entered text.
"""))
get_char_raw('Ready? ',num_bytes=1)
reply = line_input( cfg, '\nEnter text: ' )
get_char_raw('Ready? ', num_bytes=1)
reply = line_input(cfg, '\nEnter text: ')
confirm(f'Did you enter the text {reply!r}?')
def _tt_get_char(raw=False,one_char=False,immed_chars=''):
funcname = ('get_char','get_char_raw')[raw]
def _tt_get_char(raw=False, one_char=False, immed_chars=''):
funcname = ('get_char', 'get_char_raw')[raw]
fs = fmt("""
Press some keys in quick succession.
{}{}
@ -133,13 +133,13 @@ def _tt_get_char(raw=False,one_char=False,immed_chars=''):
cmsg('Testing {}({}):'.format(
funcname,
','.join(f'{a}={b!r}' for a,b in kwargs.items())
','.join(f'{a}={b!r}' for a, b in kwargs.items())
))
msg(fs.format( m1, yellow(m2), yellow(m3) ))
msg(fs.format(m1, yellow(m2), yellow(m3)))
try:
while True:
ret = getattr( term_mod, funcname )('Enter a letter: ',**kwargs)
ret = getattr(term_mod, funcname)('Enter a letter: ', **kwargs)
msg(f'You typed {ret!r}')
except KeyboardInterrupt:
msg('\nDone')
@ -147,44 +147,44 @@ def _tt_get_char(raw=False,one_char=False,immed_chars=''):
def tt_urand():
cmsg('Testing _get_random_data_from_user():')
from mmgen.crypto import Crypto
ret = Crypto(cfg)._get_random_data_from_user(uchars=10,desc='data').decode()
msg(f'USER ENTROPY (user input + keystroke timings):\n\n{fmt(ret," ")}')
ret = Crypto(cfg)._get_random_data_from_user(uchars=10, desc='data').decode()
msg(f'USER ENTROPY (user input + keystroke timings):\n\n{fmt(ret, " ")}')
times = ret.splitlines()[1:]
avg_prec = sum(len(t.split('.')[1]) for t in times) // len(times)
if avg_prec < gc.min_time_precision:
ymsg(f'WARNING: Avg. time precision of only {avg_prec} decimal points. User entropy quality is degraded!')
else:
msg(f'Average time precision: {avg_prec} decimal points - OK')
line_input( cfg, 'Press ENTER to continue: ' )
line_input(cfg, 'Press ENTER to continue: ')
def tt_txview():
cmsg('Testing tx.info.view_with_prompt() (try each viewing option)')
from mmgen.tx import UnsignedTX
fn = 'test/ref/0B8D5A[15.31789,14,tl=1320969600].rawtx'
tx = UnsignedTX(cfg=cfg,filename=fn,quiet_open=True)
tx = UnsignedTX(cfg=cfg, filename=fn, quiet_open=True)
while True:
tx.info.view_with_prompt('View data for transaction?',pause=False)
tx.info.view_with_prompt('View data for transaction?', pause=False)
set_vt100()
if not keypress_confirm( cfg, 'Continue testing transaction view?', default_yes=True ):
if not keypress_confirm(cfg, 'Continue testing transaction view?', default_yes=True):
break
def tt_get_char_one():
_tt_get_char(one_char=True)
def tt_get_char_one_raw():
_tt_get_char(one_char=True,raw=True)
_tt_get_char(one_char=True, raw=True)
def tt_get_char():
_tt_get_char(one_char=False)
def tt_get_char_immed_chars():
_tt_get_char(one_char=False,immed_chars='asdf')
_tt_get_char(one_char=False, immed_chars='asdf')
def tt_get_char_raw():
_tt_get_char(one_char=False,raw=True)
_tt_get_char(one_char=False, raw=True)
def tt_get_char_one_char_immed_chars():
_tt_get_char(one_char=True,immed_chars='asdf')
_tt_get_char(one_char=True, immed_chars='asdf')
get_term().register_cleanup()

View file

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import sys,os
import sys, os
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(sys.argv[0])))))
sys.path[0] = os.curdir
@ -8,7 +8,7 @@ from mmgen.cfg import Config
cfg = Config()
from mmgen.util import msg
from mmgen.term import init_term,get_term
from mmgen.term import init_term, get_term
init_term(cfg)
term = get_term()

View file

@ -16,49 +16,49 @@ keys = [
'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
]
def check_equal(a,b):
def check_equal(a, b):
assert a == b, f'{a} != {b}'
def msg(*args,**kwargs):
print(*args,**kwargs,file=sys.stdout)
def msg(*args, **kwargs):
print(*args, **kwargs, file=sys.stdout)
def init_coin(t,coinsym,network,addrtype):
t.init_coin(coinsym,network)
def init_coin(t, coinsym, network, addrtype):
t.init_coin(coinsym, network)
t.addrtype = addrtype
check_equal(type(t.addrtype).__name__,'MMGenAddrType')
check_equal(type(t.addrtype).__name__, 'MMGenAddrType')
msg(f'\n{t.coin} {t.proto.network.capitalize()} {t.addrtype.name.upper()} ({t.addrtype})')
def test_randpair(t):
wif,addr = t.randpair()
wif_chk = PrivKey(proto=t.proto,wif=wif).wif
check_equal(wif,wif_chk)
wif, addr = t.randpair()
wif_chk = PrivKey(proto=t.proto, wif=wif).wif
check_equal(wif, wif_chk)
msg('\n === randwif ===')
msg(' wif:',wif)
msg(' addr:',CoinAddr(proto=t.proto,addr=addr))
msg(' wif:', wif)
msg(' addr:', CoinAddr(proto=t.proto, addr=addr))
def test_wif2addr(t,wif_chk,addr_chk,key_idx):
def test_wif2addr(t, wif_chk, addr_chk, key_idx):
key_bytes = bytes.fromhex(keys[key_idx])
wif = PrivKey(
proto = t.proto,
s = key_bytes,
compressed = t.addrtype.compressed,
pubkey_type = t.addrtype.pubkey_type ).wif
pubkey_type = t.addrtype.pubkey_type).wif
addr = t.wif2addr(wif)
msg('\n === wif2addr ===')
msg(' wif:',PrivKey(proto=t.proto,wif=wif).wif)
msg(' addr:',CoinAddr(proto=t.proto,addr=addr))
msg(' wif:', PrivKey(proto=t.proto, wif=wif).wif)
msg(' addr:', CoinAddr(proto=t.proto, addr=addr))
addr_ph = t.privhex2addr(key_bytes.hex())
check_equal(addr,addr_ph)
check_equal(wif,wif_chk)
check_equal(addr,addr_chk)
check_equal(addr, addr_ph)
check_equal(wif, wif_chk)
check_equal(addr, addr_chk)
def test_triplet(tool,coin,network,addrtype,key_idx,wif_chk,addr_chk):
init_coin(tool,coin,network,addrtype)
def test_triplet(tool, coin, network, addrtype, key_idx, wif_chk, addr_chk):
init_coin(tool, coin, network, addrtype)
test_randpair(tool)
test_wif2addr(tool,wif_chk,addr_chk,key_idx)
test_wif2addr(tool, wif_chk, addr_chk, key_idx)
def run_test():
@ -70,44 +70,44 @@ def run_test():
tool.usr_randchars # getter
tool.usr_randchars = 0 # setter
check_equal(tool.usr_randchars,0)
check_equal(tool.usr_randchars, 0)
check_equal(f'{tool.coin} {tool.proto.cls_name} {tool.addrtype}', 'BTC mainnet L' )
check_equal(f'{tool.coin} {tool.proto.cls_name} {tool.addrtype}', 'BTC mainnet L')
# test vectors from tooltest2.py:
test_triplet(tool,'btc','mainnet','L',0,
test_triplet(tool, 'btc', 'mainnet', 'L', 0,
'5HwzecKMWD82ppJK3qMKpC7ohXXAwcyAN5VgdJ9PLFaAzpBG4sX',
'1C5VPtgq9xQ6AcTgMAR3J6GDrs72HC4pS1' )
'1C5VPtgq9xQ6AcTgMAR3J6GDrs72HC4pS1')
test_triplet(tool,'btc','mainnet','C',0,
test_triplet(tool, 'btc', 'mainnet', 'C', 0,
'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
'1Kz9fVSUMshzPejpzW9D95kScgA3rY6QxF' )
'1Kz9fVSUMshzPejpzW9D95kScgA3rY6QxF')
test_triplet(tool,'btc','mainnet','segwit',0,
test_triplet(tool, 'btc', 'mainnet', 'segwit', 0,
'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
'3AhjTiWHhVJAi1s5CfKMcLzYps12x3gZhg' )
'3AhjTiWHhVJAi1s5CfKMcLzYps12x3gZhg')
test_triplet(tool,'btc','mainnet','B',0,
test_triplet(tool, 'btc', 'mainnet', 'B', 0,
'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
'bc1q6pqnfwwakuuejpm9w52ds342f9d5u36v0qnz7c' )
'bc1q6pqnfwwakuuejpm9w52ds342f9d5u36v0qnz7c')
if not 'no_altcoin' in sys.argv:
test_triplet(tool,'ltc','regtest','bech32',1,
test_triplet(tool, 'ltc', 'regtest', 'bech32', 1,
'cV3ZRqf8PhyfiFwtJfkvGu2qmBsazE1wXoA2A16S3nixb3BTvvVx',
'rltc1qvmqas4maw7lg9clqu6kqu9zq9cluvllnz4kj9y' )
'rltc1qvmqas4maw7lg9clqu6kqu9zq9cluvllnz4kj9y')
test_triplet(tool,'xmr','mainnet','M',1,
test_triplet(tool, 'xmr', 'mainnet', 'M', 1,
'e8164dda6d42bd1e261a3406b2038dcbddadbeefdeadbeefdeadbeefdeadbe0f',
'41i7saPWA53EoHenmJVRt34dubPxsXwoWMnw8AdMyx4mTD1svf7qYzcVjxxRfteLNdYrAxWUMmiPegFW9EfoNgXx7vDMExv' )
'41i7saPWA53EoHenmJVRt34dubPxsXwoWMnw8AdMyx4mTD1svf7qYzcVjxxRfteLNdYrAxWUMmiPegFW9EfoNgXx7vDMExv')
test_triplet(tool,'etc','mainnet','E',1,
test_triplet(tool, 'etc', 'mainnet', 'E', 1,
'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
'c96aaa54e2d44c299564da76e1cd3184a2386b8d' )
'c96aaa54e2d44c299564da76e1cd3184a2386b8d')
test_triplet(tool,'zec','mainnet','Z',1,
test_triplet(tool, 'zec', 'mainnet', 'Z', 1,
'SKxuS56e99jpCeD9mMQ5o63zoGPakNdM9HCvt4Vt2cypvRjCdvGJ',
'zchFELwBxqsAubsLQ8yZgPCDDGukjXJssgCbiTPwFNmFwn9haLnDatzfhLdZzJT4PcU4o2yr92B52UFirUzEdF6ZYM2gBkM' )
'zchFELwBxqsAubsLQ8yZgPCDDGukjXJssgCbiTPwFNmFwn9haLnDatzfhLdZzJT4PcU4o2yr92B52UFirUzEdF6ZYM2gBkM')
from mmgen.cfg import Config

View file

@ -1,16 +1,16 @@
#!/usr/bin/env python3
text = {
'gr': 'Greek text: {}'.format(''.join(map(chr,list(range(913,939))))),
'ru': 'Russian text: {}'.format(''.join(map(chr,list(range(1040,1072))))),
'gr': 'Greek text: {}'.format(''.join(map(chr, list(range(913, 939))))),
'ru': 'Russian text: {}'.format(''.join(map(chr, list(range(1040, 1072))))),
'zh': 'Chinese text: {}'.format('所以,我們非常需要這樣一種電子支付系統,它基於密碼學原理而不基於信用,'),
'jp': 'Japanese text: {}'.format('必要なのは、信用ではなく暗号化された証明に基づく電子取引システムであり、')
}
import sys
from mmgen.util import msg,die
from mmgen.util import msg, die
if len(sys.argv) != 2 or not sys.argv[1] in text:
die(2,f'argument must be one of {list(text.keys())}')
die(2, f'argument must be one of {list(text.keys())}')
msg(text[sys.argv[1]])