[Python-Dev] Re: ConfigParser changes
Fred L. Drake, Jr.
fdrake@acm.org
Tue, 31 Dec 2002 12:36:15 -0500
Eric S. Raymond writes:
> Do you have the same reaction to the multiline string support?
Yes. It should definately be discussed.
> And do you want the line-continuation bugfix?
That would be nice to have; I should have responded to that point
separately. Feel free to commit a minimal patch to fix that, and add
a regression test to Lib/test/test_cfgparser.py.
> > 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.
I don't think it's clear that using __str__() for this is valuable.
Creating a potentially large string in memory may not be the best
approach; I actually like the write() method better; the caller can
decide to use a StringIO if that's what makes sense, or toss things to
a real file if needed.
If others like this, I won't object. It should be a separate patch
from the other changes, though.
> > 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.
Perhaps I missed it; did you preserve comments as well?
> OK. Then let the discussion begin. Here are the issues:
Excellent! Thanks.
> 1. There is a minor bug in the way continuations are handled that, in
> some circumstances, can mean the write() representation is not invertible.
Per above, that can be fixed at any time. Bugs are written to be
squashed. ;-)
> 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?
I think the interface should be discussed; your implementation may be
sufficient, but after working with pyexpat as much as I have, I've
developed a strong dislike for attributes that have substantial side
effects.
If we're going to add a special syntax for multi-line values, we may
need to think about encoding special values, text encoding, and
Unicode. And that's never easy to get concensus on. ;-)
> 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.
I think "suggests" is too strong a word; I was only citing precedence,
not advocating that approach. I think it's pretty ugly as well.
> 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
I think there's a distinction between reading a configuration and
editing it: The original code never wrote a file back out. That was
something you added in revision 1.19.
> 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.
Only if you write the file back out. ;-)
Seriously, I have no objection to supporting surgical editing. I do
think that separate classes should be used for read-only uses and
read-write uses; a read-only ConfigParser-thingie should remain very
lightweight, and surgical editing just isn't that.
-Fred
--
Fred L. Drake, Jr. <fdrake at acm.org>
PythonLabs at Zope Corporation