]>
jfr.im git - irc/rizon/acid.git/blob - pyva/src/main/python/pseudoclient/sys_options.py
1 from collection
import *
3 from istring
import istring
5 class OptionManager(InvariantCollection
, Subsystem
):
6 def __init__(self
, module
):
7 InvariantCollection
.__init
__(self
)
8 Subsystem
.__init
__(self
, module
, self
, 'options')
11 self
.cursor
.execute("CREATE TABLE IF NOT EXISTS " + module
.name
+ "_options (name VARCHAR(51) NOT NULL, value TEXT, PRIMARY KEY (name))")
12 self
.cursor
.execute("SELECT name, value FROM " + module
.name
+ "_options")
13 self
.deleted_values
= []
15 for row
in self
.cursor
.fetchall():
16 name
= istring(row
[0])
17 value
= istring(row
[1])
18 self
[name
] = [name
, value
, False]
20 def get(self
, name
, type, default
= None):
23 self
[name
] = [name
, istring(default
), True]
27 return type(self
[name
][1])
29 def set(self
, name
, value
):
30 new_value
= istring(value
)
33 self
[name
] = [name
, new_value
, True]
35 if (self
[name
][1] != new_value
):
36 self
[name
][1]= new_value
41 def clear(self
, name
):
45 self
.deleted_values
.append(name
)
51 deleted_values
= [str(value
) for value
in self
.deleted_values
if value
not in self
]
52 changed_values
= [(str(value
[0]), str(value
[1])) for value
in self
.list_all() if value
[2]]
54 if len(deleted_values
) > 0:
55 self
.cursor
.executemany("DELETE FROM " + self
.module
.name
+ "_options WHERE name = %s", deleted_values
)
56 self
.module
.elog
.commit('Deleted %d options from database.' % len(deleted_values
))
58 if len(changed_values
) > 0:
59 self
.cursor
.executemany("REPLACE INTO " + self
.module
.name
+ "_options (name, value) VALUES (%s, %s)", changed_values
)
60 self
.module
.elog
.commit('Committed %d options to database.' % len(changed_values
))
62 self
.deleted_values
= []
64 for value
in self
.list_all():
66 except Exception, err
:
67 self
.module
.elog
.error('Option commit failed: @b%s@b' % err
)