Browse Source

util: use match statement where practicable

The MMGen Project 2 months ago
parent
commit
1009a1c0a7
1 changed files with 27 additions and 24 deletions
  1. 27 24
      mmgen/util.py

+ 27 - 24
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:]