[Python-Dev] ConfigParser changes

Eric S. Raymond esr@thyrsus.com
Tue, 31 Dec 2002 11:57:01 -0500

Fred L. Drake, Jr. <fdrake@acm.org>:
> Regarding Eric's changes, I'd like to see them discussed before being
> made part of the library; the interface seems quite ad hoc, and it's
> not clear that they are the right way to go about adding sequence
> support.

Do you have the same reaction to the multiline string support?

And do you want the line-continuation bugfix?

> The value of having __str__() return a parsable INI file is highly
> questionable; the motivation should be explained and discussed.

Cleanliness.  I believe in invertible representations.  Whenever I write
a class, I like to have its str() or repr() emit something parseable.
If nothing else, this is useful for debugging.  This is just general
principles, I don't (unlike my other changes) have a use case for it.

> The issue of ordering sections and options in the same way as the input
> seems unimportant as well; comments are lost anyway.  Being able to
> surgically edit a config file using the ConfigParser module is simply
> not a supported use case.

It is now.  That was the point of the enhancements.

> I'll be reverting the change shortly.  Eric, I would like to encourage
> you to pursue this functionality via discussion on python-dev with the
> patch submitted via SourceForge.  The functional extensions are not
> unwelcome by any means.

OK.  Then let the discussion begin.  Here are the issues:

1. There is a minor bug in the way continuations are handled that, in
some circumstances, can mean the write() representation is not invertible.

2. Currently ConfigParser cannot support multiline strings -- that is, values
that are multiline and have embedded whitespace.  I need this capability.
I added support for this through a class member that lets you declare string 
quotes.  Is there some objection to supporting this value type, or just to
the magic-class-member interface?

3. Currently ConfigParser cannot support structured values. Again, I
need this capability (for association lists of coordinates and names,
as it happens).  The syntax I have implemented is a configurable list
bracket character surrounding comma-separated lists.  The alternative
Fred suggests is, I think, extremely ugly.  If anyone has a more
natural suggestion than my proposal, I'm willing to hear it.

4. I *do* in fact want to support `surgical' alteration of .INI files.
I have a use case for this in a configuration editor I'm writing for
FreeCiv.  More generally, when writing code to support invertible
representations, I think it is good citizenship to perturb the
original data as little as possible.  Thus I regard the fact that 
the present code permutes options and sections into an arbitrary 
order dependent on the hash table implementation as a design bug, and
actually a fairly serious sort of thoughtlessness.
		<a href="http://www.tuxedo.org/~esr/">Eric S. Raymond</a>