114 lines
3.4 KiB
Python
114 lines
3.4 KiB
Python
|
"""Provides access to configuration information"""
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
from ConfigParser import ConfigParser, NoOptionError, NoSectionError
|
||
|
|
||
|
class IdleConfParser(ConfigParser):
|
||
|
|
||
|
# these conf sections do not define extensions!
|
||
|
builtin_sections = {}
|
||
|
for section in ('EditorWindow', 'Colors'):
|
||
|
builtin_sections[section] = section
|
||
|
|
||
|
def getcolor(self, sec, name):
|
||
|
"""Return a dictionary with foreground and background colors
|
||
|
|
||
|
The return value is appropriate for passing to Tkinter in, e.g.,
|
||
|
a tag_config call.
|
||
|
"""
|
||
|
fore = self.getdef(sec, name + "-foreground")
|
||
|
back = self.getdef(sec, name + "-background")
|
||
|
return {"foreground": fore,
|
||
|
"background": back}
|
||
|
|
||
|
def getdef(self, sec, options, raw=0, vars=None, default=None):
|
||
|
"""Get an option value for given section or return default"""
|
||
|
try:
|
||
|
return self.get(sec, options, raw, vars)
|
||
|
except (NoSectionError, NoOptionError):
|
||
|
return default
|
||
|
|
||
|
def getsection(self, section):
|
||
|
"""Return a SectionConfigParser object"""
|
||
|
return SectionConfigParser(section, self)
|
||
|
|
||
|
def getextensions(self):
|
||
|
exts = []
|
||
|
for sec in self.sections():
|
||
|
if self.builtin_sections.has_key(sec):
|
||
|
continue
|
||
|
# enable is a bool, but it may not be defined
|
||
|
if self.getdef(sec, 'enable') != '0':
|
||
|
exts.append(sec)
|
||
|
return exts
|
||
|
|
||
|
def reload(self):
|
||
|
global idleconf
|
||
|
idleconf = IdleConfParser()
|
||
|
load(_dir) # _dir is a global holding the last directory loaded
|
||
|
|
||
|
class SectionConfigParser:
|
||
|
"""A ConfigParser object specialized for one section
|
||
|
|
||
|
This class has all the get methods that a regular ConfigParser does,
|
||
|
but without requiring a section argument.
|
||
|
"""
|
||
|
def __init__(self, section, config):
|
||
|
self.section = section
|
||
|
self.config = config
|
||
|
|
||
|
def options(self):
|
||
|
return self.config.options(self.section)
|
||
|
|
||
|
def get(self, options, raw=0, vars=None):
|
||
|
return self.config.get(self.section, options, raw, vars)
|
||
|
|
||
|
def getdef(self, options, raw=0, vars=None, default=None):
|
||
|
return self.config.getdef(self.section, options, raw, vars, default)
|
||
|
|
||
|
def getint(self, option):
|
||
|
return self.config.getint(self.section, option)
|
||
|
|
||
|
def getfloat(self, option):
|
||
|
return self.config.getint(self.section, option)
|
||
|
|
||
|
def getboolean(self, option):
|
||
|
return self.config.getint(self.section, option)
|
||
|
|
||
|
def getcolor(self, option):
|
||
|
return self.config.getcolor(self.section, option)
|
||
|
|
||
|
def load(dir):
|
||
|
"""Load IDLE configuration files based on IDLE install in dir
|
||
|
|
||
|
Attempts to load two config files:
|
||
|
dir/config.txt
|
||
|
dir/config-[win/mac/unix].txt
|
||
|
dir/config-%(sys.platform)s.txt
|
||
|
~/.idle
|
||
|
"""
|
||
|
global _dir
|
||
|
_dir = dir
|
||
|
|
||
|
if sys.platform[:3] == 'win':
|
||
|
genplatfile = os.path.join(dir, "config-win.txt")
|
||
|
# XXX don't know what the platform string is on a Mac
|
||
|
elif sys.platform[:3] == 'mac':
|
||
|
genplatfile = os.path.join(dir, "config-mac.txt")
|
||
|
else:
|
||
|
genplatfile = os.path.join(dir, "config-unix.txt")
|
||
|
|
||
|
platfile = os.path.join(dir, "config-%s.txt" % sys.platform)
|
||
|
|
||
|
try:
|
||
|
homedir = os.environ['HOME']
|
||
|
except KeyError:
|
||
|
homedir = os.getcwd()
|
||
|
|
||
|
idleconf.read((os.path.join(dir, "config.txt"), genplatfile, platfile,
|
||
|
os.path.join(homedir, ".idle")))
|
||
|
|
||
|
idleconf = IdleConfParser()
|
||
|
|