2022-04-30 17:15:26 +02:00
|
|
|
from collections.abc import Callable
|
2021-07-26 15:21:57 +02:00
|
|
|
|
2021-11-02 17:45:45 +01:00
|
|
|
from cpl_query._query.order_by import then_by_descending_query, then_by_query
|
|
|
|
from cpl_query.extension.iterable import Iterable
|
|
|
|
from cpl_query.extension.ordered_iterable_abc import OrderedIterableABC
|
2021-07-26 15:21:57 +02:00
|
|
|
|
|
|
|
|
2021-07-27 13:57:42 +02:00
|
|
|
class OrderedIterable(Iterable, OrderedIterableABC):
|
2021-11-02 17:30:10 +01:00
|
|
|
r"""Implementation of :class: `cpl_query.extension.Iterable` `cpl_query.extension.OrderedIterableABC`
|
|
|
|
"""
|
2021-07-26 15:21:57 +02:00
|
|
|
|
2021-11-22 20:52:10 +01:00
|
|
|
def __init__(self, _t: type = None):
|
|
|
|
Iterable.__init__(self, _t)
|
|
|
|
OrderedIterableABC.__init__(self, _t)
|
2021-07-26 15:21:57 +02:00
|
|
|
|
|
|
|
def then_by(self, _func: Callable) -> OrderedIterableABC:
|
|
|
|
self._funcs.append(_func)
|
|
|
|
return then_by_query(self, lambda *args: [f(*args) for f in self._funcs])
|
|
|
|
|
|
|
|
def then_by_descending(self, _func: Callable) -> OrderedIterableABC:
|
|
|
|
self._funcs.append(_func)
|
|
|
|
return then_by_descending_query(self, lambda *args: [f(*args) for f in self._funcs])
|