home · contact · privacy
Calculate comment instructions only until point of retrieval. master
authorChristian Heller <c.heller@plomlompom.de>
Tue, 10 Feb 2026 17:37:22 +0000 (18:37 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Tue, 10 Feb 2026 17:37:22 +0000 (18:37 +0100)
src/ledgplom/ledger.py
src/tests/full.balance
src/tests/full.dat
src/tests/full.edit_structured.4
src/tests/full.ledger_raw
src/tests/full.ledger_structured

index d92e01f2713446165d4eb97d423cc575184d5f1b..7cc1abbc90659adcbb98a05ca90776082bfebb01 100644 (file)
@@ -633,8 +633,8 @@ class Ledger:
             lines += list(block.lines)
         return tuple(lines)
 
             lines += list(block.lines)
         return tuple(lines)
 
-    def _calc_accounts(self) -> dict[str, _Account]:
-        'Build mapping of account names to _Accounts.'
+    def _calc_accounts(self, id_: int) -> dict[str, _Account]:
+        'Map account names to _Accounts, their details only defined until id_.'
         accounts: dict[str, _Account] = {}
 
         def ensure_accounts(full_path: str) -> None:
         accounts: dict[str, _Account] = {}
 
         def ensure_accounts(full_path: str) -> None:
@@ -646,15 +646,18 @@ class Ledger:
                         step_name)
                 parent_path = path
 
                         step_name)
                 parent_path = path
 
-        for dat_line in self._dat_lines:
-            for acc_name, desc in dat_line.comment_instructions.items():
-                ensure_accounts(acc_name)
-                accounts[acc_name].desc = desc
-        for block in [b for b in self.blocks if b.booking]:
-            assert block.booking is not None
-            for acc_name, wealth in block.booking.diffs_targeted.items():
-                ensure_accounts(acc_name)
-                accounts[acc_name].add_wealth_diff(block.id_, wealth)
+        for block in self.blocks:
+            collect_more_than_names = id_ < 0 or block.id_ <= id_
+            for line in block.lines:
+                for acc_name, desc in line.comment_instructions.items():
+                    ensure_accounts(acc_name)
+                    if collect_more_than_names:
+                        accounts[acc_name].desc = desc
+            if block.booking:
+                for acc_name, wealth in block.booking.diffs_targeted.items():
+                    ensure_accounts(acc_name)
+                    if collect_more_than_names:
+                        accounts[acc_name].add_wealth_diff(block.id_, wealth)
         return accounts
 
     def save(self) -> None:
         return accounts
 
     def save(self) -> None:
@@ -719,7 +722,7 @@ class Ledger:
             id_ = len(self.blocks) - 1
         return {'valid': self._blocks_valid_up_incl(id_),
                 'block': self.blocks[id_],
             id_ = len(self.blocks) - 1
         return {'valid': self._blocks_valid_up_incl(id_),
                 'block': self.blocks[id_],
-                'roots': sorted([ac for ac in self._calc_accounts().values()
+                'roots': sorted([ac for ac in self._calc_accounts(id_).values()
                                  if not ac.parent],
                                 key=lambda root: root.basename)}
 
                                  if not ac.parent],
                                 key=lambda root: root.basename)}
 
@@ -731,7 +734,7 @@ class Ledger:
                     'booking_lines': ([line.as_dict
                                        for line in block.booking.booking_lines]
                                       if block.booking else tuple())}
                     'booking_lines': ([line.as_dict
                                        for line in block.booking.booking_lines]
                                       if block.booking else tuple())}
-        accounts = self._calc_accounts()
+        accounts = self._calc_accounts(id_)
         roots: list[dict[str, Any]] = []
         for full_path in sorted(block.booking.diffs_targeted.keys()
                                 if block.booking else []):
         roots: list[dict[str, Any]] = []
         for full_path in sorted(block.booking.diffs_targeted.keys()
                                 if block.booking else []):
