[Python-Dev] Extension to ConfigParser

Fuzzyman fuzzyman at voidspace.org.uk
Mon Jan 30 22:02:59 CET 2006


Ian Bicking wrote:
> Guido van Rossum wrote:
>   
>>> I don't think enhancing ConfigParser significantly is a good way
>>> forward.  Because of ConfigParser's problems people have made all sorts
>>> of workarounds, and so I don't think there's any public interface that
>>> we can maintain while changing the internals without breaking lots of
>>> code.  In practice, everything is a public interface.  So I think the
>>> implementation as it stands should stay in place, and if anything it
>>> should be deprecated instead of being enhanced in-place.
>>>       
>> Somehow that's not my experience. What's so bad about ConfigParser?
>> What would break if we rewrote the save functionality to produce a
>> predictable order?
>>     
>
> That's a fairly minor improvement, and I can't see how that would break 
> anything.  But Michael (aka Fuzzyman -- sorry, I just can't refer to you 
> as Fuzzyman without feeling absurd ;) 
Don't worry, absurdity is a common reaction I inspire in people.
Actually Fuzzyman is more of a description than a nickname. I understand
that I may not be the only one worthy of such a title of course. ;-)

> was proposing ConfigObj 
> specifically (http://www.voidspace.org.uk/python/configobj.html).  I 
> assume the internals of ConfigObj bear no particular resemblence to 
> ConfigParser, even if ConfigObj can parse the same syntax (plus some, 
> and with different failure cases) and provide the same public API.
>
> While ConfigParser is okay for simple configuration, it is (IMHO) not a 
> very good basis for anyone who wants to build better systems, like 
> config files that can be changed programmatically, or error messages 
> that point to file and line numbers.  Those aren't necessarily features 
> we need to expose in the standard library, but it'd be nice if you could 
> implement that kind of feature without having to ignore the standard 
> library entirely.
>
>   
Can you elaborate on what kinds of programattic changes you envisage ?
I'm just wondering if there are classes of usage not covered by
ConfigObj. Of course you can pretty much do anything to a ConfigObj
instance programattically, but even so...

> That said, I'm not particularly enthused about a highly featureful 
> config file *format* in the standard library, even if I would like a 
> much more robust implementation.
>
>   
I don't see how you can easily separate the format from the parser -
unless you just leave raw values. (As I said in the other email, I don't
think I fully understand you.)

If accessing raw values suits your purposes, why not subclass
ConfigParser and do magic in the get* methods ?

>  From my light reading on ConfigObj, it looks like it satisfies my 
> personal goals (though I haven't used it), but maybe has too many 
> features, like nested sections.  And it seems like maybe the API can be 
>   
I personally think nested sections are very useful and would be sad to
not see them included. Grouping additional configuration options as a
sub-section can be *very* handy.

> reduced in size with a little high-level refactoring -- APIs generally 
> grow over time so as to preserve backward compatibility, but I think if 
> it was introduced into the standard library that might be an opportunity 
> to trim the API back again before it enters the long-term API freeze 
> that the standard library demands.
Hmmm.... possibly. :-)

walk, decode and encode are the obvious extraneous methods. walk can be
re-implemented as a recursive function and encode/decode will be
unnecessary when unicode support is complete.

Additional complexity comes from retaining all comments and supporting
validation. I think retaining comments is worthwhile, because it allows
a program to modify a config file (e.g. from a GUI) without losing user
comments in a handwritten config file.

The validation support has several levels to it - but it can be
completely ignored with no complexity for the user. Some validation
support is integrated into instantiation, but this could *probably* be
broken out into a subclass.

Anyway, ho hum - possibly. All for future hypothetical discussion I guess...

All the best,

Fuzzyman
http://www.voidspace.org.uk/python/configobj.html


More information about the Python-Dev mailing list