addrfile: use match statement where practicable
This commit is contained in:
parent
d634c7dca1
commit
a67bf727d8
1 changed files with 45 additions and 43 deletions
|
|
@ -27,7 +27,7 @@ from .obj import MMGenObject, TwComment, WalletPassword, MMGenPWIDString
|
|||
from .seed import SeedID, is_seed_id
|
||||
from .key import PrivKey
|
||||
from .addr import ViewKey, AddrListID, MMGenAddrType, MMGenPasswordType, is_addr_idx
|
||||
from .addrlist import KeyList, AddrListData
|
||||
from .addrlist import AddrListData
|
||||
|
||||
class AddrFile(MMGenObject):
|
||||
desc = 'addresses'
|
||||
|
|
@ -120,21 +120,22 @@ class AddrFile(MMGenObject):
|
|||
fs = ' {:<%s} {:<34}{}' % len(str(p.data[-1].idx))
|
||||
for e in p.data:
|
||||
c = ' ' + e.comment if add_comments and e.comment else ''
|
||||
if type(p) is KeyList:
|
||||
out.append(fs.format(e.idx, f'{p.al_id.mmtype.wif_label}: {e.sec.wif}', c))
|
||||
elif type(p).__name__ == 'PasswordList':
|
||||
out.append(fs.format(e.idx, e.passwd, c))
|
||||
else: # First line with idx
|
||||
out.append(fs.format(e.idx, e.addr.views[e.addr.view_pref], c))
|
||||
if p.has_keys:
|
||||
if self.cfg.b16:
|
||||
out.append(fs.format('', f'orig_hex: {e.sec.orig_bytes.hex()}', c))
|
||||
if type(self) is not ViewKeyAddrFile:
|
||||
out.append(fs.format('', f'{p.al_id.mmtype.wif_label}: {e.sec.wif}', c))
|
||||
for k in ('viewkey', 'wallet_passwd'):
|
||||
v = getattr(e, k)
|
||||
if v:
|
||||
out.append(fs.format('', f'{k}: {v}', c))
|
||||
match type(p).__name__:
|
||||
case 'KeyList':
|
||||
out.append(fs.format(e.idx, f'{p.al_id.mmtype.wif_label}: {e.sec.wif}', c))
|
||||
case 'PasswordList':
|
||||
out.append(fs.format(e.idx, e.passwd, c))
|
||||
case _: # First line with idx
|
||||
out.append(fs.format(e.idx, e.addr.views[e.addr.view_pref], c))
|
||||
if p.has_keys:
|
||||
if self.cfg.b16:
|
||||
out.append(fs.format('', f'orig_hex: {e.sec.orig_bytes.hex()}', c))
|
||||
if type(self) is not ViewKeyAddrFile:
|
||||
out.append(fs.format('', f'{p.al_id.mmtype.wif_label}: {e.sec.wif}', c))
|
||||
for k in ('viewkey', 'wallet_passwd'):
|
||||
v = getattr(e, k)
|
||||
if v:
|
||||
out.append(fs.format('', f'{k}: {v}', c))
|
||||
|
||||
out.append('}')
|
||||
self.fmt_data = '\n'.join([l.rstrip() for l in out]) + '\n'
|
||||
|
|
@ -262,24 +263,25 @@ class AddrFile(MMGenObject):
|
|||
sid = ls.pop(0)
|
||||
assert is_seed_id(sid), f'{sid!r}: invalid Seed ID'
|
||||
|
||||
if type(p).__name__ == 'PasswordList' and len(ls) == 2:
|
||||
ss = ls.pop().split(':')
|
||||
assert len(ss) == 2, f'{ss!r}: invalid password length specifier (must contain colon)'
|
||||
p.set_pw_fmt(ss[0])
|
||||
p.set_pw_len(ss[1])
|
||||
p.pw_id_str = MMGenPWIDString(ls.pop())
|
||||
modname, funcname = p.pw_info[p.pw_fmt].chk_func.split('.')
|
||||
import importlib
|
||||
p.chk_func = getattr(importlib.import_module('mmgen.'+modname), funcname)
|
||||
proto = init_proto(p.cfg, 'btc') # FIXME: dummy protocol
|
||||
mmtype = MMGenPasswordType(proto, 'P')
|
||||
elif len(ls) == 1:
|
||||
proto, mmtype = parse_addrfile_label(ls[0])
|
||||
elif len(ls) == 0:
|
||||
proto = init_proto(p.cfg, 'btc')
|
||||
mmtype = proto.addr_type('L')
|
||||
else:
|
||||
raise ValueError(f'{lines[0]}: Invalid first line for {p.gen_desc} file {fn!r}')
|
||||
match len(ls):
|
||||
case 2 if type(p).__name__ == 'PasswordList':
|
||||
ss = ls.pop().split(':')
|
||||
assert len(ss) == 2, f'{ss!r}: invalid password length specifier (must contain colon)'
|
||||
p.set_pw_fmt(ss[0])
|
||||
p.set_pw_len(ss[1])
|
||||
p.pw_id_str = MMGenPWIDString(ls.pop())
|
||||
modname, funcname = p.pw_info[p.pw_fmt].chk_func.split('.')
|
||||
import importlib
|
||||
p.chk_func = getattr(importlib.import_module('mmgen.'+modname), funcname)
|
||||
proto = init_proto(p.cfg, 'btc') # FIXME: dummy protocol
|
||||
mmtype = MMGenPasswordType(proto, 'P')
|
||||
case 1:
|
||||
proto, mmtype = parse_addrfile_label(ls[0])
|
||||
case 0:
|
||||
proto = init_proto(p.cfg, 'btc')
|
||||
mmtype = proto.addr_type('L')
|
||||
case _:
|
||||
raise ValueError(f'{lines[0]}: Invalid first line for {p.gen_desc} file {fn!r}')
|
||||
|
||||
if type(p).__name__ != 'PasswordList':
|
||||
if proto.base_coin != p.proto.base_coin or proto.network != p.proto.network:
|
||||
|
|
@ -344,15 +346,15 @@ class PasswordFile(AddrFile):
|
|||
|
||||
if p.pw_fmt in ('bip39', 'xmrseed'):
|
||||
ret = lines.pop(0).split(None, p.pw_len + 1)
|
||||
if len(ret) > p.pw_len+1:
|
||||
m1 = f'extraneous text {ret[p.pw_len+1]!r} found after password'
|
||||
m2 = '[bare comments not allowed in BIP39 password files]'
|
||||
m = m1+' '+m2
|
||||
elif len(ret) < p.pw_len+1:
|
||||
m = f'invalid password length {len(ret)-1}'
|
||||
else:
|
||||
return (ret[0], ' '.join(ret[1:p.pw_len+1]), '')
|
||||
raise ValueError(m)
|
||||
match len(ret) - 1:
|
||||
case p.pw_len:
|
||||
return (ret[0], ' '.join(ret[1:p.pw_len + 1]), '')
|
||||
case x if x > p.pw_len:
|
||||
raise ValueError(
|
||||
f'extraneous text {ret[p.pw_len + 1]!r} found after password '
|
||||
'[bare comments not allowed in mnemonic password files]')
|
||||
case x if x < p.pw_len:
|
||||
raise ValueError(f'invalid password length {x}')
|
||||
else:
|
||||
ret = lines.pop(0).split(None, 2)
|
||||
return ret if len(ret) == 3 else ret + ['']
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue