[Python-checkins] r62722 - python/trunk/Lib/warnings.py

brett.cannon python-checkins at python.org
Mon May 5 18:57:38 CEST 2008


Author: brett.cannon
Date: Mon May  5 18:57:38 2008
New Revision: 62722

Log:
Remove the use of 'inspect' from 'warnings' for detected deprecated use of the
showwarning API. Turns out 'inspect' uses 'operator' which is an extension
module. That's a problem when it has not been built yet by setup.py.


Modified:
   python/trunk/Lib/warnings.py

Modified: python/trunk/Lib/warnings.py
==============================================================================
--- python/trunk/Lib/warnings.py	(original)
+++ python/trunk/Lib/warnings.py	Mon May  5 18:57:38 2008
@@ -3,7 +3,6 @@
 # Note: function level imports should *not* be used
 # in this module as it may cause import lock deadlock.
 # See bug 683658.
-import inspect
 import linecache
 import sys
 import types
@@ -262,16 +261,24 @@
         raise RuntimeError(
               "Unrecognized action (%r) in warnings.filters:\n %s" %
               (action, item))
-    # Print message and context
-    if inspect.isfunction(showwarning):
-        arg_spec = inspect.getargspec(showwarning)
-        if 'line' not in arg_spec.args:
+    # Warn if showwarning() does not support the 'line' argument.
+    # Don't use 'inspect' as it relies on an extension module, which break the
+    # build thanks to 'warnings' being imported by setup.py.
+    fxn_code = None
+    if hasattr(showwarning, 'func_code'):
+        fxn_code = showwarning.func_code
+    elif hasattr(showwarning, '__func__'):
+        fxn_code = showwarning.__func__.func_code
+    if fxn_code:
+        args = fxn_code.co_varnames[:fxn_code.co_argcount]
+        if 'line' not in args:
             showwarning_msg = ("functions overriding warnings.showwarning() "
                                 "must support the 'line' argument")
             if message == showwarning_msg:
                 _show_warning(message, category, filename, lineno)
             else:
                 warn(showwarning_msg, DeprecationWarning)
+    # Print message and context
     showwarning(message, category, filename, lineno)
 
 


More information about the Python-checkins mailing list