from urllib.parse import parse_qs, urlparse
from jinja2 import Environment as JinjaEnv, FileSystemLoader as JinjaFSLoader
from plomlib import PlomDB, PlomException, run_server, PlomHandler
+from os.path import split as path_split
db_path = '/home/plom/org/ledger2024.dat'
server_port = 8082
date_today = str(datetime.now())[:10]
if copy:
content.date = date_today
+ index = -1
elif -1 == index and (content is None or [] == content):
content = Booking(date=date_today, validate=False)
if 'textarea' == edit_mode and content:
for booking in self.bookings:
for transfer_line in booking.transfer_lines:
accounts.add(transfer_line.account)
- return j2env.get_template('edit.html').render(content=content, index=index, error_msg=error_msg, edit_mode=edit_mode, accounts=accounts, adding=(copy or -1 == index))
+ return j2env.get_template('edit.html').render(
+ content=content,
+ index=index,
+ error_msg=error_msg,
+ edit_mode=edit_mode,
+ accounts=accounts,
+ adding=-1 == index)
def move_up(self, index):
return self.move(index, -1)
db = LedgerDB(prefix, ignore_editable_exceptions=True)
index = 0
parsed_url = urlparse(self.path)
+ site = path_split(parsed_url.path)[1]
for string in {'update', 'add', 'check', 'mirror', 'fill_sink', 'textarea', 'table', 'move_up', 'move_down', 'add_taxes', 'replace'}:
if string in postvars.keys():
submit_button = string
break
- if f'{prefix}/ledger' == parsed_url.path and submit_button in {'move_up', 'move_down'}:
+ if 'ledger' == site and submit_button in {'move_up', 'move_down'}:
mover = getattr(db, submit_button)
index = mover(int(postvars[submit_button][0]))
- elif prefix + '/edit' == parsed_url.path:
+ elif 'edit' == site:
index = int(postvars['index'][0])
edit_mode = postvars['edit_mode'][0]
validate = submit_button in {'update', 'add', 'copy', 'check'}
starts_at = '?' if index == -1 else db.bookings[index].starts_at
+ delete = False
if 'textarea' == edit_mode:
lines = [LedgerTextLine(line) for line in postvars['booking'][0].rstrip().split('\n')]
- booking = Booking(lines, starts_at, validate=validate)
+ if len(lines) == 1 and lines[0].text_line == 'delete':
+ delete = True
+ else:
+ booking = Booking(lines, starts_at, validate=validate)
else:
booking = Booking.from_postvars(postvars, starts_at, validate)
if submit_button in {'update', 'add'}:
if submit_button == 'update':
- if 'textarea' == edit_mode and 'delete' == ''.join([l.text_line for l in lines]).strip():
+ if 'textarea' == edit_mode and delete:
del db.bookings[index]
# if not creating new Booking, and date unchanged, keep it in place
elif booking.date == db.bookings[index].date:
return
db.write_db()
index = index if index >= 0 else len(db.bookings) - 1
- self.redirect(prefix + f'/ledger#{index}')
+ self.redirect(f'ledger#{index}')
def do_GET(self):
self.try_do(self.forward_gets)
self.send_HTML(page)
return
parsed_url = urlparse(self.path)
+ site = path_split(parsed_url.path)[1]
params = parse_qs(parsed_url.query)
- if parsed_url.path == f'{prefix}/balance':
+ if site == 'balance':
stop = params.get('until_after', [None])[0]
page = db.balance_as_html(stop)
- elif parsed_url.path == f'{prefix}/edit':
+ elif site == 'edit':
index = params.get('i', [-1])[0]
copy = params.get('copy', [0])[0]
page = db.edit(int(index), copy=bool(copy))