X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=reload_db.py;h=ffa0013b7b2803f7e850c8de6b62fb2dac0b74f8;hb=080d6169f03836330b355e5304e51122d7956c11;hp=975876a53d4e515fc1733a7b4d1a5dc5e6ee29a9;hpb=8b74c08eda8ee4d62db000571a6df4ec4d59186a;p=xsetbg.git diff --git a/reload_db.py b/reload_db.py index 975876a..ffa0013 100755 --- a/reload_db.py +++ b/reload_db.py @@ -1,29 +1,60 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Reload a dump into DB This file is a part of XSetBg. """ -__version__ = "$Revision: 17 $"[11:-2] -__revision__ = "$Id: print_all.py 17 2007-06-14 10:37:08Z phd $"[5:-2] -__date__ = "$Date: 2007-06-14 14:37:08 +0400 (Thu, 14 Jun 2007) $"[7:-2] +import sys +from sqlobject import SQLObjectNotFound +from sqlobject.sqlbuilder import Insert +from xsetbg_conf import xsetbg_conf +from xsetbg_db import recreate_db, SQLiteMassInsert + + +def convert_str(s): + if s == "None": + return None + else: + return int(float(s)) + + +dump_file = open(sys.argv[1], 'r') +xsetbg_db = recreate_db() +count_new = count_old = count_updated = 0 +fs_encoding = xsetbg_conf.get("images", "fs_encoding") + +with SQLiteMassInsert() as txn: + for line in dump_file: + id, timestamp, filename = line.strip().split(None, 2) + id = convert_str(id) + timestamp = convert_str(timestamp) + filename = filename.decode(fs_encoding) + try: + if id: + row = xsetbg_db.get(id) + else: + row = xsetbg_db.byFull_name(filename) + except SQLObjectNotFound: + values = {'last_shown': timestamp, + 'full_name': filename.encode('utf-8')} + if id: + values['id'] = id + query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values)) + txn.query(query) + count_new += 1 + else: + assert id is None or row.id == id + if row.last_shown is not None: + assert row.last_shown == timestamp + if row.full_name == filename: + count_old += 1 + else: + row.full_name = filename + count_updated += 1 -__author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2007-2010 PhiloSoft Design" -__license__ = "GNU GPL" - -import sys, os, shelve - -xsetbg_dir = os.path.join(os.environ["HOME"], "lib", "xsetbg") -os.chdir(xsetbg_dir) - -global_db_name = "xsetbg.db" -dump_file = open(sys.argv[1], 'rU') - -global_db = shelve.open(global_db_name, flag='n') -for line in dump_file: - timestamp, filename = line.strip().split(None, 1) - global_db[filename] = float(timestamp) -global_db.close() dump_file.close() + +print("New images:", count_new) +print("Existing images:", count_old) +print("Updated images:", count_updated)