home · contact · privacy
Add script to unify all accounting servers into one.
[misc] / unite.py
diff --git a/unite.py b/unite.py
new file mode 100644 (file)
index 0000000..14a7e3c
--- /dev/null
+++ b/unite.py
@@ -0,0 +1,62 @@
+from plomlib import PlomException, run_server, PlomHandler 
+from urllib.parse import urlparse
+from income_progress_bars import IncomeProgressHandler 
+from calories import ConsumptionsHandler 
+from ledger import LedgerHandler 
+server_port = 8084
+
+
+class UnitedRequestHandler(PlomHandler):
+    routes = {'GET':{}, 'POST':{}}
+    apps = {}
+
+    @classmethod
+    def register_app(cls, app):
+        name, data = app.app_init(app, cls)
+        cls.apps[name] = data
+
+    @classmethod
+    def add_route(cls, method, path, service):
+        if not method in cls.routes.keys():
+            cls.routes[method] = {}
+        cls.routes[method][path] = service 
+
+    def do_POST(self):
+        try: 
+            parsed_url = urlparse(self.path)
+            path_toks = parsed_url.path.split('/')
+            while len(path_toks) > 0:
+                target_path = '/'.join(path_toks)
+                if target_path in self.routes['POST'].keys(): 
+                    self.routes['POST'][target_path](self)
+                    return 
+                path_toks.pop()
+            page = 'nothing to post?'
+            self.send_HTML(page)
+        except PlomException as e:
+            self.fail_400(e)
+
+    def do_GET(self):
+        try: 
+            parsed_url = urlparse(self.path)
+            path_toks = parsed_url.path.split('/')
+            while len(path_toks) > 0:
+                target_path = '/'.join(path_toks)
+                print(target_path)
+                if target_path in self.routes['GET'].keys():                
+                    self.routes['GET'][target_path](self)
+                    return 
+                path_toks.pop()
+            page = 'hi there!<br />'
+            for route in self.routes['GET']:
+                page += f'<a href="{route}"/>{route}</a><br />'
+            self.send_HTML(page)
+        except PlomException as e:
+            self.fail_400(e)
+
+
+if __name__ == "__main__":  
+    UnitedRequestHandler.register_app(IncomeProgressHandler)
+    UnitedRequestHandler.register_app(ConsumptionsHandler)
+    UnitedRequestHandler.register_app(LedgerHandler)
+    run_server(server_port, UnitedRequestHandler)