summaryrefslogtreecommitdiff
path: root/numpy/testing/decorators.py
diff options
context:
space:
mode:
authorDavid Cournapeau <cournape@gmail.com>2009-11-23 09:27:40 +0000
committerDavid Cournapeau <cournape@gmail.com>2009-11-23 09:27:40 +0000
commitd9306312fb09e86736717a0b4121794de5a3034d (patch)
tree5094125c0aa2f958b94473bc3ca9a9c7b6255ad3 /numpy/testing/decorators.py
parent734123bc38f62da38dceeb251e355ec3f720454a (diff)
downloadnumpy-d9306312fb09e86736717a0b4121794de5a3034d.tar.gz
REF: move warning context manager into utils.
Diffstat (limited to 'numpy/testing/decorators.py')
-rw-r--r--numpy/testing/decorators.py87
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.