diff Lib/ConfigParser.py @ 13521:4dbc75c189bc legacy-trunk

Give ConfigParser the capability to set as well as read options, and to write a representation of the configuration state in .ini format that can be read back in by a future read() call. Thus this class is now a back end for .ini editors as well as parsers. This patch is complete and tested, but exposes a bug in the ConfigParser implementation which I have not yet fixed. Because case information is discarded during parsing, the output of write() has its case smashed. I wrote this for a SourceForge interface script called forgetool. Documentation for the new entry points included.
author Eric S. Raymond <esr@thyrsus.com>
date Mon, 10 Jul 2000 18:11:00 +0000
parents 34d2b50eff2e
children 39f54b9a7f9c
line wrap: on
line diff
--- a/Lib/ConfigParser.py	Mon Jul 10 17:25:37 2000 +0000
+++ b/Lib/ConfigParser.py	Mon Jul 10 18:11:00 2000 +0000
@@ -286,6 +286,42 @@
     def optionxform(self, optionstr):
         return string.lower(optionstr)
 
+    def has_option(self, section, option):
+        """Check for the existence of a given option in a given section."""
+        if not section or section == "DEFAULT":
+            return self.__defaults.has_key(option)
+        elif not self.has_section(section):
+            return 0
+        else:
+            return self.__sections[section].has_key(option)
+
+    def set(self, section, option, value):
+        """Set an option."""
+        if not section or section == "DEFAULT":
+            sectdict = self.__defaults
+        else:
+            try:
+                sectdict = self.__sections[section]
+            except KeyError:
+                raise NoSectionError(section)
+        sectdict[option] = value
+
+    def write(self, fp):
+        """Write an .ini-format representation of the configuration state."""
+        if self.__defaults:
+            fp.write("[DEFAULT]\n")
+            for key in self.__defaults.keys():
+                fp.write(key + " = " + self.__defaults[key] + "\n")
+            fp.write("\n")
+        for section in self.sections():
+            fp.write("[" + section + "]\n")
+            sectdict = self.__sections[section]
+            for key in sectdict.keys():
+                if key == "__name__":
+                    continue
+                fp.write(key + " = " + str(sectdict[key]) + "\n")
+            fp.write("\n")
+
     #
     # Regular expressions for parsing section headers and options.  Note a
     # slight semantic change from the previous version, because of the use