home · contact · privacy
Add todo tracker.
[misc] / plomlib.py
index 9dac71284a5c990514c0e2c89bbd6f8a16e8a55d..739b00f774430cb62d41eb574168eda64cb8c948 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):
@@ -27,6 +27,9 @@ class PlomDB:
     def backup(self):
         import shutil
         from datetime import datetime, timedelta
+        if not os.path.exists(self.db_file):
+            return
+
         # collect modification times of numbered .bak files
         bak_prefix = f'{self.db_file}.bak.'
         backup_dates = []
@@ -77,28 +80,17 @@ class PlomDB:
         self.unlock()
 
 
-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.")
-
+class PlomHandler(BaseHTTPRequestHandler): 
+    homepage = '/'
+    html_head = '<!DOCTYPE html>\n<html>\n<meta charset="UTF-8">'
+    html_foot = '</body>\n</html>'
+    
     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"))
+        self.wfile.write(bytes(f'{self.html_head}\n{html}\n{self.html_foot}', 'utf-8'))
 
     def send_code_and_headers(self, code, headers=[]):
         self.send_response(code)
@@ -106,10 +98,20 @@ class PlomServer(BaseHTTPRequestHandler):
             self.send_header(fieldname, content)
         self.end_headers()
 
+    def redirect(self, url='/'):
+        self.send_code_and_headers(302, [('Location', url)])
+
+    def try_do(self, do_method):
+        try:
+            do_method() 
+        except PlomException as e:
+            self.fail_400(e)
+
+
 
-def run_server(port, server_class):
+def run_server(port, handler_class):
     from http.server import HTTPServer
-    webServer = HTTPServer(('localhost', port), server_class)
+    webServer = HTTPServer(('localhost', port), handler_class)
     print(f"Server started http://localhost:{port}")
     try:
         webServer.serve_forever()