home · contact · privacy
Add foreign key restraints, expand and fix tests, add deletion and forking.
[misc] / calories.py
index 88165b8da1e0be4a9447a9562f81041335cbee1f..9951ce5c98896ef91319282143b2925b657ec280 100644 (file)
@@ -2,7 +2,7 @@ import os
 import json
 import datetime
 import jinja2
-from plomlib import PlomDB, PlomException, run_server, run_server, PlomServer
+from plomlib import PlomDB, PlomException, run_server, PlomHandler 
 
 db_path = '/home/plom/org/calories_db.json'
 
@@ -16,7 +16,7 @@ td.number { text-align: right; }
 input[type="number"] { text-align: right; }
 </style>
 <body>
-<form action="/" method="POST">
+<form action="{{homepage}}" method="POST">
 <td><input name="update" type="submit" value="update" /></td>
 <table>
 <tr><th>eatable</th><th>unit count</th><th>unit weight (g)</th><th>calories</th><th>sugar (g)</th></tr>
@@ -224,9 +224,18 @@ class CaloriesDB(PlomDB):
         self.write_text_to_db(json.dumps(self.to_dict()))
 
 
-class CaloriesServer(PlomServer):
+class ConsumptionsHandler(PlomHandler):
+
+    def app_init(self, handler):
+        default_path = '/consumptions'
+        handler.add_route('GET', default_path, self.show_db) 
+        handler.add_route('POST', default_path, self.write_db) 
+        return 'consumptions', default_path 
 
     def do_POST(self):
+        self.try_do(self.write_db)
+
+    def write_db(self):
         from uuid import uuid4
         from urllib.parse import parse_qs
         length = int(self.headers['content-length'])
@@ -242,8 +251,7 @@ class CaloriesServer(PlomServer):
                 to_delete += [target]
         i = 0
         if 'eatable_uuid' in postvars.keys():
-            for uuid_encoded in postvars['eatable_uuid']:
-                uuid = uuid_encoded
+            for uuid in postvars['eatable_uuid']:
                 if uuid not in to_delete:
                     e = Eatable(decode("title", i, False), decode("cals", i), decode("sugar_g", i), decode("standard_g", i), decode("comments", i, False))
                     db.add_eatable(uuid, e)
@@ -281,15 +289,15 @@ class CaloriesServer(PlomServer):
                 default_slots -= 1
                 if (default_slots <= 0):
                     break
-        try:
-            db.write()
-            self.redirect()
-        except PlomException as e:
-            self.fail_400(e) 
+        db.write()
+        homepage = self.apps['consumptions'] if hasattr(self, 'apps') else self.homepage
+        self.redirect(homepage)
 
     def do_GET(self):
+        self.try_do(self.show_db)
+
+    def show_db(self):
         db = CaloriesDB()
-        # eatables = ""
         eatable_rows = []
         for k,v in db.eatables.items():
             eatable_rows += [{
@@ -320,7 +328,9 @@ class CaloriesServer(PlomServer):
                 'cals': f'{day.calories:.1f}',
                 'sugar': f'{day.sugar_g:.1f}',
             }]
+        homepage = self.apps['consumptions'] if hasattr(self, 'apps') else self.homepage
         page = jinja2.Template(tmpl).render(
+                homepage = homepage,
                 db=db,
                 days=day_rows,
                 consumptions=consumption_rows,
@@ -330,4 +340,4 @@ class CaloriesServer(PlomServer):
 
 
 if __name__ == "__main__":  
-    run_server(server_port, CaloriesServer)
+    run_server(server_port, ConsumptionsHandler)