From: Christian Heller Date: Sat, 24 Jan 2026 12:41:24 +0000 (+0100) Subject: Some refactoring. X-Git-Url: https://plomlompom.com/repos/booking/static/%7B%7Bdb.prefix%7D%7D/%7B%7B%20web_path%20%7D%7D/processes?a=commitdiff_plain;h=f264448411736fc96552dd9ebeba0a6136fbf7d8;p=ledgplom Some refactoring. --- diff --git a/src/ledgplom/http.py b/src/ledgplom/http.py index 1fe17ed..79cc6e4 100644 --- a/src/ledgplom/http.py +++ b/src/ledgplom/http.py @@ -17,6 +17,7 @@ SERVER_PORT = 8084 _SUFFIX_HTML = '.html' _SUFFIX_JS = '.js' _SUFFIX_STRUCTURED = 'structured' +_PAGENAME_BALANCE = 'balance' _PAGENAME_EDIT_STRUCTURED = f'{_PREFIX_EDIT}_{_SUFFIX_STRUCTURED}' @@ -108,41 +109,31 @@ class _Handler(PlomHttpHandler): if self.pagename == 'blocks': return self.redirect( Path(f'/{_PAGENAME_EDIT_STRUCTURED}', self.path_toks[2])) - ctx: dict[str, Any] = {} - template_names = tuple(str(path.parts[-1]) - for path in _PATH_TEMPLATES.iterdir()) - if self.pagename.endswith(_SUFFIX_JS): - if self.pagename not in template_names: - return send_404() - if self.pagename.startswith(_PAGENAME_EDIT_STRUCTURED): - block = self.server.ledger.blocks[int(self.path_toks[2])] - ctx['raw_gap_lines'] = [dl.raw for dl in block.gap.lines] - ctx['booking_lines'] = ( - [block.booking.intro_line.as_dict] - + [tf_line.as_dict - for tf_line in block.booking.transfer_lines] - ) if block.booking else [] - return self.send_http( - bytes(self.server.jinja.get_template(self.pagename - ).render(**ctx), - encoding='utf8'), - [('Content-Type', 'text/javascript')]) - template_name = f'{self.pagename}{_SUFFIX_HTML}' - if template_name not in template_names: + is_js = self.pagename.endswith(_SUFFIX_JS) + template_name = f'{self.pagename}{"" if is_js else _SUFFIX_HTML}' + if template_name not in tuple(str(path.parts[-1]) + for path in _PATH_TEMPLATES.iterdir()): return send_404() + ctx: dict[str, Any] = {} ctx['path'] = self.path ctx['unsaved_changes'] = self.server.ledger.tainted - prefix, suffix = (self.pagename + '_').split('_')[:2] - method_kwargs = {} - if prefix != _PREFIX_LEDGER: - method_kwargs['id_'] = -1 - if len(self.path_toks) > 2: - id_str = self.path_toks[2] or '-1' - if id_str.isdigit() or (id_str[1:].isdigit() - and id_str[0] == '-'): - method_kwargs['id_'] = int(id_str) - if prefix == _PREFIX_EDIT: - method_kwargs['raw'] = suffix != _SUFFIX_STRUCTURED - ctx |= getattr(self.server.ledger, - f'view_ctx_{prefix}')(**method_kwargs) - return self.send_rendered(Path(f'{self.pagename}{_SUFFIX_HTML}'), ctx) + prefix, suffix = (self.pagename.split('.')[0] + '_').split('_')[:2] + if prefix in {_PREFIX_EDIT, _PREFIX_LEDGER, _PAGENAME_BALANCE}: + method_kwargs = {} + if prefix != _PREFIX_LEDGER: + method_kwargs['id_'] = -1 + if len(self.path_toks) > 2: + id_str = self.path_toks[2] or '-1' + if id_str.isdigit() or (id_str[1:].isdigit() + and id_str[0] == '-'): + method_kwargs['id_'] = int(id_str) + if prefix == _PREFIX_EDIT: + method_kwargs |= ({'lines': True} if is_js + else {'raw': suffix != _SUFFIX_STRUCTURED}) + ctx |= getattr(self.server.ledger, + f'view_ctx_{prefix}')(**method_kwargs) + return (self.send_http( + bytes(self.server.jinja.get_template(self.pagename).render(**ctx), + encoding='utf8'), + [('Content-Type', 'text/javascript')]) if is_js + else self.send_rendered(Path(template_name), ctx)) diff --git a/src/ledgplom/ledger.py b/src/ledgplom/ledger.py index 9af74cb..dce6140 100644 --- a/src/ledgplom/ledger.py +++ b/src/ledgplom/ledger.py @@ -747,10 +747,17 @@ class Ledger: if not ac.parent], key=lambda root: root.basename)} - def view_ctx_edit(self, id_: int, raw=True) -> dict[str, Any]: + def view_ctx_edit(self, id_: int, raw=True, lines=False) -> dict[str, Any]: 'All context data relevant for rendering an edit view.' - accounts = self._calc_accounts() block = self.blocks[id_] + if lines: + return {'raw_gap_lines': [dl.raw for dl in block.gap.lines], + 'booking_lines': ( + [block.booking.intro_line.as_dict] + + [tf_line.as_dict + for tf_line in block.booking.transfer_lines] + ) if block.booking else []} + accounts = self._calc_accounts() roots: list[dict[str, Any]] = [] for full_path in sorted(block.booking.diffs_targeted.keys() if block.booking else []):