diff options
author | uvok | 2025-04-17 18:43:38 +0200 |
---|---|---|
committer | uvok | 2025-04-17 18:43:38 +0200 |
commit | 3fd5c7ce8ec71dd74fc3f4c72ab99463c6f911a7 (patch) | |
tree | 3c9b6571c596082c5f02ec3c939e85679bccd2bc | |
parent | ec6feb0ef339f83b78b1d382b345e25e46548eb9 (diff) |
sort-order ledger processing
-rw-r--r-- | bla.py | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -90,10 +90,15 @@ def process_trade(refid: str, trades: List[LedgerAction]): def process_ledger(read_actions: List[LedgerAction], output_path: str): - # for refid, actions in groupby( - # sorted(read_actions, key=lambda a: a.refid), lambda a: a.refid - # ): - for refid, actions in groupby(read_actions, lambda a: a.refid): + # don't make any assumtptions about ledger sorting + # groupby requires sorted inputs + actions_sorted = sorted(read_actions, key=lambda a: (a.refid, a.timestamp)) + _grouped_actions = groupby(actions_sorted, lambda a: a.refid) + _list_tuple_actions = [(k, list(v)) for k, v in _grouped_actions] + # finally, sort groupy by first available timestamp + sorted_grouped_actions = sorted(_list_tuple_actions, key=lambda a: a[1][0].timestamp) + + for refid, actions in sorted_grouped_actions: actions = list(actions) if len(actions) == 0: |