return self.write_lines_in_total_lines_at(self.real_lines, start_at, lines)
def update(self, start, end, lines, date):
- print("DEBUG update", date)
total_lines = self.real_lines[:start] + self.real_lines[end:]
n_original_lines = end - start
start_at = len(total_lines)
return 'ledger', default_path
def do_POST(self):
- self.forward_posts()
+ self.try_do(self.forward_posts)
def forward_posts(self):
- try:
- prefix = self.apps['ledger'] if hasattr(self, 'apps') else ''
- parsed_url = urlparse(self.path)
- length = int(self.headers['content-length'])
- postvars = parse_qs(self.rfile.read(length).decode(), keep_blank_values=1)
- print("DEBUG", postvars['start'], postvars['end'])
- start = int(postvars['start'][0])
- end = int(postvars['end'][0])
- db = LedgerDB(prefix)
- add_empty_line = None
- lines = []
- # get inputs
- if prefix + '/add_structured' == parsed_url.path and not 'revert' in postvars.keys():
- lines, add_empty_line = db.booking_lines_from_postvars(postvars)
- elif prefix + '/add_free' == parsed_url.path and not 'revert' in postvars.keys():
- lines = postvars['booking'][0].splitlines()
- # validate where appropriate
- if ('save' in postvars.keys()) or ('check' in postvars.keys()):
- _, _ = parse_lines(lines)
- # if saving, process where to and where to redirect after
- if 'save' in postvars.keys():
- last_date = str(datetime.now())[:10]
- if len(db.bookings) > 0:
- last_date = db.bookings[-1].date_string
- target_date = last_date[:]
- first_line_tokens = lines[0].split() if len(lines) > 0 else ''
- first_token = first_line_tokens[0] if len(first_line_tokens) > 0 else ''
- try:
- datetime.strptime(first_token, '%Y-%m-%d')
- target_date = first_token
- except ValueError:
- pass
- if start == end == 0:
- start = db.insert_at_date(lines, target_date)
- nth = db.get_nth_for_booking_of_start_line(start)
- else:
- new_start = db.update(start, end, lines, target_date)
- nth = db.get_nth_for_booking_of_start_line(new_start)
- if new_start > start:
- nth -= 1
- self.redirect(prefix + f'/#{nth}')
- # otherwise just re-build editing form
+ prefix = self.apps['ledger'] if hasattr(self, 'apps') else ''
+ parsed_url = urlparse(self.path)
+ length = int(self.headers['content-length'])
+ postvars = parse_qs(self.rfile.read(length).decode(), keep_blank_values=1)
+ print("DEBUG", postvars['start'], postvars['end'])
+ start = int(postvars['start'][0])
+ end = int(postvars['end'][0])
+ db = LedgerDB(prefix)
+ add_empty_line = None
+ lines = []
+ # get inputs
+ if prefix + '/add_structured' == parsed_url.path and not 'revert' in postvars.keys():
+ lines, add_empty_line = db.booking_lines_from_postvars(postvars)
+ elif prefix + '/add_free' == parsed_url.path and not 'revert' in postvars.keys():
+ lines = postvars['booking'][0].splitlines()
+ # validate where appropriate
+ if ('save' in postvars.keys()) or ('check' in postvars.keys()):
+ _, _ = parse_lines(lines)
+ # if saving, process where to and where to redirect after
+ if 'save' in postvars.keys():
+ last_date = str(datetime.now())[:10]
+ if len(db.bookings) > 0:
+ last_date = db.bookings[-1].date_string
+ target_date = last_date[:]
+ first_line_tokens = lines[0].split() if len(lines) > 0 else ''
+ first_token = first_line_tokens[0] if len(first_line_tokens) > 0 else ''
+ try:
+ datetime.strptime(first_token, '%Y-%m-%d')
+ target_date = first_token
+ except ValueError:
+ pass
+ if start == end == 0:
+ start = db.insert_at_date(lines, target_date)
+ nth = db.get_nth_for_booking_of_start_line(start)
else:
- if prefix + '/add_structured' == parsed_url.path:
- edit_content = db.add_structured(start, end, temp_lines=lines, add_empty_line=add_empty_line)
- else:
- edit_content = db.add_free(start, end)
- header = jinja2.Template(html_head).render(prefix=prefix)
- self.send_HTML(header + edit_content)
- except PlomException as e:
- self.fail_400(e)
+ new_start = db.update(start, end, lines, target_date)
+ nth = db.get_nth_for_booking_of_start_line(new_start)
+ if new_start > start:
+ nth -= 1
+ self.redirect(prefix + f'/#{nth}')
+ # otherwise just re-build editing form
+ else:
+ if prefix + '/add_structured' == parsed_url.path:
+ edit_content = db.add_structured(start, end, temp_lines=lines, add_empty_line=add_empty_line)
+ else:
+ edit_content = db.add_free(start, end)
+ header = jinja2.Template(html_head).render(prefix=prefix)
+ self.send_HTML(header + edit_content)
def do_GET(self):
- self.forward_gets()
+ self.try_do(self.forward_gets)
def forward_gets(self):
- try:
- prefix = self.apps['ledger'] if hasattr(self, 'apps') else ''
- parsed_url = urlparse(self.path)
- params = parse_qs(parsed_url.query)
- start = int(params.get('start', ['0'])[0])
- end = int(params.get('end', ['0'])[0])
- db = LedgerDB(prefix=prefix)
- if parsed_url.path == prefix + '/balance':
- stop = params.get('stop', [None])[0]
- page = db.balance_as_html(stop)
- elif parsed_url.path == prefix + '/add_free':
- page = db.add_free(start, end)
- elif parsed_url.path == prefix + '/add_structured':
- page = db.add_structured(start, end)
- elif parsed_url.path == prefix + '/copy_free':
- page = db.add_free(start, end, copy=True)
- elif parsed_url.path == prefix + '/copy_structured':
- page = db.add_structured(start, end, copy=True)
- elif parsed_url.path == prefix + '/move_up':
- nth = db.move_up(start, end)
- self.redirect(prefix + f'/#{nth}')
- return
- elif parsed_url.path == prefix + '/move_down':
- nth = db.move_down(start, end)
- self.redirect(prefix + f'/#{nth}')
- return
- else:
- page = db.ledger_as_html()
- header = jinja2.Template(html_head).render(prefix=prefix)
- self.send_HTML(header + page)
- except PlomException as e:
- self.fail_400(e)
+ prefix = self.apps['ledger'] if hasattr(self, 'apps') else ''
+ parsed_url = urlparse(self.path)
+ params = parse_qs(parsed_url.query)
+ start = int(params.get('start', ['0'])[0])
+ end = int(params.get('end', ['0'])[0])
+ db = LedgerDB(prefix=prefix)
+ if parsed_url.path == prefix + '/balance':
+ stop = params.get('stop', [None])[0]
+ page = db.balance_as_html(stop)
+ elif parsed_url.path == prefix + '/add_free':
+ page = db.add_free(start, end)
+ elif parsed_url.path == prefix + '/add_structured':
+ page = db.add_structured(start, end)
+ elif parsed_url.path == prefix + '/copy_free':
+ page = db.add_free(start, end, copy=True)
+ elif parsed_url.path == prefix + '/copy_structured':
+ page = db.add_structured(start, end, copy=True)
+ elif parsed_url.path == prefix + '/move_up':
+ nth = db.move_up(start, end)
+ self.redirect(prefix + f'/#{nth}')
+ return
+ elif parsed_url.path == prefix + '/move_down':
+ nth = db.move_down(start, end)
+ self.redirect(prefix + f'/#{nth}')
+ return
+ else:
+ page = db.ledger_as_html()
+ header = jinja2.Template(html_head).render(prefix=prefix)
+ self.send_HTML(header + page)