]> jfr.im git - irc/rizon/acid.git/blame - pyva/src/main/python/pseudoclient/sys_options.py
.gitignore: Ignore all pyva logs
[irc/rizon/acid.git] / pyva / src / main / python / pseudoclient / sys_options.py
CommitLineData
685e346e
A
1from collection import *\r
2from sys_base import *\r
3from istring import istring\r
4\r
5class OptionManager(InvariantCollection, Subsystem):\r
6 def __init__(self, module):\r
7 InvariantCollection.__init__(self)\r
8 Subsystem.__init__(self, module, self, 'options')\r
9 self.module = module\r
10 self.db_open()\r
11 self.cursor.execute("CREATE TABLE IF NOT EXISTS " + module.name + "_options (name VARCHAR(51) NOT NULL, value TEXT, PRIMARY KEY (name))")\r
12 self.cursor.execute("SELECT name, value FROM " + module.name + "_options")\r
13 self.deleted_values = []\r
14\r
15 for row in self.cursor.fetchall():\r
16 name = istring(row[0])\r
17 value = istring(row[1])\r
18 self[name] = [name, value, False]\r
19\r
20 def get(self, name, type, default = None):\r
21 if not name in self:\r
22 if default != None:\r
23 self[name] = [name, istring(default), True]\r
24\r
25 return default\r
26\r
27 return type(self[name][1])\r
28\r
29 def set(self, name, value):\r
30 new_value = istring(value)\r
31\r
32 if not name in self:\r
33 self[name] = [name, new_value, True]\r
34 else:\r
35 if (self[name][1] != new_value):\r
36 self[name][1]= new_value\r
37 self[name][2]= True\r
38\r
39 return value\r
40\r
41 def clear(self, name):\r
42 if not name in self:\r
43 return False\r
44\r
45 self.deleted_values.append(name)\r
46 del(self[name])\r
47 return True\r
48\r
49 def commit(self):\r
50 try:\r
51 deleted_values = [str(value) for value in self.deleted_values if value not in self]\r
52 changed_values = [(str(value[0]), str(value[1])) for value in self.list_all() if value[2]]\r
53\r
54 if len(deleted_values) > 0:\r
55 self.cursor.executemany("DELETE FROM " + self.module.name + "_options WHERE name = %s", deleted_values)\r
56 self.module.elog.commit('Deleted %d options from database.' % len(deleted_values))\r
57\r
58 if len(changed_values) > 0:\r
59 self.cursor.executemany("REPLACE INTO " + self.module.name + "_options (name, value) VALUES (%s, %s)", changed_values)\r
60 self.module.elog.commit('Committed %d options to database.' % len(changed_values))\r
61\r
62 self.deleted_values = []\r
63\r
64 for value in self.list_all():\r
65 value[2] = False\r
66 except Exception, err:\r
67 self.module.elog.error('Option commit failed: @b%s@b' % err)\r