diff options
| author | Brett Cannon <bcannon@gmail.com> | 2008-05-05 05:32:07 (GMT) | 
|---|---|---|
| committer | Brett Cannon <bcannon@gmail.com> | 2008-05-05 05:32:07 (GMT) | 
| commit | 8a232cc385343c17d9f615f0aff49fc378bdebae (patch) | |
| tree | 35dbd69774e9a32275293638dcfaeb322dc8790b /Lib/warnings.py | |
| parent | 9ae080ee5acad3c6207db75843cf1a27f868c540 (diff) | |
| download | cpython-8a232cc385343c17d9f615f0aff49fc378bdebae.zip cpython-8a232cc385343c17d9f615f0aff49fc378bdebae.tar.gz cpython-8a232cc385343c17d9f615f0aff49fc378bdebae.tar.bz2  | |
Add a DeprecationWarning for when warnings.showwarning() is set to a function
that lacks support for the new 'line' argument.
Diffstat (limited to 'Lib/warnings.py')
| -rw-r--r-- | Lib/warnings.py | 15 | 
1 files changed, 14 insertions, 1 deletions
diff --git a/Lib/warnings.py b/Lib/warnings.py index 3c7357b..cefa961 100644 --- a/Lib/warnings.py +++ b/Lib/warnings.py @@ -3,6 +3,7 @@  # 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 @@ -21,7 +22,7 @@ def warnpy3k(message, category=None, stacklevel=1):              category = DeprecationWarning          warn(message, category, stacklevel+1) -def showwarning(message, category, filename, lineno, file=None, line=None): +def _show_warning(message, category, filename, lineno, file=None, line=None):      """Hook to write a warning to a file; replace if you like."""      if file is None:          file = sys.stderr @@ -29,6 +30,9 @@ def showwarning(message, category, filename, lineno, file=None, line=None):          file.write(formatwarning(message, category, filename, lineno, line))      except IOError:          pass # the file (probably stderr) is invalid - this warning gets lost. +# Keep a worrking version around in case the deprecation of the old API is +# triggered. +showwarning = _show_warning  def formatwarning(message, category, filename, lineno, line=None):      """Function to format a warning the standard way.""" @@ -259,6 +263,15 @@ def warn_explicit(message, category, filename, lineno,                "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: +            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)      showwarning(message, category, filename, lineno)  | 
