diff options
author | David Cournapeau <cournape@gmail.com> | 2009-11-23 09:27:40 +0000 |
---|---|---|
committer | David Cournapeau <cournape@gmail.com> | 2009-11-23 09:27:40 +0000 |
commit | d9306312fb09e86736717a0b4121794de5a3034d (patch) | |
tree | 5094125c0aa2f958b94473bc3ca9a9c7b6255ad3 /numpy/testing/decorators.py | |
parent | 734123bc38f62da38dceeb251e355ec3f720454a (diff) | |
download | numpy-d9306312fb09e86736717a0b4121794de5a3034d.tar.gz |
REF: move warning context manager into utils.
Diffstat (limited to 'numpy/testing/decorators.py')
-rw-r--r-- | numpy/testing/decorators.py | 87 |
1 files changed, 3 insertions, 84 deletions
diff --git a/numpy/testing/decorators.py b/numpy/testing/decorators.py index afb52d3ea..68335cc18 100644 --- a/numpy/testing/decorators.py +++ b/numpy/testing/decorators.py @@ -16,6 +16,9 @@ function name, setup and teardown functions and so on - see import warnings import sys +from numpy.testing.utils import \ + WarningManager, WarningMessage + def slow(t): """ Label a test as 'slow'. @@ -214,90 +217,6 @@ def knownfailureif(fail_condition, msg=None): return knownfail_decorator -# The following two classes are copied from python 2.6 warnings module (context -# manager) -class WarningMessage(object): - - """ - Holds the result of a single showwarning() call. - - Notes - ----- - `WarningMessage` is copied from the Python 2.6 warnings module, - so it can be used in NumPy with older Python versions. - - """ - - _WARNING_DETAILS = ("message", "category", "filename", "lineno", "file", - "line") - - def __init__(self, message, category, filename, lineno, file=None, - line=None): - local_values = locals() - for attr in self._WARNING_DETAILS: - setattr(self, attr, local_values[attr]) - if category: - self._category_name = category.__name__ - else: - self._category_name = None - - def __str__(self): - return ("{message : %r, category : %r, filename : %r, lineno : %s, " - "line : %r}" % (self.message, self._category_name, - self.filename, self.lineno, self.line)) - -class WarningManager: - """ - A context manager that copies and restores the warnings filter upon - exiting the context. - - The 'record' argument specifies whether warnings should be captured by a - custom implementation of ``warnings.showwarning()`` and be appended to a - list returned by the context manager. Otherwise None is returned by the - context manager. The objects appended to the list are arguments whose - attributes mirror the arguments to ``showwarning()``. - - The 'module' argument is to specify an alternative module to the module - named 'warnings' and imported under that name. This argument is only useful - when testing the warnings module itself. - - Notes - ----- - `WarningManager` is a copy of the ``catch_warnings`` context manager - from the Python 2.6 warnings module, with slight modifications. - It is copied so it can be used in NumPy with older Python versions. - - """ - def __init__(self, record=False, module=None): - self._record = record - if module is None: - self._module = sys.modules['warnings'] - else: - self._module = module - self._entered = False - - def __enter__(self): - if self._entered: - raise RuntimeError("Cannot enter %r twice" % self) - self._entered = True - self._filters = self._module.filters - self._module.filters = self._filters[:] - self._showwarning = self._module.showwarning - if self._record: - log = [] - def showwarning(*args, **kwargs): - log.append(WarningMessage(*args, **kwargs)) - self._module.showwarning = showwarning - return log - else: - return None - - def __exit__(self): - if not self._entered: - raise RuntimeError("Cannot exit %r without entering first" % self) - self._module.filters = self._filters - self._module.showwarning = self._showwarning - def deprecated(conditional=True): """ Filter deprecation warnings while running the test suite. |