1
# gozerbot/persiststate.py
5
""" persistent state classes """
7
__copyright__ = 'this file is in the public domain'
9
from gozerbot.generic import calledfrom
10
from gozerbot.persist import Persist
11
from gozerbot.datadir import datadir
14
class PersistState(Persist):
16
""" base persitent state class """
18
def __init__(self, filename):
19
Persist.__init__(self, filename, {})
20
self.types = dict((i, type(j)) for i, j in self.data.iteritems())
22
def __getitem__(self, key):
23
""" get state item """
26
def __setitem__(self, key, value):
27
""" set state item """
28
self.data[key] = value
30
def define(self, key, value):
31
""" define a state item """
32
if not self.data.has_key(key) or type(value) != self.types[key]:
33
if type(value) == types.StringType:
34
value = unicode(value)
35
if type(value) == types.IntType:
37
self.data[key] = value
39
class PlugState(PersistState):
41
""" state for plugins """
44
PersistState.__init__(self, datadir + os.sep + calledfrom(sys._getframe()))
46
class UserState(PersistState):
48
""" state for users """
50
def __init__(self, username):
51
PersistState.__init__(self, datadir + os.sep + 'userstates' + os.sep + \