[Python-Dev] Problems with regrtest and with logging
Éric Araujo
merwok at netwok.org
Mon May 9 18:36:43 CEST 2011
Hi,
Thanks for the help. I didn’t know about handler.close. (By which I
mean that I used logging without re-reading its documentation, which is
a testimony to its usability :)
> The cases you refer to seem to be _set_logger in packaging/run.py
> (which appears
> not to be used at all - there appear to be no other references to it
> in the
> code),
Yep, probably dead code. I think that an handler should be defined
only once, in the “if __name__ == '__main__'” block. Am I right? Just
like you don’t call sys.exit from library code (hello optparse!), you
don’t set logging handlers in library code, only in the outmost layer of
the script.
> Dispatcher.__init__ in packaging/run.py and
This is the new-fangled command line parser, which can run global
(Python-wide) commands (search, uninstall, etc.) as well as traditional
project-wide commands (build, check, sdist, etc.)
> Distribution.parse_command_line in packaging/dist.py.
This is the older command line parser, that can handle only
project-wide commands. I’m not sure the work is finished to integrate
both parsers; my smoke test used to be --help-commands, which can be
hard to run these days.
The problem is that Dispatcher or Distribution get the quiet or verbose
options from the command-line deep in the library code, and want to use
it to configure the log level on the handler, which I’ve just said
should be set up at a much higher level. To solve this, I’m going to
add a *logginghandler* argument to Dispatcher/Distribution; that way,
the creation of the handler will happen only once and at a high level,
but the command-line parsing code will be able to set the log handler
from the command-line arguments. :)
> In the second and third cases, can you be sure that only one of these
> code paths
> will be executed, at most once?
Gut feeling is yes, but we’ve learned not to trust our instinct with
distutils.
> In the case of the test support code, I'm not really sure that
> LoggingCatcher is
> needed. There is already a TestHandler class in test.support which
> captures
> records in a buffer, and allows flexible matching for assertions, as
> described in
distutils used its own log module; this mixin was used to intercept
messages sent with this system. When we migrated to stdlib logging, I
added a todo comment to update the code to use something less kludgy :)
The post you linked to is already in my bookmarks. Note that this
support module also helps with Python 2.4+, so I may have to copy-paste
TestHandler.
So, I will fix the LoggingCatcher mixin to use the much cleaner
addHandler/removeHandler combo (I’ll avoid calling
logging._removeHandlerRef if I don’t have to) and try my idea about the
handler instantiation in the code. Thanks a lot!
Cheers
More information about the Python-Dev
mailing list