From: Christian Heller Date: Tue, 20 Jan 2026 15:18:21 +0000 (+0100) Subject: Simplify, refactor page rendering. X-Git-Url: https://plomlompom.com/repos/booking/static/%7B%7Bdb.prefix%7D%7D/%7B%7Bprefix%7D%7D/foo.html?a=commitdiff_plain;h=8f46a7ebf5d31485c43877714dfde9ab4c1eb5ef;p=ledgplom Simplify, refactor page rendering. --- diff --git a/src/ledgplom/http.py b/src/ledgplom/http.py index 3d98991..5ffb605 100644 --- a/src/ledgplom/http.py +++ b/src/ledgplom/http.py @@ -9,18 +9,35 @@ from ledgplom.ledger import DEFAULT_INDENT, Ledger PATH_TEMPLATES = Path('templates') -_PREFIX_EDIT = 'edit_' -_PREFIX_FILE = 'file_' -PREFIX_LEDGER = 'ledger_' +_PREFIX_EDIT = 'edit' +_PREFIX_FILE = 'file' +PREFIX_LEDGER = 'ledger' _SERVER_HOST = '127.0.0.1' _SERVER_PORT = 8084 _SUFFIX_RAW = 'raw' _SUFFIX_STRUCTURED = 'structured' PAGENAME_BALANCE = 'balance' -PAGENAME_EDIT_RAW = f'{_PREFIX_EDIT}{_SUFFIX_RAW}' -PAGENAME_EDIT_STRUCTURED = f'{_PREFIX_EDIT}{_SUFFIX_STRUCTURED}' -PAGENAME_LEDGER_RAW = f'{PREFIX_LEDGER}{_SUFFIX_RAW}' -PAGENAME_LEDGER_STRUCTURED = f'{PREFIX_LEDGER}{_SUFFIX_STRUCTURED}' +PAGENAME_EDIT_RAW = f'{_PREFIX_EDIT}_{_SUFFIX_RAW}' +PAGENAME_EDIT_STRUCTURED = f'{_PREFIX_EDIT}_{_SUFFIX_STRUCTURED}' +PAGENAME_LEDGER_RAW = f'{PREFIX_LEDGER}_{_SUFFIX_RAW}' +PAGENAME_LEDGER_STRUCTURED = f'{PREFIX_LEDGER}_{_SUFFIX_STRUCTURED}' + + +def render_ctx_on_path(ledger, short_path_toks): + 'Prepare template rendering context based on ledger and path.' + pagename = short_path_toks[0] + prefix, suffix = (pagename + '_').split('_')[:2] + method = getattr(ledger, f'view_ctx_{prefix}') + method_kwargs = {} + if prefix != PREFIX_LEDGER: + method_kwargs['id_'] = -1 + if len(short_path_toks) > 1: + id_str = short_path_toks[1] 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_RAW + return method(**method_kwargs) class Server(PlomHttpServer): @@ -54,9 +71,9 @@ class _Handler(PlomHttpHandler): def post_file_action(self, file_prefixed: str) -> None: 'Based on file_prefixed name, trigger .server.ledger.(load|save).' - if file_prefixed == f'{_PREFIX_FILE}load': + if file_prefixed == f'{_PREFIX_FILE}_load': self.server.ledger.load() - elif file_prefixed == f'{_PREFIX_FILE}save': + elif file_prefixed == f'{_PREFIX_FILE}_save': self.server.ledger.save() def post_edit(self) -> Path: @@ -108,18 +125,14 @@ class _Handler(PlomHttpHandler): self.redirect( Path('/', PAGENAME_EDIT_STRUCTURED, self.path_toks[2])) return - ctx = {'unsaved_changes': self.server.ledger.tainted, - 'path': self.path} if self.pagename.endswith('.js'): self.get_js() - elif self.pagename == PAGENAME_BALANCE: - self.get_balance(ctx) - elif self.pagename.startswith(_PREFIX_EDIT): - self.get_edit(ctx, self.pagename == PAGENAME_EDIT_RAW) - elif self.pagename.startswith(PREFIX_LEDGER): - self.get_ledger(ctx, self.pagename == PAGENAME_LEDGER_RAW) - else: - self.get_ledger(ctx, False) + return + ctx = {'unsaved_changes': self.server.ledger.tainted, + 'path': self.path} + self._send_rendered(self.pagename, + ctx | render_ctx_on_path(self.server.ledger, + self.path_toks[1:])) def get_js(self) -> None: 'Deliver .js module.' @@ -135,24 +148,3 @@ class _Handler(PlomHttpHandler): bytes(self.server.jinja.get_template(self.pagename).render(**ctx), encoding='utf8'), [('Content-Type', 'text/javascript')]) - - def get_balance(self, ctx) -> None: - 'Display tree of calculated Accounts over blocks up_incl+1.' - id_str = self.params.first('up_incl') - self._send_rendered( - PAGENAME_BALANCE, - ctx | self.server.ledger.view_ctx_balance(int(id_str) if id_str - else -1)) - - def get_edit(self, ctx, raw: bool) -> None: - 'Display edit form for individual Booking.' - self._send_rendered( - PAGENAME_EDIT_RAW if raw else PAGENAME_EDIT_STRUCTURED, - ctx | self.server.ledger.view_ctx_edit(int(self.path_toks[2]), - raw)) - - def get_ledger(self, ctx: dict[str, Any], raw: bool) -> None: - 'Display ledger of all Bookings.' - self._send_rendered( - PAGENAME_LEDGER_RAW if raw else PAGENAME_LEDGER_STRUCTURED, - ctx | self.server.ledger.view_ctx_ledger()) diff --git a/src/ledgplom/testing.py b/src/ledgplom/testing.py index f06f154..2c17d85 100644 --- a/src/ledgplom/testing.py +++ b/src/ledgplom/testing.py @@ -9,8 +9,8 @@ from jinja2 import (Environment as JinjaEnv, # ourselves from ledgplom.http import ( PAGENAME_BALANCE, PAGENAME_EDIT_RAW, PAGENAME_EDIT_STRUCTURED, - PAGENAME_LEDGER_RAW, PAGENAME_LEDGER_STRUCTURED, - PATH_TEMPLATES, PREFIX_LEDGER) + PAGENAME_LEDGER_RAW, PAGENAME_LEDGER_STRUCTURED, PATH_TEMPLATES, + render_ctx_on_path) from ledgplom.ledger import Ledger @@ -42,17 +42,9 @@ def run_tests() -> None: if p != dat_path and p.parts[-1].startswith( str(dat_path.parts[-1])[:-len(_EXT_DAT)] + '.')]: - tmpl_name, id_str = (str(test_path.parts[-1]).split('.') - + ['-1'])[1:3] - if tmpl_name not in templates.keys(): - continue - tmpl_name_start = tmpl_name.split("_")[0] - lines_rendered = templates[tmpl_name].render( - **getattr(ledger, f'view_ctx_{tmpl_name_start}')( - **({'raw': False} if tmpl_name == PAGENAME_EDIT_STRUCTURED - else {}) | ({} if tmpl_name_start == PREFIX_LEDGER[:-1] - else {'id_': int(id_str)})) - ).split('\n') + path_toks = str(test_path.parts[-1]).split('.')[1:] + lines_rendered = templates[path_toks[0]].render( + render_ctx_on_path(ledger, path_toks)).split('\n') with test_path.open('r', encoding='utf8') as f: lines_expected = tuple(line.rstrip('\n') for line in f.readlines()) diff --git a/src/templates/_macros.tmpl b/src/templates/_macros.tmpl index f09f619..b41be34 100644 --- a/src/templates/_macros.tmpl +++ b/src/templates/_macros.tmpl @@ -109,7 +109,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -148,7 +148,7 @@ td.direct_target { switch to {{ there }} · -balance after +balance after · in ledger diff --git a/src/templates/balance.tmpl b/src/templates/balance.tmpl index 403fe88..684fa45 100644 --- a/src/templates/balance.tmpl +++ b/src/templates/balance.tmpl @@ -86,8 +86,8 @@ span.indent { {% block content %}

