]> git.phdru.name Git - xsetbg.git/blob - reload_db.py
Fix(DB): Fix column encoding
[xsetbg.git] / reload_db.py
1 #! /usr/bin/env python3
2 """Reload a dump into DB
3
4 This file is a part of XSetBg.
5
6 """
7
8 import sys
9 from sqlobject import SQLObjectNotFound
10 from sqlobject.sqlbuilder import Insert
11 from xsetbg_conf import xsetbg_conf
12 from xsetbg_db import recreate_db, SQLiteMassInsert
13
14
15 def convert_str(s):
16     if s == "None":
17         return None
18     else:
19         return int(float(s))
20
21
22 dump_file = open(sys.argv[1], 'r',
23                  encoding=xsetbg_conf.get("images", "fs_encoding"))
24 xsetbg_db = recreate_db()
25 count_new = count_old = count_updated = 0
26
27 with SQLiteMassInsert() as txn:
28     for line in dump_file:
29         id, timestamp, filename = line.strip().split(None, 2)
30         id = convert_str(id)
31         timestamp = convert_str(timestamp)
32         try:
33             if id:
34                 row = xsetbg_db.get(id)
35             else:
36                 row = xsetbg_db.byFull_name(filename)
37         except SQLObjectNotFound:
38             values = {'last_shown': timestamp,
39                       'full_name': filename.encode('utf-8')}
40             if id:
41                 values['id'] = id
42             query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values))
43             txn.query(query)
44             count_new += 1
45         else:
46             assert id is None or row.id == id
47             if row.last_shown is not None:
48                 assert row.last_shown == timestamp
49             if row.full_name == filename:
50                 count_old += 1
51             else:
52                 row.full_name = filename
53                 count_updated += 1
54
55 dump_file.close()
56
57 print("New images:", count_new)
58 print("Existing images:", count_old)
59 print("Updated images:", count_updated)