]>
Commit | Line | Data |
---|---|---|
685e346e A |
1 | from collection import *\r |
2 | from sys_base import *\r | |
3 | from istring import istring\r | |
4 | \r | |
5 | class 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 |