--- /dev/null
+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)