X-Git-Url: https://git.phdru.name/?p=xsetbg.git;a=blobdiff_plain;f=reload_db.py;h=3c9c56e64ef3d26ca6fcc0f3cd9f9589309fff4d;hp=8d8b0df815142eab3245485dae832a77574938ea;hb=HEAD;hpb=199f6beec9c9bf6eb08446a4c956ff709aef8fa7 diff --git a/reload_db.py b/reload_db.py index 8d8b0df..c12607a 100755 --- a/reload_db.py +++ b/reload_db.py @@ -1,23 +1,15 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Reload a dump into DB This file is a part of XSetBg. """ -__author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2007-2015 PhiloSoft Design" -__license__ = "GNU GPL" - import sys -from sqlobject import sqlhub, SQLObjectNotFound +from sqlobject import SQLObjectNotFound from sqlobject.sqlbuilder import Insert from xsetbg_conf import xsetbg_conf -from xsetbg_db import recreate_db - -fs_encoding = xsetbg_conf.get("images", "fs_encoding") -dump_file = open(sys.argv[1], 'rU') -xsetbg_db = recreate_db() +from xsetbg_db import recreate_db, SQLiteMassInsert def convert_str(s): @@ -26,35 +18,42 @@ def convert_str(s): else: return int(float(s)) -connection = xsetbg_db._connection - -connection.query("PRAGMA synchronous=OFF") -connection.query("PRAGMA count_changes=OFF") -connection.query("PRAGMA journal_mode=MEMORY") -connection.query("PRAGMA temp_store=MEMORY") - -txn = connection.transaction() -sqlhub.processConnection = txn - -for line in dump_file: - id, timestamp, filename = line.strip().split(None, 2) - id = convert_str(id) - timestamp = convert_str(timestamp) - if fs_encoding != 'utf-8': - filename = filename.decode(fs_encoding).encode('utf-8') - try: - row = xsetbg_db.byFull_name(filename) - except SQLObjectNotFound: - values = {'last_shown': timestamp, 'full_name': filename} - if id: - values['id'] = id - query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values)) - txn.query(query) - else: - assert id is None or row.id == id - assert row.last_shown == timestamp -txn.commit() +dump_file = open(sys.argv[1], 'r', + encoding=xsetbg_conf.get("images", "fs_encoding")) +xsetbg_db = recreate_db() +count_new = count_old = count_updated = 0 + +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) + 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 + dump_file.close() -connection.query("VACUUM %s" % xsetbg_db.sqlmeta.table) +print("New images:", count_new) +print("Existing images:", count_old) +print("Updated images:", count_updated)