Do not keep reloading pyhtonfile, make it stateful
CustomConfigParser.getlocaleval() loads "pythonfile" at each call. Besides unnecessary IO, in case that dynamic_folderfilter is true, the code in "pythonfile" would behave stateless, since it is re-initialized at each call of getlocaleval(), i.e., at every sync. Fix that by keeping a singleton copy of localeval in CustomConfigParser after the first call of getlocaleval(). Signed-off-by: Stefan Huber <shuber@sthu.org> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
parent
4bc766035c
commit
561a3d4329
@ -24,6 +24,10 @@ except ImportError: #python3
|
|||||||
from offlineimap.localeval import LocalEval
|
from offlineimap.localeval import LocalEval
|
||||||
|
|
||||||
class CustomConfigParser(SafeConfigParser):
|
class CustomConfigParser(SafeConfigParser):
|
||||||
|
def __init__(self):
|
||||||
|
SafeConfigParser.__init__(self)
|
||||||
|
self.localeval = None
|
||||||
|
|
||||||
def getdefault(self, section, option, default, *args, **kwargs):
|
def getdefault(self, section, option, default, *args, **kwargs):
|
||||||
"""Same as config.get, but returns the value of `default`
|
"""Same as config.get, but returns the value of `default`
|
||||||
if there is no such option specified."""
|
if there is no such option specified."""
|
||||||
@ -91,13 +95,19 @@ class CustomConfigParser(SafeConfigParser):
|
|||||||
return metadatadir
|
return metadatadir
|
||||||
|
|
||||||
def getlocaleval(self):
|
def getlocaleval(self):
|
||||||
|
# We already loaded pythonfile, so return this copy.
|
||||||
|
if self.localeval is not None:
|
||||||
|
return self.localeval
|
||||||
|
|
||||||
xforms = [os.path.expanduser, os.path.expandvars]
|
xforms = [os.path.expanduser, os.path.expandvars]
|
||||||
if self.has_option("general", "pythonfile"):
|
if self.has_option("general", "pythonfile"):
|
||||||
path = self.get("general", "pythonfile")
|
path = self.get("general", "pythonfile")
|
||||||
path = self.apply_xforms(path, xforms)
|
path = self.apply_xforms(path, xforms)
|
||||||
else:
|
else:
|
||||||
path = None
|
path = None
|
||||||
return LocalEval(path)
|
|
||||||
|
self.localeval = LocalEval(path)
|
||||||
|
return self.localeval
|
||||||
|
|
||||||
def getsectionlist(self, key):
|
def getsectionlist(self, key):
|
||||||
"""Returns a list of sections that start with (str) key + " ".
|
"""Returns a list of sections that start with (str) key + " ".
|
||||||
|
Loading…
Reference in New Issue
Block a user