77
88_LEADING_WHITE = re .compile (r'^(\s*)' )
99
10+ TESTSETUP = """
11+
12+ .. testsetup::
13+
14+ >>> import pytest
15+ >>> import warnings
16+ >>> _suppress_warnings = pytest.deprecated_call()
17+ >>> _ = _suppress_warnings.__enter__()
18+
19+ """
20+
21+ TESTCLEANUP = """
22+
23+ .. testcleanup::
24+
25+ >>> warnings.warn("Avoid error if no doctests to run...", DeprecationWarning)
26+ >>> _ = _suppress_warnings.__exit__(None, None, None)
27+
28+ """
29+
1030
1131class ExpiredDeprecationError (RuntimeError ):
1232 """ Error for expired deprecation
@@ -25,7 +45,7 @@ def _ensure_cr(text):
2545 return text .rstrip () + '\n '
2646
2747
28- def _add_dep_doc (old_doc , dep_doc ):
48+ def _add_dep_doc (old_doc , dep_doc , setup = '' , cleanup = '' ):
2949 """ Add deprecation message `dep_doc` to docstring in `old_doc`
3050
3151 Parameters
@@ -56,8 +76,11 @@ def _add_dep_doc(old_doc, dep_doc):
5676 # nothing following first paragraph, just append message
5777 return old_doc + '\n ' + dep_doc
5878 indent = _LEADING_WHITE .match (old_lines [next_line ]).group ()
79+ setup_lines = [indent + L for L in setup .splitlines ()]
5980 dep_lines = [indent + L for L in ['' ] + dep_doc .splitlines () + ['' ]]
60- return '\n ' .join (new_lines + dep_lines + old_lines [next_line :]) + '\n '
81+ cleanup_lines = [indent + L for L in cleanup .splitlines ()]
82+ return '\n ' .join (new_lines + dep_lines + setup_lines +
83+ old_lines [next_line :] + cleanup_lines + ['' ])
6184
6285
6386class Deprecator (object ):
@@ -160,7 +183,7 @@ def deprecated_func(*args, **kwargs):
160183 return func (* args , ** kwargs )
161184
162185 deprecated_func .__doc__ = _add_dep_doc (deprecated_func .__doc__ ,
163- message )
186+ message , TESTSETUP , TESTCLEANUP )
164187 return deprecated_func
165188
166189 return deprecator
0 commit comments