From 1009a1c0a7af984292946713f631bc05da931ea9 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Tue, 23 Sep 2025 09:20:54 +0000 Subject: [PATCH] util: use match statement where practicable --- mmgen/util.py | 51 +++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/mmgen/util.py b/mmgen/util.py index 74431729..8109d8b2 100755 --- a/mmgen/util.py +++ b/mmgen/util.py @@ -158,17 +158,18 @@ def mdie(*args): sys.exit(0) def die(ev, s='', *, stdout=False): - if isinstance(ev, int): - from .exception import MMGenSystemExit, MMGenError - if ev <= 2: - raise MMGenSystemExit(ev, s, stdout) - else: - raise MMGenError(ev, s, stdout) - elif isinstance(ev, str): - from . import exception - raise getattr(exception, ev)(s) - else: - raise ValueError(f'{ev}: exit value must be string or int instance') + match ev: + case int(): + from .exception import MMGenSystemExit, MMGenError + if ev <= 2: + raise MMGenSystemExit(ev, s, stdout) + else: + raise MMGenError(ev, s, stdout) + case str(): + from . import exception + raise getattr(exception, ev)(s) + case _: + raise ValueError(f'{ev}: exit value must be string or integer') def Die(ev=0, s=''): die(ev=ev, s=s, stdout=True) @@ -235,12 +236,14 @@ def list_gen(*data): assert type(data) in (list, tuple), f'{type(data).__name__} not in (list, tuple)' def gen(): for d in data: - assert isinstance(d, list), f'{type(d).__name__} != list' - if len(d) == 1: - yield d[0] - elif d[-1]: - for idx in range(len(d)-1): - yield d[idx] + match d: + case [a]: + yield a + case [*a, b]: + if b: + yield from a + case _: + die(2, f'list_gen(): {d} (type {type(d).__name__}) is not an iterable') return list(gen()) def remove_dups(iterable, *, edesc='element', desc='list', quiet=False, hide=False): @@ -278,13 +281,13 @@ def suf(arg, suf_type='s', *, verb='none'): 'ies': ('ies have', 'y has'), }, } - if isinstance(arg, int): - n = arg - elif isinstance(arg, list | tuple | set | dict): - n = len(arg) - else: - die(2, f'{arg}: invalid parameter for suf()') - return suf_types[verb][suf_type][n == 1] + match arg: + case int(): + return suf_types[verb][suf_type][arg == 1] + case list() | tuple() | set() | dict(): + return suf_types[verb][suf_type][len(arg) == 1] + case _: + die(2, f'{arg}: invalid parameter for suf()') def get_extension(fn): return os.path.splitext(fn)[1][1:]