__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
+from xsetbg_db import recreate_db, SQLiteMassInsert
fs_encoding = xsetbg_conf.get("images", "fs_encoding")
dump_file = open(sys.argv[1], 'rU')
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.close()
+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)
+ 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
-connection.query("VACUUM %s" % xsetbg_db.sqlmeta.table)
+dump_file.close()
return xsetbg_db
+class SQLiteMassInsert(object):
+ def __init__(self):
+ self.connection = sqlhub.processConnection
+
+ def __enter__(self):
+ connection = self.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
+ return txn
+
+ def __exit__(self, *args, **kw):
+ sqlhub.processConnection.commit()
+ connection = sqlhub.processConnection = self.connection
+ connection.query("VACUUM %s" % xsetbg_db.sqlmeta.table)
+
+
db_dirs = []
try:
xsetbg_db_path = xsetbg_conf.get('xsetbg', 'database')