From a9abf1eba0d1fcc059a7bbd84c337e9e4bf6ce00 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Thu, 1 Oct 2020 21:53:39 +0300 Subject: [PATCH] Add support for db export --- kdoorweb/kdoorweb/__main__.py | 4 ++++ kdoorweb/kdoorweb/db.py | 27 ++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/kdoorweb/kdoorweb/__main__.py b/kdoorweb/kdoorweb/__main__.py index 3830a60..b6f7af4 100644 --- a/kdoorweb/kdoorweb/__main__.py +++ b/kdoorweb/kdoorweb/__main__.py @@ -21,6 +21,10 @@ if __name__ == "__main__": from .db import import_ookean import_ookean() sys.exit(1) + elif cmd == "export_db": + from .db import export_db + export_db() + sys.exit(1) else: try: port = int(sys.argv[1]) diff --git a/kdoorweb/kdoorweb/db.py b/kdoorweb/kdoorweb/db.py index dd34a3f..4d94acc 100644 --- a/kdoorweb/kdoorweb/db.py +++ b/kdoorweb/kdoorweb/db.py @@ -193,11 +193,18 @@ class DB: for user in unmatched: print(f"User {user}") - - - def export_db(self, json_file): - for user in self.list_users(): - pass + def export_db(self): + users = {} + cur = self.db.execute("select id, distinguished_name, user, full_name, email, disabled, admin from users") + for user in cur.fetchall(): + users[user["full_name"]] = dict(user) + del users[user["full_name"]]["id"] + cards_cur = self.db.execute( + "select card_uid, name, created, disabled from keycards where user_id = ?", + (user["id"],) + ) + users[user["full_name"]]["keycards"] = [dict(keycard) for keycard in cards_cur.fetchall()] + return users def initdb(): @@ -222,5 +229,15 @@ def import_ookean(): db.import_ookean("../contrib/ookean_cards.json") +def export_db(): + dbfile = "kdoorweb.sqlite" + db = DB(dbfile) + import sys + exports = db.export_db() + json.dump(exports, sys.stdout, indent=2) + sys.stdout.write("\n") + + + if __name__ == "__main__": initdb()