Parsing environment variables in ConfigParser files

Peter Otten __peter__ at web.de
Fri Dec 19 13:21:01 EST 2003


Matthew Barnes wrote:

> I'm considering submitting a patch for Python 2.4 to allow environment
> variable expansion in ConfigParser files.  The use cases for this
> should be obvious.  I'd like to be able to specify something like the
> following in a configuration file:
> 
>         [section_name]
>         data_file=${HOME}/mydata.dat
> 
> ...(where HOME=/home/matt) and have ConfigParser automatically expand
> it to:
> 
>         [section_name]
>         data_file=/home/matt/mydata.dat
> 
> The change is pretty straight-forward, but I'm interested in feedback
> on whether this is a good idea, what the syntax for environment
> variable references should look like (currently I'm thinking
> ${varname}), or whether there are any hidden complexities or
> backward-compatibility concerns.
> 
> Matthew Barnes

I think this can be easily achieved by subclassing the ConfigParser:

>>> from ConfigParser import ConfigParser
>>> class ExpandingParser(ConfigParser):
...     def getexpanded(self, section, option):
...             import os
...             return self._get(section, os.path.expandvars, option)
...
>>> p = ExpandingParser()
>>> p.read("expand.ini")
>>> p.get("paths", "mydir")
'$HOME/of/the/brave'
>>> p.getexpanded("paths", "mydir")
'/home/peter/of/the/brave'
>>>

If you will bother with the library implementation at all, I would prefer
this level of explicitness, i. e. a dedicated getexpanded() method in
ConfigParser, or alternatively a subclass that overrides _get() to always
expand in the getXXX() methods. With both approaches you can stay safely
away from backwards compatibility problems.

Peter










More information about the Python-list mailing list