home · contact · privacy
Improve accounting scripts.
[misc] / ledger.py
index 3071df69d7f0b0f0595fc1c1db61f85234a188f4..6653af6e8e7f341cb80901f0aed83d9466c8c968 100755 (executable)
--- a/ledger.py
+++ b/ledger.py
@@ -365,7 +365,6 @@ class LedgerDB(PlomDB):
         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)
@@ -727,97 +726,91 @@ class LedgerHandler(PlomHandler):
         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)