From cf1f179fbf491165122770f5a3e652cee2030986 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sun, 5 Sep 2021 18:40:42 +0000 Subject: [PATCH] util.py: f-strings, whitespace, minor cleanups --- mmgen/util.py | 89 ++++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/mmgen/util.py b/mmgen/util.py index e8be7e59..c826e55f 100755 --- a/mmgen/util.py +++ b/mmgen/util.py @@ -465,7 +465,7 @@ def get_hash_params(hash_preset): if hash_preset in g.hash_presets: return g.hash_presets[hash_preset] # N,p,r,buflen else: # Shouldn't be here - die(3,"{}: invalid 'hash_preset' value".format(hash_preset)) + die(3,f"{hash_preset}: invalid 'hash_preset' value") def compare_chksums(chk1,desc1,chk2,desc2,hdr='',die_on_fail=False,verbose=False): @@ -478,13 +478,13 @@ def compare_chksums(chk1,desc1,chk2,desc2,hdr='',die_on_fail=False,verbose=False vmsg(m,force=verbose) return False - vmsg('{} checksum OK ({})'.format(capfirst(desc1),chk1)) + vmsg(f'{capfirst(desc1)} checksum OK ({chk1})') return True def compare_or_die(val1, desc1, val2, desc2, e='Error'): if val1 != val2: - die(3,"{}: {} ({}) doesn't match {} ({})".format(e,desc2,val2,desc1,val1)) - dmsg('{} OK ({})'.format(capfirst(desc2),val2)) + die(3,f"{e}: {desc2} ({val2}) doesn't match {desc1} ({val1})") + dmsg(f'{capfirst(desc2)} OK ({val2})') return True def check_binary(args): @@ -506,7 +506,7 @@ def open_file_or_exit(filename,mode,silent=False): return open(filename, mode) except: op = ('writing','reading')['r' in mode] - die(2,("Unable to open file '{}' for {}".format(filename,op),'')[silent]) + die(2,'' if silent else f'Unable to open file {filename!r} for {op}') def check_file_type_and_access(fname,ftype,blkdev_ok=False): @@ -520,17 +520,20 @@ def check_file_type_and_access(fname,ftype,blkdev_ok=False): if blkdev_ok: ok_types.append((stat.S_ISBLK,'block device')) if ftype == 'output directory': ok_types = [(stat.S_ISDIR, 'output directory')] - try: mode = os.stat(fname).st_mode + try: + mode = os.stat(fname).st_mode except: - raise FileNotFound("Requested {} '{}' not found".format(ftype,fname)) + raise FileNotFound(f'Requested {ftype} {fname!r} not found') for t in ok_types: - if t[0](mode): break + if t[0](mode): + break else: - die(1,"Requested {} '{}' is not a {}".format(ftype,fname,' or '.join([t[1] for t in ok_types]))) + ok_list = ' or '.join( t[1] for t in ok_types ) + die(1,f'Requested {ftype} {fname!r} is not a {ok_list}') - if not os.access(fname, access): - die(1,"Requested {} '{}' is not {}able by you".format(ftype,fname,m)) + if not os.access(fname,access): + die(1,f'Requested {ftype} {fname!r} is not {m}able by you') return True @@ -543,7 +546,7 @@ def check_outdir(f): def check_wallet_extension(fn): from .wallet import Wallet if not Wallet.ext_to_type(get_extension(fn)): - raise BadFileExtension("'{}': unrecognized seed source file extension".format(fn)) + raise BadFileExtension(f'{fn!r}: unrecognized seed source file extension') def make_full_path(outdir,outfile): return os.path.normpath(os.path.join(outdir, os.path.basename(outfile))) @@ -571,10 +574,10 @@ def get_seed_file(cmd_args,nargs,invoked_as=None): return cmd_args[0] if cmd_args else (wf,None)[wd_from_opt] def confirm_or_raise(message,q,expect='YES',exit_msg='Exiting at user request'): - m = message.strip() - if m: msg(m) - a = q+' ' if q[0].isupper() else 'Are you sure you want to {}?\n'.format(q) - b = "Type uppercase '{}' to confirm: ".format(expect) + if message.strip(): + msg(message.strip()) + a = f'{q} ' if q[0].isupper() else f'Are you sure you want to {q}?\n' + b = f'Type uppercase {expect!r} to confirm: ' if my_raw_input(a+b).strip() != expect: raise UserNonConfirmation(exit_msg) @@ -601,22 +604,22 @@ def write_data_to_file( outfile,data,desc='data', qmsg('Output to STDOUT requested') if g.stdin_tty: if no_tty: - die(2,'Printing {} to screen is not allowed'.format(desc)) + die(2,f'Printing {desc} to screen is not allowed') if (ask_tty and not opt.quiet) or binary: - confirm_or_raise('','output {} to screen'.format(desc)) + confirm_or_raise('',f'output {desc} to screen') else: - try: of = os.readlink('/proc/{}/fd/1'.format(os.getpid())) # Linux + try: of = os.readlink(f'/proc/{os.getpid()}/fd/1') # Linux except: of = None # Windows if of: if of[:5] == 'pipe:': if no_tty: - die(2,'Writing {} to pipe is not allowed'.format(desc)) + die(2,f'Writing {desc} to pipe is not allowed') if ask_tty and not opt.quiet: - confirm_or_raise('','output {} to pipe'.format(desc)) + confirm_or_raise('',f'output {desc} to pipe') msg('') of2,pd = os.path.relpath(of),os.path.pardir - msg("Redirecting output to file '{}'".format((of2,of)[of2[:len(pd)] == pd])) + msg('Redirecting output to file {!r}'.format(of if of2[:len(pd)] == pd else of2)) else: msg('Redirecting output to file') @@ -635,16 +638,16 @@ def write_data_to_file( outfile,data,desc='data', outfile = make_full_path(opt.outdir,outfile) if ask_write: - if not ask_write_prompt: ask_write_prompt = 'Save {}?'.format(desc) + if not ask_write_prompt: + ask_write_prompt = f'Save {desc}?' if not keypress_confirm(ask_write_prompt, default_yes=ask_write_default_yes): - die(1,'{} not saved'.format(capfirst(desc))) + die(1,f'{capfirst(desc)} not saved') hush = False if file_exists(outfile) and ask_overwrite: - q = "File '{}' already exists\nOverwrite?".format(outfile) - confirm_or_raise('',q) - msg("Overwriting file '{}'".format(outfile)) + confirm_or_raise('',f'File {outfile!r} already exists\nOverwrite?') + msg(f'Overwriting file {outfile!r}') hush = True # not atomic, but better than nothing @@ -658,8 +661,7 @@ def write_data_to_file( outfile,data,desc='data', if d != cmp_data: if g.test_suite: print_diff(cmp_data,d) - m = "{} in file '{}' has been altered by some other program! Aborting file write" - die(3,m.format(desc,outfile)) + die(3,f'{desc} in file {outfile!r} has been altered by some other program! Aborting file write') # To maintain portability, always open files in binary mode # If 'binary' option not set, encode/decode data before writing and after reading @@ -668,11 +670,11 @@ def write_data_to_file( outfile,data,desc='data', try: f.write(data if binary else data.encode()) except: - die(2,"Failed to write {} to file '{}'".format(desc,outfile)) + die(2,f'Failed to write {desc} to file {outfile!r}') f.close if not (hush or quiet): - msg("{} written to file '{}'".format(capfirst(desc),outfile)) + msg(f'{capfirst(desc)} written to file {outfile!r}') return True @@ -690,10 +692,10 @@ def get_words_from_user(prompt): def get_words_from_file(infile,desc,quiet=False): if not quiet: - qmsg("Getting {} from file '{}'".format(desc,infile)) + qmsg(f'Getting {desc} from file {infile!r}') f = open_file_or_exit(infile, 'rb') try: words = f.read().decode().split() - except: die(1,'{} data must be UTF-8 encoded.'.format(capfirst(desc))) + except: die(1,f'{capfirst(desc)} data must be UTF-8 encoded.') f.close() dmsg('Sanitized input: [{}]'.format(' '.join(words))) return words @@ -709,7 +711,7 @@ def mmgen_decrypt_file_maybe(fn,desc='',quiet=False,silent=False): have_enc_ext = get_extension(fn) == g.mmenc_ext if have_enc_ext or not is_utf8(d): m = ('Attempting to decrypt','Decrypting')[have_enc_ext] - qmsg("{} {} '{}'".format(m,desc,fn)) + qmsg(f'{m} {desc} {fn!r}') from .crypto import mmgen_decrypt_retry d = mmgen_decrypt_retry(d,desc) return d @@ -718,19 +720,19 @@ def get_lines_from_file(fn,desc='',trim_comments=False,quiet=False,silent=False) dec = mmgen_decrypt_file_maybe(fn,desc,quiet=quiet,silent=silent) ret = dec.decode().splitlines() if trim_comments: ret = remove_comments(ret) - dmsg("Got {} lines from file '{}'".format(len(ret),fn)) + dmsg(f'Got {len(ret)} lines from file {fn!r}') return ret def get_data_from_user(desc='data'): # user input MUST be UTF-8 - p = ('','Enter {}: '.format(desc))[g.stdin_tty] + p = f'Enter {desc}: ' if g.stdin_tty else '' data = my_raw_input(p,echo=opt.echo_passphrase) - dmsg('User input: [{}]'.format(data)) + dmsg(f'User input: [{data}]') return data def get_data_from_file(infile,desc='data',dash=False,silent=False,binary=False,quiet=False): if not opt.quiet and not silent and not quiet and desc: - qmsg("Getting {} from file '{}'".format(desc,infile)) + qmsg(f'Getting {desc} from file {infile!r}') if dash and infile == '-': data = os.fdopen(0,'rb').read(g.max_input_size+1) @@ -741,7 +743,7 @@ def get_data_from_file(infile,desc='data',dash=False,silent=False,binary=False,q data = data.decode() if len(data) == g.max_input_size + 1: - raise MaxInputSizeExceeded('Too much input data! Max input data size: {} bytes'.format(g.max_input_size)) + raise MaxInputSizeExceeded(f'Too much input data! Max input data size: {f.max_input_size} bytes') return data @@ -872,12 +874,11 @@ def do_license_msg(immed=False): if opt.quiet or g.no_license or opt.yes or not g.stdin_tty: return - p = "Press 'w' for conditions and warranty info, or 'c' to continue:" import mmgen.license as gpl msg(gpl.warning) - prompt = '{} '.format(p.strip()) from .term import get_char + prompt = "Press 'w' for conditions and warranty info, or 'c' to continue: " while True: reply = get_char(prompt, immed_chars=('','wc')[bool(immed)]) if reply == 'w': @@ -936,8 +937,10 @@ def altcoin_subclass(cls,proto,mod_dir): def write_mode(orig_func): def f(self,*args,**kwargs): if self.mode != 'w': - m = '{} opened in read-only mode: cannot execute method {}()' - die(1,m.format(type(self).__name__,locals()['orig_func'].__name__)) + die(1,'{} opened in read-only mode: cannot execute method {}()'.format( + type(self).__name__, + locals()['orig_func'].__name__ + )) return orig_func(self,*args,**kwargs) return f