48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from collections.abc import Callable
|
|
|
|
from cpl_query.exceptions import ExceptionArgument, ArgumentNoneException
|
|
from cpl_query.extension.iterable_abc import IterableABC
|
|
from cpl_query.extension.ordered_iterable_abc import OrderedIterableABC
|
|
|
|
|
|
def order_by_query(_list: IterableABC, _func: Callable) -> OrderedIterableABC:
|
|
result = OrderedIterableABC(_list.type, _func)
|
|
_list.sort(key=_func)
|
|
result.extend(_list)
|
|
return result
|
|
|
|
|
|
def order_by_descending_query(_list: IterableABC, _func: Callable) -> OrderedIterableABC:
|
|
if _list is None:
|
|
raise ArgumentNoneException(ExceptionArgument.list)
|
|
|
|
if _func is None:
|
|
raise ArgumentNoneException(ExceptionArgument.func)
|
|
|
|
result = OrderedIterableABC(_list.type, _func)
|
|
_list.sort(key=_func, reverse=True)
|
|
result.extend(_list)
|
|
return result
|
|
|
|
|
|
def then_by_query(_list: OrderedIterableABC, _func: Callable) -> OrderedIterableABC:
|
|
if _list is None:
|
|
raise ArgumentNoneException(ExceptionArgument.list)
|
|
|
|
if _func is None:
|
|
raise ArgumentNoneException(ExceptionArgument.func)
|
|
|
|
_list.sort(key=_func)
|
|
return _list
|
|
|
|
|
|
def then_by_descending_query(_list: OrderedIterableABC, _func: Callable) -> OrderedIterableABC:
|
|
if _list is None:
|
|
raise ArgumentNoneException(ExceptionArgument.list)
|
|
|
|
if _func is None:
|
|
raise ArgumentNoneException(ExceptionArgument.func)
|
|
|
|
_list.sort(key=_func, reverse=True)
|
|
return _list
|