Browse Source

added the database cleanup app

Pat Beirne 1 year ago
parent
commit
f086eba491
1 changed files with 82 additions and 0 deletions
  1. 82 0
      cleanup.py

+ 82 - 0
cleanup.py

@@ -0,0 +1,82 @@
+#!/usr/bin/python3
+
+""" Maintenance up the database used by dirnotes and c_dirnotes
+- view the history of file comments
+- delete the history of file comments
+"""
+
+import sqlite3, os, sys
+import logging
+VERSION = "0.1"
+
+dbname = "~/.dirnotes.db"
+dbname = os.path.expanduser(dbname)
+
+def main(summary, view, delete):
+  try:
+    d = sqlite3.connect(dbname)
+  except sqlite3.OperationalError:
+    print("database not found, or permission-locked; cleanup aborted")
+    return
+  c = d.cursor()
+  if summary:
+    c = d.cursor()
+    total,distinct = c.execute("select count(name),count(distinct name) from dirnotes;").fetchone()
+    print(f"this database has entries for {distinct} files, and {total-distinct} history entries")
+
+  if view or delete:
+    c.execute("select distinct name from dirnotes;")
+    for f in c:
+      # note, f is a tuple of (name,)
+      c1 = d.cursor()
+      if view:
+        history = c1.execute("select comment_date,author,comment from dirnotes where name=? order by comment_date desc",f).fetchall()
+        if len(history)>1:
+          print(f"filename: {f[0]} has a history of comments:")
+          first = True
+          for lin in history:
+            print(f"{'->' if first else '  '}  date: {lin[0]} author: {lin[1]}\n    comment: {lin[2]}")
+            first = False
+
+      if delete:
+        most_recent = c1.execute("select comment_date from dirnotes where name=? order by comment_date desc",f).fetchone()[0]
+        logging.info(f"working on file: {f} with most-recent-date of {most_recent}")
+        c1.execute("delete from dirnotes where name=? and comment_date <> ?",(f[0],most_recent))
+
+  if delete:
+    total,distinct = c.execute("select count(name),count(distinct name) from dirnotes;").fetchone()
+    print(f"this database has been cleaned to {distinct} files, and {total-distinct} history entries")
+    d.commit()
+  d.close()
+
+
+view = False
+delete = False
+summary = True  # default
+
+if __name__ == "__main__":
+  logging.basicConfig(filename="/tmp/dirnotes_clear.log", level=logging.DEBUG)
+  logging.info("starting the db mainenance tool")
+  if len(sys.argv)>1:
+    if "-h" in sys.argv or "--help" in sys.argv:
+      print(f"Usage: {sys.argv[0]}    maintenance for the database used by dirnotes & c_dirnotes")
+      print("      -d     delete comment history")
+      print("      -s     view comment summary")
+      print("      -v     view comment history")
+      sys.exit(1)
+    if "-v" in sys.argv:
+      view = True
+    if "-s" in sys.argv:
+      summary = True
+    if "-d" in sys.argv:
+      delete = True
+  if delete:
+    print("Cleanup of the dirnotes database located at ~/.dirnotes.db")
+    c = input("Proceed? (Y/N)")
+    if c in ("yY"):
+      main(summary, view, delete)
+    else:
+      print("nothing done")
+  else:
+    main(summary, view, delete)
+