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):
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:
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.'
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())
# 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
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())
class="block_column{{ ' critical' if block.booking
and block.booking.sink_error }}">
[<a href="#block_{{ block.id_ }}">#</a>]<br />
- [<a href="/balance?up_incl={{ block.id_ }}">b</a>]<br />
+ [<a href="/balance/{{ block.id_ }}">b</a>]<br />
[<a href="/edit_{{ mode }}/{{ block.id_ }}">e</a>]
</td>
</tr>
<span class="disable_on_taint">
<a href="/edit_{{ there }}/{{ block.id_ }}">switch to {{ there }}</a>
·
-<a href="/balance?up_incl={{ block.id_ }}">balance after</a>
+<a href="/balance/{{ block.id_ }}">balance after</a>
·
<a href="/ledger_{{ here }}/#block_{{ block.id_ }}">in ledger</a>
</span>
{% block content %}
<p>
- {{ 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 {# -#}
<a href="/blocks/{{block.id_}}">{# -#}
</td>
<td rowspan=2 class="block_column">
[<a href="#block_0">#</a>]<br />
- [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/balance/0">b</a>]<br />
[<a href="/edit_raw/0">e</a>]
</td>
</tr>
</td>
<td rowspan=2 class="block_column">
[<a href="#block_0">#</a>]<br />
- [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/balance/0">b</a>]<br />
[<a href="/edit_structured/0">e</a>]
</td>
</tr>
</form>
</div>
<p>
- <a href="/balance?up_incl=3">prev</a>
+ <a href="/balance/3">prev</a>
<del>next</del>
|
balance after <a href="/blocks/4">booking 4 (2001-01-01: test)</a>
<span class="disable_on_taint">
<a href="/edit_structured/1">switch to structured</a>
·
-<a href="/balance?up_incl=1">balance after</a>
+<a href="/balance/1">balance after</a>
·
<a href="/ledger_raw/#block_1">in ledger</a>
</span>
<span class="disable_on_taint">
<a href="/edit_structured/4">switch to structured</a>
·
-<a href="/balance?up_incl=4">balance after</a>
+<a href="/balance/4">balance after</a>
·
<a href="/ledger_raw/#block_4">in ledger</a>
</span>
<span class="disable_on_taint">
<a href="/edit_raw/1">switch to raw</a>
·
-<a href="/balance?up_incl=1">balance after</a>
+<a href="/balance/1">balance after</a>
·
<a href="/ledger_structured/#block_1">in ledger</a>
</span>
<span class="disable_on_taint">
<a href="/edit_raw/4">switch to raw</a>
·
-<a href="/balance?up_incl=4">balance after</a>
+<a href="/balance/4">balance after</a>
·
<a href="/ledger_structured/#block_4">in ledger</a>
</span>
</td>
<td rowspan=3 class="block_column">
[<a href="#block_0">#</a>]<br />
- [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/balance/0">b</a>]<br />
[<a href="/edit_raw/0">e</a>]
</td>
</tr>
</td>
<td rowspan=5 class="block_column">
[<a href="#block_1">#</a>]<br />
- [<a href="/balance?up_incl=1">b</a>]<br />
+ [<a href="/balance/1">b</a>]<br />
[<a href="/edit_raw/1">e</a>]
</td>
</tr>
</td>
<td rowspan=7 class="block_column">
[<a href="#block_2">#</a>]<br />
- [<a href="/balance?up_incl=2">b</a>]<br />
+ [<a href="/balance/2">b</a>]<br />
[<a href="/edit_raw/2">e</a>]
</td>
</tr>
</td>
<td rowspan=6 class="block_column critical">
[<a href="#block_3">#</a>]<br />
- [<a href="/balance?up_incl=3">b</a>]<br />
+ [<a href="/balance/3">b</a>]<br />
[<a href="/edit_raw/3">e</a>]
</td>
</tr>
</td>
<td rowspan=7 class="block_column">
[<a href="#block_4">#</a>]<br />
- [<a href="/balance?up_incl=4">b</a>]<br />
+ [<a href="/balance/4">b</a>]<br />
[<a href="/edit_raw/4">e</a>]
</td>
</tr>
</td>
<td rowspan=3 class="block_column">
[<a href="#block_0">#</a>]<br />
- [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/balance/0">b</a>]<br />
[<a href="/edit_structured/0">e</a>]
</td>
</tr>
</td>
<td rowspan=5 class="block_column">
[<a href="#block_1">#</a>]<br />
- [<a href="/balance?up_incl=1">b</a>]<br />
+ [<a href="/balance/1">b</a>]<br />
[<a href="/edit_structured/1">e</a>]
</td>
</tr>
</td>
<td rowspan=7 class="block_column">
[<a href="#block_2">#</a>]<br />
- [<a href="/balance?up_incl=2">b</a>]<br />
+ [<a href="/balance/2">b</a>]<br />
[<a href="/edit_structured/2">e</a>]
</td>
</tr>
</td>
<td rowspan=6 class="block_column critical">
[<a href="#block_3">#</a>]<br />
- [<a href="/balance?up_incl=3">b</a>]<br />
+ [<a href="/balance/3">b</a>]<br />
[<a href="/edit_structured/3">e</a>]
</td>
</tr>
</td>
<td rowspan=7 class="block_column">
[<a href="#block_4">#</a>]<br />
- [<a href="/balance?up_incl=4">b</a>]<br />
+ [<a href="/balance/4">b</a>]<br />
[<a href="/edit_structured/4">e</a>]
</td>
</tr>