home · contact · privacy
Refactor all accounting scripts.
[misc] / plomlib.py
index 9dac71284a5c990514c0e2c89bbd6f8a16e8a55d..92bfb8535d7604bc1e47f0595cc68fd28e433283 100644 (file)
@@ -9,10 +9,10 @@ class PlomException(Exception):
 class PlomDB:
 
     def __init__(self, db_name):
-        self.db_file = db_name + ".json"
-        self.lock_file = db_name+ ".lock"
+        self.db_file = db_name
+        self.lock_file = db_name+ '.lock'
         if os.path.exists(self.db_file):
-            with open(self.db_file, "r") as f:
+            with open(self.db_file, 'r') as f:
                 self.read_db_file(f)
 
     def lock(self):
@@ -78,27 +78,24 @@ class PlomDB:
 
 
 class PlomServer(BaseHTTPRequestHandler): 
-    header = ''
-    footer = ''
-
-    def run(self, port):
-        from http.server import HTTPServer
-        webServer = HTTPServer(('localhost', port), type(self))
-        print(f"Server started http://localhost:{port}")
-        try:
-            webServer.serve_forever()
-        except KeyboardInterrupt:
-            pass
-        webServer.server_close()
-        print("Server stopped.")
+    
+    def __init__(self, *args, **kwargs):
+        self.html_head = ['<!DOCTYPE html>\n<html>\n<meta charset="UTF-8">']
+        self.html_foot = ['</body>\n</html>']
+        self.pre_init()
+        super().__init__(*args, **kwargs)
+
+    def pre_init(self):
+        pass
 
     def fail_400(self, e):
-        page = f'{self.header}ERROR: {e}{self.footer}'
-        self.send_HTML(page, 400)
+        self.send_HTML(f'ERROR: {e}', 400)
 
     def send_HTML(self, html, code=200):
         self.send_code_and_headers(code, [('Content-type', 'text/html')])
-        self.wfile.write(bytes(html, "utf-8"))
+        header = '\n'.join(self.html_head)
+        footer = '\n'.join(self.html_foot)
+        self.wfile.write(bytes(f'{header}\n{html}\n{footer}', 'utf-8'))
 
     def send_code_and_headers(self, code, headers=[]):
         self.send_response(code)
@@ -106,6 +103,10 @@ class PlomServer(BaseHTTPRequestHandler):
             self.send_header(fieldname, content)
         self.end_headers()
 
+    def redirect(self, url='/'):
+        self.send_code_and_headers(302, [('Location', url)])
+
+
 
 def run_server(port, server_class):
     from http.server import HTTPServer