home · contact · privacy
Speed up late-in-ledger edit views by removing redundant account wealth history regen... master
authorChristian Heller <c.heller@plomlompom.de>
Sat, 3 Jan 2026 15:43:56 +0000 (16:43 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Sat, 3 Jan 2026 15:43:56 +0000 (16:43 +0100)
src/ledgplom/http.py
src/ledgplom/ledger.py

index 9abbabf15f9a7d092d676b9e9a287a9b397dcaac..4d97736f186946b147097f43645a93c1ada451f3 100644 (file)
@@ -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]
index 5d44060d58c5066bd5c51b7611ac7cfef8577078..590561cfa135dceb62e936b75d8484ea70d7467b 100644 (file)
@@ -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] = {}