- {{ macros.conditional_block_nav('/balance?up_incl=', 'prev', block) -}}{##} - {{ macros.conditional_block_nav('/balance?up_incl=', 'next', block) }}{##} + {{ macros.conditional_block_nav('/balance/', 'prev', block) -}}{##} + {{ macros.conditional_block_nav('/balance/', 'next', block) }}{##} | balance after {# -#} {# -#} diff --git a/src/tests/empty.ledger_raw b/src/tests/empty.ledger_raw index 1ac17d3..2408dbe 100644 --- a/src/tests/empty.ledger_raw +++ b/src/tests/empty.ledger_raw @@ -73,7 +73,7 @@ table { [#]
- [b]
+ [b]
[e] diff --git a/src/tests/empty.ledger_structured b/src/tests/empty.ledger_structured index 5d6be30..3dbab6a 100644 --- a/src/tests/empty.ledger_structured +++ b/src/tests/empty.ledger_structured @@ -78,7 +78,7 @@ td.currency { [#]
- [b]
+ [b]
[e] diff --git a/src/tests/full.balance b/src/tests/full.balance index 7344f13..d43edde 100644 --- a/src/tests/full.balance +++ b/src/tests/full.balance @@ -80,7 +80,7 @@ span.indent {

- prev + prev next | balance after booking 4 (2001-01-01: test) diff --git a/src/tests/full.edit_raw.1 b/src/tests/full.edit_raw.1 index 58aa588..282a832 100644 --- a/src/tests/full.edit_raw.1 +++ b/src/tests/full.edit_raw.1 @@ -88,7 +88,7 @@ td.direct_target { switch to structured · -balance after +balance after · in ledger diff --git a/src/tests/full.edit_raw.4 b/src/tests/full.edit_raw.4 index bdecd69..8230dc6 100644 --- a/src/tests/full.edit_raw.4 +++ b/src/tests/full.edit_raw.4 @@ -88,7 +88,7 @@ td.direct_target { switch to structured · -balance after +balance after · in ledger diff --git a/src/tests/full.edit_structured.1 b/src/tests/full.edit_structured.1 index b65f398..195c72b 100644 --- a/src/tests/full.edit_structured.1 +++ b/src/tests/full.edit_structured.1 @@ -97,7 +97,7 @@ input.amount { switch to raw · -balance after +balance after · in ledger diff --git a/src/tests/full.edit_structured.4 b/src/tests/full.edit_structured.4 index 2f84cfa..d217c62 100644 --- a/src/tests/full.edit_structured.4 +++ b/src/tests/full.edit_structured.4 @@ -97,7 +97,7 @@ input.amount { switch to raw · -balance after +balance after · in ledger diff --git a/src/tests/full.ledger_raw b/src/tests/full.ledger_raw index 19eb486..a9bd169 100644 --- a/src/tests/full.ledger_raw +++ b/src/tests/full.ledger_raw @@ -75,7 +75,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -100,7 +100,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -126,7 +126,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -154,7 +154,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -182,7 +182,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] diff --git a/src/tests/full.ledger_structured b/src/tests/full.ledger_structured index 7a2c49c..d4fc05d 100644 --- a/src/tests/full.ledger_structured +++ b/src/tests/full.ledger_structured @@ -80,7 +80,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -109,7 +109,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -150,7 +150,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -200,7 +200,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e] @@ -248,7 +248,7 @@ Detected redundant empty lines in gaps, [#]
- [b]
+ [b]
[e]