From 3b4e9ebc1ea5591feeee8afc674fe520c2c960c3 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Fri, 20 Sep 2024 09:36:06 +0000 Subject: [PATCH] pylint: test suite, examples --- examples/bip_hd.py | 4 ++-- test/cmdtest.py | 11 ++++------- test/cmdtest_py_d/ct_automount.py | 4 ++-- test/cmdtest_py_d/ct_autosign.py | 6 +++--- test/cmdtest_py_d/ct_chainsplit.py | 4 ++-- test/cmdtest_py_d/ct_ref_3seed.py | 1 - test/cmdtest_py_d/ct_regtest.py | 4 ++-- test/cmdtest_py_d/ct_wallet.py | 2 +- test/cmdtest_py_d/ct_xmr_autosign.py | 11 +++++------ test/cmdtest_py_d/ct_xmrwallet.py | 6 ++---- test/gentest.py | 3 +-- test/include/common.py | 7 ++----- test/objtest.py | 4 ++-- test/tooltest2.py | 3 +-- test/unit_tests.py | 16 ++++++++-------- test/unit_tests_d/ut_bip39.py | 5 ++--- test/unit_tests_d/ut_bip_hd.py | 3 +-- test/unit_tests_d/ut_dep.py | 1 - test/unit_tests_d/ut_devtools.py | 3 ++- test/unit_tests_d/ut_ecc.py | 5 ++--- test/unit_tests_d/ut_indexed_dict.py | 6 +++--- test/unit_tests_d/ut_lockable.py | 4 ++-- test/unit_tests_d/ut_misc.py | 2 +- test/unit_tests_d/ut_rpc.py | 5 +++-- test/unit_tests_d/ut_util.py | 14 +++++++------- 25 files changed, 60 insertions(+), 74 deletions(-) diff --git a/examples/bip_hd.py b/examples/bip_hd.py index 53f2b480..616cf3f4 100755 --- a/examples/bip_hd.py +++ b/examples/bip_hd.py @@ -31,7 +31,7 @@ m = MasterNode(cfg, seed) dfl_pub_chain = m.to_chain(idx=0, coin='ltc', addr_type='bech32') dfl_chg_chain = m.to_chain(idx=1, coin='ltc', addr_type='bech32') -print(f'Default path (LTC, bech32):\n') +print('Default path (LTC, bech32):\n') print(f' public chain xpub:\n {dfl_pub_chain.xpub}\n') print(f' internal chain xpub:\n {dfl_chg_chain.xpub}\n') print(f' public chain addr 0:\n {dfl_pub_chain.derive_public(0).address}\n') @@ -77,7 +77,7 @@ nonstd_path = BipHDNode.from_path( addr_type = 'E', no_path_checks = True) -print(f'Non-standard path (ETH):\n') +print('Non-standard path (ETH):\n') print(f' xpub:\n {nonstd_path.xpub}\n') print(f' WIF key:\n {nonstd_path.privkey.wif}\n') print(f' address:\n {nonstd_path.address}\n') diff --git a/test/cmdtest.py b/test/cmdtest.py index 9cf80ffd..4a06ac71 100755 --- a/test/cmdtest.py +++ b/test/cmdtest.py @@ -338,14 +338,12 @@ class CmdGroupMgr: if add_deps: for dep in cmd_group_in['subgroup.'+key]: - for e in add_entries(dep): - yield e + yield from add_entries(dep) assert isinstance(cls.cmd_subgroups[key][0],str), f'header for subgroup {key!r} missing!' if not key in added_subgroups: - for e in cls.cmd_subgroups[key][1:]: - yield e + yield from cls.cmd_subgroups[key][1:] added_subgroups.append(key) def gen(): @@ -353,11 +351,10 @@ class CmdGroupMgr: if name.startswith('subgroup.'): sg_key = name.removeprefix('subgroup.') if sg_name in (None,sg_key): - for e in add_entries( + yield from add_entries( sg_key, add_deps = sg_name and not cfg.skipping_deps, - added_subgroups = [sg_name] if cfg.deps_only else [] ): - yield e + added_subgroups = [sg_name] if cfg.deps_only else []) if cfg.deps_only and sg_key == sg_name: return elif not cfg.skipping_deps: diff --git a/test/cmdtest_py_d/ct_automount.py b/test/cmdtest_py_d/ct_automount.py index 079f2f3e..e21c8e18 100755 --- a/test/cmdtest_py_d/ct_automount.py +++ b/test/cmdtest_py_d/ct_automount.py @@ -11,7 +11,7 @@ """ test.cmdtest_py_d.ct_automount: autosigning with automount tests for the cmdtest.py test suite """ -import os, time +import time from pathlib import Path from .ct_autosign import CmdTestAutosignThreaded @@ -78,7 +78,7 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet) CmdTestAutosignThreaded.__init__(self, trunner, cfgs, spawn) CmdTestRegtestBDBWallet.__init__(self, trunner, cfgs, spawn) - if trunner == None: + if trunner is None: return self.opts.append('--alice') diff --git a/test/cmdtest_py_d/ct_autosign.py b/test/cmdtest_py_d/ct_autosign.py index e2f40934..74c46cbe 100755 --- a/test/cmdtest_py_d/ct_autosign.py +++ b/test/cmdtest_py_d/ct_autosign.py @@ -25,8 +25,8 @@ from subprocess import run,DEVNULL from pathlib import Path from mmgen.cfg import Config -from mmgen.color import red,green,blue,yellow,cyan,orange,purple,gray -from mmgen.util import msg,suf,die,indent,fmt +from mmgen.color import red, blue, yellow, cyan, orange, purple, gray +from mmgen.util import msg, suf, die, indent, fmt from mmgen.led import LEDControl from mmgen.autosign import Autosign, Signable @@ -924,7 +924,7 @@ class CmdTestAutosignLive(CmdTestAutosignBTC): return try: - cf = LEDControl(enabled=True,simulate=self.simulate_led) + LEDControl(enabled=True,simulate=self.simulate_led) except Exception as e: msg(str(e)) die(2,'LEDControl initialization failed') diff --git a/test/cmdtest_py_d/ct_chainsplit.py b/test/cmdtest_py_d/ct_chainsplit.py index b9c1148d..ebd57bdf 100755 --- a/test/cmdtest_py_d/ct_chainsplit.py +++ b/test/cmdtest_py_d/ct_chainsplit.py @@ -98,8 +98,8 @@ class CmdTestChainsplit(CmdTestRegtest): t.expect(r'\[q\]uit menu, .*?:.','q', regex=True) t.expect('outputs to spend: ','1\n') - for tx in ('timelocked','split'): - for q in ('fee','change'): + for _ in ('timelocked', 'split'): + for _ in ('fee', 'change'): t.expect('OK? (Y/n): ','y') t.do_comment(False) t.view_tx('t') diff --git a/test/cmdtest_py_d/ct_ref_3seed.py b/test/cmdtest_py_d/ct_ref_3seed.py index 07ad89ee..1c1e45dc 100755 --- a/test/cmdtest_py_d/ct_ref_3seed.py +++ b/test/cmdtest_py_d/ct_ref_3seed.py @@ -394,7 +394,6 @@ class CmdTestRef3Addr(CmdTestRef3Seed): def pwgen(self,ftype,id_str,pwfmt=None,pwlen=None,extra_args=[],stdout=False): wf = self.get_file_with_ext('mmdat') - pf = joinpath(self.tmpdir,pwfile) pwfmt = (['--passwd-fmt='+pwfmt] if pwfmt else []) pwlen = (['--passwd-len='+str(pwlen)] if pwlen else []) return self.addrgen( diff --git a/test/cmdtest_py_d/ct_regtest.py b/test/cmdtest_py_d/ct_regtest.py index be3e60ce..e93fa570 100755 --- a/test/cmdtest_py_d/ct_regtest.py +++ b/test/cmdtest_py_d/ct_regtest.py @@ -20,7 +20,7 @@ test.cmdtest_py_d.ct_regtest: Regtest tests for the cmdtest.py test suite """ -import sys,os,json,time,re +import os, json, time, re from decimal import Decimal from mmgen.proto.btc.regtest import MMGenRegtest @@ -465,7 +465,7 @@ class CmdTestRegtest(CmdTestBase,CmdTestShared): CmdTestBase.__init__(self,trunner,cfgs,spawn) - if trunner == None: + if trunner is None: return if self.proto.testnet: diff --git a/test/cmdtest_py_d/ct_wallet.py b/test/cmdtest_py_d/ct_wallet.py index d638b462..6ea923ac 100755 --- a/test/cmdtest_py_d/ct_wallet.py +++ b/test/cmdtest_py_d/ct_wallet.py @@ -25,7 +25,7 @@ import sys, os from mmgen.util import msg,capfirst,get_extension from mmgen.wallet import get_wallet_cls -from ..include.common import cfg, joinpath, imsg, VirtBlockDevice +from ..include.common import cfg, joinpath, VirtBlockDevice from .common import ref_dir,ref_wallet_brainpass,ref_wallet_incog_offset,hincog_fn,hincog_bytes from .ct_base import CmdTestBase from .ct_shared import CmdTestShared diff --git a/test/cmdtest_py_d/ct_xmr_autosign.py b/test/cmdtest_py_d/ct_xmr_autosign.py index 42f4f5cd..4e0dabef 100755 --- a/test/cmdtest_py_d/ct_xmr_autosign.py +++ b/test/cmdtest_py_d/ct_xmr_autosign.py @@ -13,13 +13,12 @@ test.cmdtest_py_d.ct_xmr_autosign: xmr autosigning tests for the cmdtest.py test suite """ -import os,time,re,shutil -from pathlib import Path +import re -from mmgen.color import purple,gray,blue,cyan,brown -from mmgen.util import fmt,async_run +from mmgen.color import blue, cyan, brown +from mmgen.util import async_run -from ..include.common import cfg,imsg,silence,end_silence +from ..include.common import cfg, imsg, silence, end_silence from .common import get_file_with_ext from .ct_xmrwallet import CmdTestXMRWallet @@ -435,7 +434,7 @@ class CmdTestXMRAutosign(CmdTestXMRWallet,CmdTestAutosignThreaded): return t def txview_all(self): - t = self.spawn('', msg_only=True) + self.spawn('', msg_only=True) self.insert_device() self.do_mount() imsg(blue('Opening transaction directory: ') + cyan(f'{self.asi.xmr_tx_dir}')) diff --git a/test/cmdtest_py_d/ct_xmrwallet.py b/test/cmdtest_py_d/ct_xmrwallet.py index 26aa744e..b0d84f22 100755 --- a/test/cmdtest_py_d/ct_xmrwallet.py +++ b/test/cmdtest_py_d/ct_xmrwallet.py @@ -725,8 +725,7 @@ class CmdTestXMRWallet(CmdTestBase): await self.start_mining() else: raise - else: - die(2,'Restart attempt limit exceeded') + die(2,'Restart attempt limit exceeded') async def mine10(self): return await self.mine(10) @@ -771,8 +770,7 @@ class CmdTestXMRWallet(CmdTestBase): omsg('Daemon busy. Attempting to start mining...') else: die(2,f'Monerod returned status {status}') - else: - die(2,'Max retries exceeded') + die(2,'Max retries exceeded') async def stop_mining(self): ret = self.users['miner'].md_rpc.call_raw('stop_mining') diff --git a/test/gentest.py b/test/gentest.py index 20ad2f1d..36f98897 100755 --- a/test/gentest.py +++ b/test/gentest.py @@ -319,8 +319,7 @@ def do_ab_test(proto,scfg,addr_type,gen1,kg2,ag,tool,cache_data): def get_randbytes(): if tool and len(tool.data) > len(edgecase_sks): - for privbytes in tuple(tool.data)[len(edgecase_sks):]: - yield privbytes + yield from tuple(tool.data)[len(edgecase_sks):] else: for _ in range(scfg.rounds): yield getrand(32) diff --git a/test/include/common.py b/test/include/common.py index fa53a2c4..118bc8ff 100755 --- a/test/include/common.py +++ b/test/include/common.py @@ -21,7 +21,7 @@ test.include.common: Shared routines and data for the MMGen test suites """ import sys, os, re, atexit -from subprocess import run,PIPE +from subprocess import run, PIPE, DEVNULL from pathlib import Path from mmgen.cfg import gv @@ -57,7 +57,6 @@ def set_globals(cfg): this.dmsg = msg if cfg.debug else noop def strip_ansi_escapes(s): - import re return re.sub('\x1b' + r'\[[;0-9]+?m','',s) cmdtest_py_log_fn = 'cmdtest.py.log' @@ -330,11 +329,9 @@ def get_ethkey(): pass else: return cmdname - else: - die(1,f'ethkey executable not found (tried {cmdnames})') + die(1,f'ethkey executable not found (tried {cmdnames})') def do_run(cmd, check=True): - from subprocess import run,PIPE,DEVNULL return run(cmd, stdout=PIPE, stderr=DEVNULL, check=check) def VirtBlockDevice(img_path, size): diff --git a/test/objtest.py b/test/objtest.py index 80065f7b..bf4d0224 100755 --- a/test/objtest.py +++ b/test/objtest.py @@ -197,8 +197,8 @@ def do_loop(): if cfg.getobj and arg1 is None: msg(gray(f'{nl}Skipping {test}')) continue - else: - msg(clr(f'{nl}Testing {test}')) + + msg(clr(f'{nl}Testing {test}')) for k in ('bad','good'): if not cfg.super_silent: diff --git a/test/tooltest2.py b/test/tooltest2.py index 302b1f30..843b0f3f 100755 --- a/test/tooltest2.py +++ b/test/tooltest2.py @@ -214,8 +214,7 @@ def run_test(cls, gid, cmd_name): qmsg(('' if n else '\n') + gray(skip_msg if len(skip_msg) <= 100 else skip_msg[:97] + '...')) skipping = True continue - else: - skipping = False + skipping = False stdin_input = None if args and isinstance(args[0],bytes): stdin_input = args[0] diff --git a/test/unit_tests.py b/test/unit_tests.py index 46b1747c..fe60ee15 100755 --- a/test/unit_tests.py +++ b/test/unit_tests.py @@ -34,7 +34,7 @@ if not os.getenv('MMGEN_DEVTOOLS'): init_dev() from mmgen.cfg import Config,gc -from mmgen.color import green, gray, brown, orange, yellow, red +from mmgen.color import gray, brown, orange, yellow, red from mmgen.util import msg,gmsg,ymsg,Msg from test.include.common import set_globals,end_msg @@ -195,21 +195,21 @@ def run_test(test,subtest=None): ) if hasattr(t,'_pre'): t._pre() - for subtest in subtests: - subtest_disp = subtest.replace('_','-') - if cfg.no_altcoin_deps and subtest in altcoin_deps: + for _subtest in subtests: + subtest_disp = _subtest.replace('_','-') + if cfg.no_altcoin_deps and _subtest in altcoin_deps: cfg._util.qmsg(gray(f'Skipping unit subtest {subtest_disp!r} [--no-altcoin-deps]')) continue - if sys.platform == 'win32' and subtest in win_skip: + if sys.platform == 'win32' and _subtest in win_skip: cfg._util.qmsg(gray(f'Skipping unit subtest {subtest_disp!r} for Windows platform')) continue - elif sys.platform == 'darwin' and subtest in mac_skip: + if sys.platform == 'darwin' and _subtest in mac_skip: cfg._util.qmsg(gray(f'Skipping unit subtest {subtest_disp!r} for macOS platform')) continue - elif platform.machine() == 'aarch64' and subtest in arm_skip: + if platform.machine() == 'aarch64' and _subtest in arm_skip: cfg._util.qmsg(gray(f'Skipping unit subtest {subtest_disp!r} for ARM platform')) continue - run_subtest(t,subtest) + run_subtest(t, _subtest) if hasattr(t,'_post'): t._post() else: diff --git a/test/unit_tests_d/ut_bip39.py b/test/unit_tests_d/ut_bip39.py index d4d4a125..34a1792d 100755 --- a/test/unit_tests_d/ut_bip39.py +++ b/test/unit_tests_d/ut_bip39.py @@ -4,11 +4,10 @@ test/unit_tests_d/ut_bip39: BIP39 unit test for the MMGen suite """ -from mmgen.util import msg,msg_r -from mmgen.color import blue,orange,purple +from mmgen.color import blue, orange, purple from mmgen.bip39 import bip39 -from ..include.common import cfg,qmsg,vmsg,vmsg_r +from ..include.common import cfg, qmsg, vmsg class unit_tests: diff --git a/test/unit_tests_d/ut_bip_hd.py b/test/unit_tests_d/ut_bip_hd.py index de7ddac5..ed53535c 100755 --- a/test/unit_tests_d/ut_bip_hd.py +++ b/test/unit_tests_d/ut_bip_hd.py @@ -287,10 +287,9 @@ class unit_tests: vmsg('Parsing and validating extended keys:\n') for vec in vectors_bip32: - seed = bytes.fromhex(vec['seed']) vmsg(f' Seed: {vec["seed"]}') - for n,path_str in enumerate(vec): + for path_str in vec: if path_str in ('seed','comment'): continue diff --git a/test/unit_tests_d/ut_dep.py b/test/unit_tests_d/ut_dep.py index c8b3ec6b..1eb035fa 100755 --- a/test/unit_tests_d/ut_dep.py +++ b/test/unit_tests_d/ut_dep.py @@ -7,7 +7,6 @@ test.unit_tests_d.ut_dep: dependency unit tests for the MMGen suite No data verification is performed. """ -import sys from subprocess import run,PIPE from mmgen.util import msg,rmsg,ymsg,gmsg diff --git a/test/unit_tests_d/ut_devtools.py b/test/unit_tests_d/ut_devtools.py index b05ad1ea..35aa2037 100755 --- a/test/unit_tests_d/ut_devtools.py +++ b/test/unit_tests_d/ut_devtools.py @@ -23,7 +23,8 @@ def main(): c = 3 """.lstrip() -jsonA = open('test/ref/ethereum/tracking-wallet-v1.json').read() +with open('test/ref/ethereum/tracking-wallet-v1.json') as fh: + jsonA = fh.read() dataB = json.loads(jsonA) dataB['coin'] = 'ETC' jsonB = json.dumps(dataB) diff --git a/test/unit_tests_d/ut_ecc.py b/test/unit_tests_d/ut_ecc.py index ca3b07dd..796fae10 100755 --- a/test/unit_tests_d/ut_ecc.py +++ b/test/unit_tests_d/ut_ecc.py @@ -4,10 +4,9 @@ test.unit_tests_d.ut_ecc: elliptic curve unit test for the MMGen suite """ -from mmgen.color import gray,pink,blue from mmgen.proto.secp256k1.secp256k1 import pubkey_gen,pubkey_tweak_add,pubkey_check -from ..include.common import cfg,qmsg,vmsg +from ..include.common import vmsg from ..include.ecc import pubkey_tweak_add_pyecdsa from mmgen.protocol import CoinProtocol @@ -16,7 +15,7 @@ secp256k1_group_order = CoinProtocol.Secp256k1.secp256k1_group_order class unit_tests: def pubkey_ops(self,name,ut): - vmsg(f' Generating pubkey, adding scalar 123456789 to pubkey:') + vmsg(' Generating pubkey, adding scalar 123456789 to pubkey:') pk_addend_bytes = int.to_bytes(123456789,length=32,byteorder='big') for privkey in ( diff --git a/test/unit_tests_d/ut_indexed_dict.py b/test/unit_tests_d/ut_indexed_dict.py index 6bdea25a..a04966e1 100755 --- a/test/unit_tests_d/ut_indexed_dict.py +++ b/test/unit_tests_d/ut_indexed_dict.py @@ -41,13 +41,13 @@ class unit_test: arg = [('a',1),('b',2)] dict(arg) - for i in range(6): + for n, func in enumerate([bad0, bad1, bad2, bad3, bad4, bad5]): try: - locals()['bad'+str(i)]() + func() except NotImplementedError as e: omsg(e) else: - odie(i) + odie(n) try: d.key(2) diff --git a/test/unit_tests_d/ut_lockable.py b/test/unit_tests_d/ut_lockable.py index a403f2be..859dbe2a 100755 --- a/test/unit_tests_d/ut_lockable.py +++ b/test/unit_tests_d/ut_lockable.py @@ -120,7 +120,7 @@ class unit_test: lcdn = MyLockableAutolockDflNone() assert lcdn.foo == 0 - assert lcdn.bar == None + assert lcdn.bar is None class MyLockableBad(Lockable): _set_ok = ('foo','bar') @@ -148,7 +148,7 @@ class unit_test: def bad15(): lc.epsilon = [0] def bad16(): lca.foo = None - def bad17(): lb = MyLockableBad() + def bad17(): MyLockableBad() def bad18(): aca._lock() def bad19(): acdn.baz = None diff --git a/test/unit_tests_d/ut_misc.py b/test/unit_tests_d/ut_misc.py index e8ff30bc..3ab31119 100755 --- a/test/unit_tests_d/ut_misc.py +++ b/test/unit_tests_d/ut_misc.py @@ -85,7 +85,7 @@ class unit_tests: vmsg(f' {k}') if k in vectors: vmsg(f' pat: {v.pat}') - vmsg(f' vectors:') + vmsg( ' vectors:') for vec in vectors[k]: m = re.match(v.pat, vec.text) vmsg(f' {vec.text:10} ==> {m.groups()}') diff --git a/test/unit_tests_d/ut_rpc.py b/test/unit_tests_d/ut_rpc.py index df97b31e..8f36fa4a 100755 --- a/test/unit_tests_d/ut_rpc.py +++ b/test/unit_tests_d/ut_rpc.py @@ -4,7 +4,7 @@ test.unit_tests_d.ut_rpc: RPC unit test for the MMGen suite """ -import sys,os,time +import sys, os from mmgen.cfg import Config from mmgen.color import yellow,cyan @@ -174,7 +174,8 @@ class unit_tests: return await run_test(['bch','bch_tn'], test_cf_auth=True) async def geth(self, name, ut): - return await run_test(['eth_tn','eth_rt'], daemon_ids=['geth']) # mainnet returns EIP-155 error on empty blockchain + # mainnet returns EIP-155 error on empty blockchain: + return await run_test(['eth_tn','eth_rt'], daemon_ids=['geth']) async def erigon(self, name, ut): return await run_test(['eth','eth_tn','eth_rt'], daemon_ids=['erigon']) diff --git a/test/unit_tests_d/ut_util.py b/test/unit_tests_d/ut_util.py index 0b5e0d34..37273ed7 100755 --- a/test/unit_tests_d/ut_util.py +++ b/test/unit_tests_d/ut_util.py @@ -35,15 +35,15 @@ class unit_tests: col1_w = max(len(str(e)) for e in list(chks.values())[0]) + 1 - for name,sample in samples.items(): + for _name, sample in samples.items(): vmsg(cyan(f'Input: {sample}')) for fmt in list(chks.values())[0]: spc = '\n' if fmt in ('col','list') else ' ' indent = ' + ' if fmt == 'col' else '' res = fmt_list(sample,fmt=fmt,indent=indent) if fmt else fmt_list(sample,indent=indent) vmsg(f' {str(fmt)+":":{col1_w}}{spc}{res}') - if name in chks: - assert res == chks[name][fmt], f'{res} != {chks[name][fmt]}' + if _name in chks: + assert res == chks[_name][fmt], f'{res} != {chks[_name][fmt]}' vmsg('') return True @@ -84,13 +84,13 @@ class unit_tests: col1_w = max(len(str(e)) for e in list(chks.values())[0]) + 1 - for name,sample in samples.items(): + for _name, sample in samples.items(): vmsg(cyan(f'Input: {sample}')) for fmt in list(chks.values())[0]: res = fmt_dict(sample,fmt=fmt) if fmt else fmt_dict(sample) vmsg(f' {str(fmt)+":":{col1_w}} {res}') - if name in chks: - assert res == chks[name][fmt], f'{res} != {chks[name][fmt]}' + if _name in chks: + assert res == chks[_name][fmt], f'{res} != {chks[_name][fmt]}' vmsg('') return True @@ -98,7 +98,7 @@ class unit_tests: def list_gen(self,name,ut): res = list_gen( ['a'], - ['b', 1==2], + ['b', False], ['c', 'x'], ['d', int], ['e', None, 1, 'f', isinstance(7,int)],