From a0146904a20f6c307dc7189998753f7e75ef913a Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Sat, 3 Jan 2026 16:43:56 +0100 Subject: [PATCH] Speed up late-in-ledger edit views by removing redundant account wealth history regenerations. --- src/ledgplom/http.py | 10 +++++----- src/ledgplom/ledger.py | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/ledgplom/http.py b/src/ledgplom/http.py index 9abbabf..4d97736 100644 --- a/src/ledgplom/http.py +++ b/src/ledgplom/http.py @@ -121,7 +121,7 @@ class _Handler(PlomHttpHandler): 'Display tree of calculated Accounts over blocks up_incl+1.' id_ = int(self.params.first('up_incl') or str(len(self.server.ledger.blocks) - 1)) - roots = [ac for ac in self.server.ledger.accounts.values() + roots = [ac for ac in self.server.ledger.calc_accounts().values() if not ac.parent] ctx['roots'] = sorted(roots, key=lambda r: r.basename) ctx['valid'] = self.server.ledger.blocks_valid_up_incl(id_) @@ -131,7 +131,6 @@ class _Handler(PlomHttpHandler): def get_edit(self, ctx, raw: bool) -> None: 'Display edit form for individual Booking.' - def make_balance_roots(b: DatBlock) -> list[dict[str, Any]]: acc_changes = b.booking.account_changes if b.booking else {} observed_tree: list[dict[str, Any]] = [] @@ -146,8 +145,8 @@ class _Handler(PlomHttpHandler): break if already_registered: continue - pre = self.server.ledger.accounts[path].get_wealth(id_ - 1) - post = self.server.ledger.accounts[path].get_wealth(id_) + pre = accounts[path].get_wealth(id_ - 1) + post = accounts[path].get_wealth(id_) targeted = full_path == path diff = { cur: amt for cur, amt in (post - pre).moneys.items() @@ -169,6 +168,7 @@ class _Handler(PlomHttpHandler): parent_children = node['children'] return observed_tree + accounts = self.server.ledger.calc_accounts() id_ = int(self.path_toks[2]) block = self.server.ledger.blocks[id_] ctx['block'] = block @@ -178,7 +178,7 @@ class _Handler(PlomHttpHandler): self._send_rendered(_PAGENAME_EDIT_RAW, ctx) else: ctx['raw_gap_lines'] = [dl.raw for dl in block.gap.lines] - ctx['all_accounts'] = sorted(self.server.ledger.accounts.keys()) + ctx['all_accounts'] = sorted(accounts.keys()) ctx['booking_lines'] = [] if block.booking: ctx['booking_lines'] += [block.booking.intro_line.as_dict] diff --git a/src/ledgplom/ledger.py b/src/ledgplom/ledger.py index 5d44060..590561c 100644 --- a/src/ledgplom/ledger.py +++ b/src/ledgplom/ledger.py @@ -96,7 +96,7 @@ class Account: return total def add_wealth_diff(self, booking_id: int, wealth_diff: _Wealth) -> None: - 'Add knowledge that _Booking of booking_add added wealth_diff.' + 'Add knowledge that _Booking of booking_id added wealth_diff.' if booking_id in self._wealth_diffs: self._wealth_diffs[booking_id] += wealth_diff else: @@ -607,8 +607,7 @@ class Ledger: lines += block.lines return lines - @property - def accounts(self) -> dict[str, Account]: + def calc_accounts(self) -> dict[str, Account]: 'Build mapping of account names to Accounts.' accounts: dict[str, Account] = {} -- 2.30.2