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 math
from copy import deepcopy
from operator import itemgetter
from operator import attrgetter, itemgetter
from pathlib import Path
from tempfile import NamedTemporaryFile
import requests
@ -179,10 +179,16 @@ def seconds_to_timestr(seconds):
return '{:02d}:{:02d}:{:02d}'.format(hour, minutes, seconds)
def multi_key_sort(sort_dict, specs, use_reversed=False):
result = list(sort_dict)
def multi_key_sort(iterable, specs, /, use_reversed=False, *, item=False, attr=False, key_func=None):
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):
result = sorted(result, key=itemgetter(key), reverse=reverse)
result.sort(key=key_func(key), reverse=reverse)
if use_reversed:
return list(reversed(result))
return result