summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/configHandler.py
diff options
context:
space:
mode:
authorSteven M. Gava <elguavas@python.net>2001-09-24 09:43:17 (GMT)
committerSteven M. Gava <elguavas@python.net>2001-09-24 09:43:17 (GMT)
commitc11ccf35f413e73ed02a0dfc945ed11b11b94fe0 (patch)
tree13db3a4102a19b17a0ace9f2ab3339fe02c70c23 /Lib/idlelib/configHandler.py
parentfa26f7cc3955dbeecbc616928e7b434ea99fa118 (diff)
downloadcpython-c11ccf35f413e73ed02a0dfc945ed11b11b94fe0.zip
cpython-c11ccf35f413e73ed02a0dfc945ed11b11b94fe0.tar.gz
cpython-c11ccf35f413e73ed02a0dfc945ed11b11b94fe0.tar.bz2
start of new config handling stuff
Diffstat (limited to 'Lib/idlelib/configHandler.py')
-rw-r--r--Lib/idlelib/configHandler.py173
1 files changed, 173 insertions, 0 deletions
diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py
new file mode 100644
index 0000000..86bc004
--- /dev/null
+++ b/Lib/idlelib/configHandler.py
@@ -0,0 +1,173 @@
+##---------------------------------------------------------------------------##
+##
+## idle - configuration data handler, based on and replacing IdleConfig.py
+## elguavas
+##
+##---------------------------------------------------------------------------##
+"""Provides access to configuration information"""
+
+import os
+import sys
+from ConfigParser import ConfigParser, NoOptionError, NoSectionError
+
+class IdleConfParser(ConfigParser):
+ """
+ A ConfigParser specialised for idle configuration file handling
+ """
+ def __init__(self, cfgFile, cfgDefaults=None):
+ """
+ cfgFile - string, fully specified configuration file name
+ """
+ self.file=cfgFile
+ ConfigParser.__init__(self,defaults=cfgDefaults)
+
+ def GetInt(self, section, option):
+ """
+ Get an option value as an integer
+ """
+ return self.Get(section, option, type='int')
+
+ def GetBool(self, section, option):
+ """
+ Get an option value as a boolean
+ """
+ return self.Get(section, option, type='bool')
+
+ def Get(self, section, option, raw=0, vars=None, default=None,
+ type=None):
+ """
+ Get an option value for given section/option or return default.
+ If type is specified, return as type.
+ """
+ if type=='bool': getVal=self.getbool
+ elif type=='int': getVal=self.getint
+ else: getVal=self.get
+ if self.has_option(section,option):
+ return getVal(section, option, raw, vars)
+ else:
+ return default
+
+ def GetSectionList(self):
+ # only provided for consistency
+ return self.sections()
+
+ def GetOptionList(self,section):
+ """
+ Get an option list for given section
+ """
+ if self.has_section:
+ return self.options(section)
+ else: #return a default value
+ return []
+
+ def GetHighlight(self, theme, element):
+ fore = self.Get(theme, element + "-foreground")
+ back = self.Get(theme, element + "-background")
+ style = self.Ge(theme, element + "-fontStyle", default='')
+ return {"fg": fore,
+ "bg": back,
+ "fStyle": style}
+
+ def Load(self):
+ """
+ Load the configuration file from disk
+ """
+ self.read(self.file)
+
+class IdleUserConfParser(IdleConfParser):
+ """
+ IdleConfigParser specialised for user configuration handling
+ """
+ def Save(self):
+ """
+ write loaded user configuration file back to disk
+ """
+ # this is a user config, it can be written to disk
+ self.write()
+
+class IdleConf:
+ """
+ holds config parsers for all idle config files:
+ default config files
+ (idle install dir)/config-main.def
+ (idle install dir)/config-extensions.def
+ (idle install dir)/config-highlight.def
+ (idle install dir)/config-keys.def
+ user config files
+ (user home dir)/.idlerc/idle-main.cfg
+ (user home dir)/.idlerc/idle-extensions.cfg
+ (user home dir)/.idlerc/idle-highlight.cfg
+ (user home dir)/.idlerc/idle-keys.cfg
+ """
+ def __init__(self):
+ self.defaultCfg={}
+ self.userCfg={}
+ self.cfg={}
+ self.CreateConfigHandlers()
+ self.LoadCfgFiles()
+ #self.LoadCfg()
+
+ def CreateConfigHandlers(self):
+ """
+ set up a dictionary config parsers for default and user
+ configurations respectively
+ """
+ #build idle install path
+ if __name__ != '__main__': # we were imported
+ idledir=os.path.dirname(__file__)
+ else: # we were exec'ed (for testing only)
+ idledir=os.path.abspath(sys.path[0])
+ #print idledir
+ try: #build user home path
+ userdir = os.environ['HOME'] #real home directory
+ except KeyError:
+ userdir = os.getcwd() #hack for os'es without real homedirs
+ userdir=os.path.join(userdir,'.idlerc')
+ #print userdir
+ if not os.path.exists(userdir):
+ os.mkdir(userdir)
+ configTypes=('main','extensions','highlight','keys')
+ defCfgFiles={}
+ usrCfgFiles={}
+ for cfgType in configTypes: #build config file names
+ defCfgFiles[cfgType]=os.path.join(idledir,'config-'+cfgType+'.def')
+ usrCfgFiles[cfgType]=os.path.join(userdir,'idle-'+cfgType+'.cfg')
+ for cfgType in configTypes: #create config parsers
+ self.defaultCfg[cfgType]=IdleConfParser(defCfgFiles[cfgType])
+ self.userCfg[cfgType]=IdleUserConfParser(usrCfgFiles[cfgType])
+
+ def LoadCfgFiles(self):
+ """
+ load all configuration files.
+ """
+ for key in self.defaultCfg.keys():
+ self.defaultCfg[key].Load()
+ self.userCfg[key].Load() #same keys
+
+ def SaveUserCfgFiles(self):
+ """
+ write all loaded user configuration files back to disk
+ """
+ for key in self.userCfg.keys():
+ self.userCfg[key].Save()
+
+idleConf=IdleConf()
+
+### module test
+if __name__ == '__main__':
+ def dumpCfg(cfg):
+ print '\n',cfg,'\n'
+ for key in cfg.keys():
+ sections=cfg[key].sections()
+ print key
+ print sections
+ for section in sections:
+ options=cfg[key].options(section)
+ print section
+ print options
+ for option in options:
+ print option, '=', cfg[key].Get(section,option)
+ dumpCfg(idleConf.defaultCfg)
+ dumpCfg(idleConf.userCfg)
+ print idleConf.userCfg['main'].Get('Theme','name')
+ #print idleConf.userCfg['highlight'].GetDefHighlight('Foo','normal')