home · contact · privacy
Speed up _DatBlock.from_lines. master
authorPlom Heller <plom@plomlompom.com>
Wed, 19 Aug 2026 20:24:13 +0000 (22:24 +0200)
committerPlom Heller <plom@plomlompom.com>
Wed, 19 Aug 2026 20:24:13 +0000 (22:24 +0200)
src/ledgplom/ledger.py

index f4cb8fe9c5a0b6dfb478227898ec08cd3c47a27c..07b0d310d0e220c1ed5f728f7c9a494a196d4b22 100644 (file)
@@ -456,10 +456,14 @@ class _DatBlock(_LinesBlock, _LedgerNode):
     def from_lines(cls, lines: tuple[str, ...]) -> tuple['_DatBlock', ...]:
         'Sequence of DatBlocks parsed from lines.'
         i_block: _DatBlock = cls()
+        i_block_indented = False
         for dat_line in (_DatLine(line.rstrip()) for line in lines):
-            if (not dat_line.len_indent) and i_block.indented:
+            line_indented = bool(dat_line.len_indent)
+            if (not line_indented) and i_block_indented:
                 i_block.next = _DatBlock()
                 i_block = i_block.next
+                i_block_indented = False
+            i_block_indented = i_block_indented or line_indented
             i_block.add((dat_line, ))
         blocks = [i_block]
         while i_block.prev:
@@ -467,11 +471,6 @@ class _DatBlock(_LinesBlock, _LedgerNode):
             blocks += [i_block]
         return tuple(reversed(blocks))
 
-    @property
-    def indented(self) -> bool:
-        'Does the block contain any indented lines?'
-        return bool([line for line in self.lines if line.len_indent])
-
     @property
     @_LinesBlock._cache('gap_lines')
     def gap_lines(self) -> tuple[_DatLine, ...]: