Commit 649685ad authored by Eric S. Raymond's avatar Eric S. Raymond

ConfigParser enhancements to edit existing configs, part 2

parent 23adc9f3
...@@ -36,6 +36,9 @@ ConfigParser -- responsible for for parsing a list of ...@@ -36,6 +36,9 @@ ConfigParser -- responsible for for parsing a list of
has_section(section) has_section(section)
return whether the given section exists return whether the given section exists
has_option(section, option)
return whether the given option exists in the given section
options(section) options(section)
return list of configuration options for the named section return list of configuration options for the named section
...@@ -68,6 +71,18 @@ ConfigParser -- responsible for for parsing a list of ...@@ -68,6 +71,18 @@ ConfigParser -- responsible for for parsing a list of
getboolean(section, options) getboolean(section, options)
like get(), but convert value to a boolean (currently defined as 0 or like get(), but convert value to a boolean (currently defined as 0 or
1, only) 1, only)
remove_section(section)
remove the given file section and all its options
remove_option(section, option)
remove the given option from the given section
set(section, option, value)
set the given option
write(fp)
write the configuration state in .ini format
""" """
import sys import sys
...@@ -310,18 +325,40 @@ class ConfigParser: ...@@ -310,18 +325,40 @@ class ConfigParser:
"""Write an .ini-format representation of the configuration state.""" """Write an .ini-format representation of the configuration state."""
if self.__defaults: if self.__defaults:
fp.write("[DEFAULT]\n") fp.write("[DEFAULT]\n")
for key in self.__defaults.keys(): for (key, value) in self.__defaults.items():
fp.write(key + " = " + self.__defaults[key] + "\n") fp.write("%s = %s\n" % (key, value))
fp.write("\n") fp.write("\n")
for section in self.sections(): for section in self.sections():
fp.write("[" + section + "]\n") fp.write("[" + section + "]\n")
sectdict = self.__sections[section] sectdict = self.__sections[section]
for key in sectdict.keys(): for (key, value) in sectdict.items():
if key == "__name__": if key == "__name__":
continue continue
fp.write(key + " = " + str(sectdict[key]) + "\n") fp.write("%s = %s\n" % (key, value))
fp.write("\n") fp.write("\n")
def remove_option(section, option):
"""Remove an option."""
if not section or section == "DEFAULT":
sectdict = self.__defaults
else:
try:
sectdict = self.__sections[section]
except KeyError:
raise NoSectionError(section)
existed = sectdict.has_key(key)
if existed:
del sectdict[key]
return existed
def remove_section(section):
"""Remove a file section."""
if self.__sections.has_key(section):
del self.__sections[section]
return 1
else:
return 0
# #
# Regular expressions for parsing section headers and options. Note a # Regular expressions for parsing section headers and options. Note a
# slight semantic change from the previous version, because of the use # slight semantic change from the previous version, because of the use
...@@ -393,7 +430,6 @@ class ConfigParser: ...@@ -393,7 +430,6 @@ class ConfigParser:
mo = self.OPTCRE.match(line) mo = self.OPTCRE.match(line)
if mo: if mo:
optname, vi, optval = mo.group('option', 'vi', 'value') optname, vi, optval = mo.group('option', 'vi', 'value')
optname = string.lower(optname)
if vi in ('=', ':') and ';' in optval: if vi in ('=', ':') and ';' in optval:
# ';' is a comment delimiter only if it follows # ';' is a comment delimiter only if it follows
# a spacing character # a spacing character
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment