[Distutils] Access to Python config info
John Skaller
skaller@maxtal.com.au
Wed, 23 Dec 1998 01:40:15 +1000
At 08:07 22/12/98 -0500, Greg Ward wrote:
>Quoth John Skaller, on 20 December 1998:
>> I think you are missing the point here: if the configuration
>> doesn't work, the client has NO CHOICE but to edit it.
>> And if it isn't editable, the client has NO CHOICE, full stop.
>> Now, you don't want to leave the client without options, in
>> case something as complex as configuring a compiler fails, do you?
>
>John -- I don't think not being able to edit sysconfig leaves people out
>in the cold. Fred's current implementation is, in fact, quite
>non-editable, as it scans Makefile and friends as late as possible
>(ie. when sysconfig is itself imported).
Let me cut the arguments, and simply phrase a request.
This gives us BOTH what we want. :-)
EXECUTIVE SUMMARY
1. module parse_configuration, function get_config
returns a dictionary of config data parsed from
the makefile
2. module sysconfig exhibits attributes corresponding
to the result of executing get_config when loaded
3. module build_config, by default, exhibits the attributes
corresponding to the result of executing get_config AT BUILD TIME
This module may be edited by the client.
4. The tool 'refresh_config.py' can be executed to print
the (dynamic) configuration to standard output,
and thus be used to generate a configuration module,
including the standard one (3).
DETAILS.
Allow me to assume sysconfig.py, as it stands, is copied to
parse_configuration, renamed get_config, and edited
slightly to conform to the specified interface.
Here is the new implementation of module sysconfig, with the
same semantics as the existing one:
# distutils.sysconfig
from distutils.parse_configuration import get_config
globals().update(get_config())
Nifty, eh? :-)
Here is 'refresh_config.py':
# refresh_config.py
from distutils.parse_configuration import get_config
for key, value in get_config().items(): print key+'='+repr(value)
As you can see, both these auxilliary things are a single line
of code. This is packaging. It is possible just by isolating
the parser, and not doing anything tricky. :-)
I think that invoking the refresh utility in the make process
is also a single line change to the makefile!
WAFFLY IMHO THEORETICAL COMMENTS:
It is best to have stateless entities do the work, and then
provide state as required by the architecture. Separating
out the functionality is crucial to building multiple
architectures: it allows the architectural implementation
to be largely independent of the implementation of the
functionality.
This is the secret of Python methods: they're just plain
old stateless functions. Bound methods are just architecture,
independent of the functionality encoded in the unbound
method. We should emulate this good, orthogonal, design!
/WAFFLE
Comments?
-------------------------------------------------------
John Skaller email: skaller@maxtal.com.au
http://www.maxtal.com.au/~skaller
phone: 61-2-96600850
snail: 10/1 Toxteth Rd, Glebe NSW 2037, Australia