stop using shelve, it cannot work when upgrading python version. Fixes #6988

This commit is contained in:
Yann Leboulanger 2011-10-10 16:43:22 +02:00
parent 4ab2a6596b
commit c0330a8685
1 changed files with 42 additions and 7 deletions

View File

@ -32,6 +32,9 @@ from common import gajim
from plugins.helpers import log_calls, log
from plugins.gui import GajimPluginConfigDialog
import logging
log = logging.getLogger('gajim.p.plugin')
class GajimPlugin(object):
'''
@ -191,17 +194,15 @@ class GajimPlugin(object):
def deactivate(self):
pass
import shelve
import UserDict
import cPickle
class GajimPluginConfig(UserDict.DictMixin):
class GajimPluginConfig():
@log_calls('GajimPluginConfig')
def __init__(self, plugin):
self.plugin = plugin
self.FILE_PATH = os.path.join(gajim.PLUGINS_CONFIG_DIR,
self.plugin.short_name).decode('utf-8').encode(
locale.getpreferredencoding())
#log.debug('FILE_PATH = %s'%(self.FILE_PATH))
self.data = None
@log_calls('GajimPluginConfig')
@ -222,17 +223,51 @@ class GajimPluginConfig(UserDict.DictMixin):
del self.data[key]
self.save()
@log_calls('GajimPluginConfig')
def __contains__(self, key):
return key in self.data
def __iter__(self):
for k in self.data.keys():
yield k
def keys(self):
return self.data.keys()
@log_calls('GajimPluginConfig')
def save(self):
self.data.sync()
#log.debug(str(self.data))
fd = open(self.FILE_PATH, 'wb')
cPickle.dump(self.data, fd)
fd.close()
@log_calls('GajimPluginConfig')
def load(self):
self.data = shelve.open(self.FILE_PATH)
if os.path.isfile('qwe'):
fd = open(self.FILE_PATH, 'rb')
try:
self.data = cPickle.load(fd)
fd.close()
except EOFError:
fd.close()
try:
import shelve
s = shelve.open(self.FILE_PATH)
for (k, v) in s.iteritems():
self.data[k] = v
s.close()
self.save()
except:
log.warn('%s plugin config file not readable. Saving it as '
'%s and creating a new one' % (self.plugin.short_name,
self.FILE_PATH + '.bak'))
if os.path.exists(self.FILE_PATH + '.bak'):
os.rename(self.FILE_PATH, self.FILE_PATH + '.bak')
self.data = {}
self.save()
else:
self.data = {}
self.save()
class GajimPluginException(Exception):
pass