index d5684a12dad968bb20a9ed4164ab3db3c90078fd..49cc9919c6811b1f28c5aa1f578b67a2a796662b 100644 (file)
@@ -127,7 +127,7 @@ span.indent {
         <td>
             <span class="indent">&nbsp;</span>:x:
         </td>
         <td>
             <span class="indent">&nbsp;</span>:x:
         </td>
-        <td>bla bla bla</td>
+        <td>bla foo bla</td>
     </tr>
     <tr>
         <td class="money">
     </tr>
     <tr>
         <td class="money">
index 92619657ec7168a5e9bca4866ea38d90043bd51c..91c537dd575685cb804fb044163e556997797530 100644 (file)
@@ -22,6 +22,8 @@
     bar:x:y   -10 €
     bar:z   -1 USD
 
     bar:x:y   -10 €
     bar:z   -1 USD
 
+; #def bar:x bla foo bla
+
 2001-01-03 test
     foo:x    10 €
     foo:x    3 USD
 2001-01-03 test
     foo:x    10 €
     foo:x    3 USD
index 020d4d954243182cdd1fd3bdd3e9a78d9384b92b..6ad51b056517df80784576995dafbd614e63ce7c 100644 (file)
@@ -109,7 +109,9 @@ to
 </span>
 <hr>
 <div>Gap:</div>
 </span>
 <hr>
 <div>Gap:</div>
-<textarea id="gap_lines" name="raw_lines" cols="100" rows="2" class="tainter">
+<textarea id="gap_lines" name="raw_lines" cols="100" rows="4" class="tainter">
+; #def bar:x bla foo bla
+
 </textarea>
 <EXPANDED>
 <table id="booking_lines" class="alternating">
 </textarea>
 <EXPANDED>
 <table id="booking_lines" class="alternating">
index ab212b2ad401120032f0158f48354d8095da4d85..49e154e17e7aec41c0c065b9c40fd220ce9d7e12 100644 (file)
@@ -140,20 +140,22 @@ Detected redundant empty lines in gaps, <input type="submit" name="remove_redund
     <tr><td>    bar:z   -1 USD&nbsp;</td></tr>
     <tr></tr><!-- keep the background-color alternation in proper order -->
     <tr id="block_4">
     <tr><td>    bar:z   -1 USD&nbsp;</td></tr>
     <tr></tr><!-- keep the background-color alternation in proper order -->
     <tr id="block_4">
-        <td rowspan="7" class="block_column">
+        <td rowspan="9" class="block_column">
             <input type="submit" name="ledger_moveup_4" value="^">
             <br>
             <input type="submit" name="ledger_movedown_4" value="v" disabled="">
             <br>
             <input type="submit" name="ledger_copy_4" value="C">
         </td>
             <input type="submit" name="ledger_moveup_4" value="^">
             <br>
             <input type="submit" name="ledger_movedown_4" value="v" disabled="">
             <br>
             <input type="submit" name="ledger_copy_4" value="C">
         </td>
-        <td rowspan="7" class="block_column critical">
+        <td rowspan="9" class="block_column critical">
             [<a href="#block_4">#</a>]<br>
             [<a href="/balance/4">b</a>]<br>
             [<a href="/edit_raw/4">e</a>]
         </td>
     </tr>
     <tr><td>&nbsp;</td></tr>
             [<a href="#block_4">#</a>]<br>
             [<a href="/balance/4">b</a>]<br>
             [<a href="/edit_raw/4">e</a>]
         </td>
     </tr>
     <tr><td>&nbsp;</td></tr>
+    <tr><td>; #def bar:x bla foo bla&nbsp;</td></tr>
+    <tr><td>&nbsp;</td></tr>
     <tr><td>2001-01-03 test&nbsp;</td></tr>
     <tr><td>    foo:x    10 €&nbsp;</td></tr>
     <tr><td>    foo:x    3 USD&nbsp;</td></tr>
     <tr><td>2001-01-03 test&nbsp;</td></tr>
     <tr><td>    foo:x    10 €&nbsp;</td></tr>
     <tr><td>    foo:x    3 USD&nbsp;</td></tr>
index 7325363bfadb435c7d643d22db0e3096d88aafcd..2d73385c3301a0cd124d5476e1b05a3e494b376c 100644 (file)
@@ -225,14 +225,14 @@ Detected redundant empty lines in gaps, <input type="submit" name="remove_redund
     </tr>
     <tr></tr><!-- keep the background-color alternation in proper order -->
     <tr id="block_4">
     </tr>
     <tr></tr><!-- keep the background-color alternation in proper order -->
     <tr id="block_4">
-        <td rowspan="7" class="block_column">
+        <td rowspan="9" class="block_column">
             <input type="submit" name="ledger_moveup_4" value="^">
             <br>
             <input type="submit" name="ledger_movedown_4" value="v" disabled="">
             <br>
             <input type="submit" name="ledger_copy_4" value="C">
         </td>
             <input type="submit" name="ledger_moveup_4" value="^">
             <br>
             <input type="submit" name="ledger_movedown_4" value="v" disabled="">
             <br>
             <input type="submit" name="ledger_copy_4" value="C">
         </td>
-        <td rowspan="7" class="block_column critical">
+        <td rowspan="9" class="block_column critical">
             [<a href="#block_4">#</a>]<br>
             [<a href="/balance/4">b</a>]<br>
             [<a href="/edit_structured/4">e</a>]
             [<a href="#block_4">#</a>]<br>
             [<a href="/balance/4">b</a>]<br>
             [<a href="/edit_structured/4">e</a>]
@@ -241,6 +241,12 @@ Detected redundant empty lines in gaps, <input type="submit" name="remove_redund
     <tr>
         <td colspan="4">&nbsp;</td>
     </tr>
     <tr>
         <td colspan="4">&nbsp;</td>
     </tr>
+    <tr>
+        <td colspan="4">; #def bar:x bla foo bla&nbsp;</td>
+    </tr>
+    <tr>
+        <td colspan="4">&nbsp;</td>
+    </tr>
     <tr>
         <td colspan="3">2001-01-03 test</td>
         <td></td>
     <tr>
         <td colspan="3">2001-01-03 test</td>
         <td></td>