]> git.phdru.name Git - xsetbg.git/blob - reload_db.py
Update data
[xsetbg.git] / reload_db.py
1 #! /usr/bin/env python
2 """Reload a dump into DB
3
4 This file is a part of XSetBg.
5
6 """
7
8 __author__ = "Oleg Broytman <phd@phdru.name>"
9 __copyright__ = "Copyright (C) 2007-2015 PhiloSoft Design"
10 __license__ = "GNU GPL"
11
12 import sys
13 from sqlobject import sqlhub, SQLObjectNotFound
14 from sqlobject.sqlbuilder import Insert
15 from xsetbg_conf import xsetbg_conf
16 from xsetbg_db import recreate_db
17
18 fs_encoding = xsetbg_conf.get("images", "fs_encoding")
19 dump_file = open(sys.argv[1], 'rU')
20 xsetbg_db = recreate_db()
21
22 def convert_str(s):
23     if s == "None":
24         return None
25     else:
26         return int(float(s))
27
28 connection = xsetbg_db._connection
29
30 connection.query("PRAGMA synchronous=OFF")
31 connection.query("PRAGMA count_changes=OFF")
32 connection.query("PRAGMA journal_mode=MEMORY")
33 connection.query("PRAGMA temp_store=MEMORY")
34
35 txn = connection.transaction()
36 sqlhub.processConnection = txn
37
38 for line in dump_file:
39     id, timestamp, filename = line.strip().split(None, 2)
40     id = convert_str(id)
41     timestamp = convert_str(timestamp)
42     if fs_encoding != 'utf-8':
43         filename = filename.decode(fs_encoding).encode('utf-8')
44     try:
45         row = xsetbg_db.byFull_name(filename)
46     except SQLObjectNotFound:
47         values = {'last_shown': timestamp, 'full_name': filename}
48         if id:
49             values['id'] = id
50         query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values))
51         txn.query(query)
52     else:
53         assert row.id == id
54         assert row.last_shown == timestamp
55
56 txn.commit()
57 sqlhub.processConnection = connection
58
59 dump_file.close()