Upgrade multi_key_sort

Use the Python 3.8 argument list.

Accept `key_func` to allow customization.
This commit is contained in:
tcely 2025-03-02 20:10:38 -05:00 committed by GitHub
parent b535f1324e
commit c090453931
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,7 +2,7 @@ import os
import re import re
import math import math
from copy import deepcopy from copy import deepcopy
from operator import itemgetter from operator import attrgetter, itemgetter
from pathlib import Path from pathlib import Path
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
import requests import requests
@ -179,10 +179,16 @@ def seconds_to_timestr(seconds):
return '{:02d}:{:02d}:{:02d}'.format(hour, minutes, seconds) return '{:02d}:{:02d}:{:02d}'.format(hour, minutes, seconds)
def multi_key_sort(sort_dict, specs, use_reversed=False): def multi_key_sort(iterable, specs, /, use_reversed=False, *, item=False, attr=False, key_func=None):
result = list(sort_dict) result = list(iterable)
if key_func is None:
# itemgetter is the default
if item or not (item or attr):
key_func = itemgetter
elif attr:
key_func = attrgetter
for key, reverse in reversed(specs): for key, reverse in reversed(specs):
result = sorted(result, key=itemgetter(key), reverse=reverse) result.sort(key=key_func(key), reverse=reverse)
if use_reversed: if use_reversed:
return list(reversed(result)) return list(reversed(result))
return result return result