Search code examples
pythondelimiterspacesconfigparser

Stop ConfigParser adding spaces to delims after upgrade from python 2.7.3 to 2.7.9


After being forced to use a later version of python, ConfigParser now insists on adding spaces to each side of any delims when modifying a configuration file.

e.g. setting=90 becomes: setting = 90

This was not the behavior in the earlier version, and I cannot find a way of controlling this behavior, can anyone help?

My test code looks like this:

import ConfigParser
import os

config   = ConfigParser.ConfigParser()
cfgfile  = '/home/osmc/bin/test/config.txt'
os.system('sudo echo "[section]" > ' + cfgfile)
os.system('sudo echo "setting=0" >> ' + cfgfile)

config.read(cfgfile)
config.set('section','setting', '1' )

with open(cfgfile, 'wb') as newcfgfile:
    config.write(newcfgfile)

Thanks in advance.


Solution

  • You can subclass and alter the .write method removing the spaces from either side of the =:

    import ConfigParser
    import os
    
    
    class MyConfigParser(ConfigParser.ConfigParser):
        def write(self, fp):
            """Write an .ini-format representation of the configuration state."""
            if self._defaults:
                fp.write("[%s]\n" % ConfigParser.DEFAULTSECT)
                for (key, value) in self._defaults.items():
                    fp.write("%s=%s\n" % (key, str(value).replace('\n', '\n\t')))
                fp.write("\n")
            for section in self._sections:
                fp.write("[%s]\n" % section)
                for (key, value) in self._sections[section].items():
                    if key == "__name__":
                        continue
                    if (value is not None) or (self._optcre == self.OPTCRE):
                        key = "=".join((key, str(value).replace('\n', '\n\t')))
                    fp.write("%s\n" % key)
                fp.write("\n")
    
    config = MyConfigParser()
    .....