7
7
8
8
_LEADING_WHITE = re .compile (r'^(\s*)' )
9
9
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
+
10
30
11
31
class ExpiredDeprecationError (RuntimeError ):
12
32
""" Error for expired deprecation
@@ -25,7 +45,7 @@ def _ensure_cr(text):
25
45
return text .rstrip () + '\n '
26
46
27
47
28
- def _add_dep_doc (old_doc , dep_doc ):
48
+ def _add_dep_doc (old_doc , dep_doc , setup = '' , cleanup = '' ):
29
49
""" Add deprecation message `dep_doc` to docstring in `old_doc`
30
50
31
51
Parameters
@@ -56,8 +76,11 @@ def _add_dep_doc(old_doc, dep_doc):
56
76
# nothing following first paragraph, just append message
57
77
return old_doc + '\n ' + dep_doc
58
78
indent = _LEADING_WHITE .match (old_lines [next_line ]).group ()
79
+ setup_lines = [indent + L for L in setup .splitlines ()]
59
80
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 + ['' ])
61
84
62
85
63
86
class Deprecator (object ):
@@ -160,7 +183,7 @@ def deprecated_func(*args, **kwargs):
160
183
return func (* args , ** kwargs )
161
184
162
185
deprecated_func .__doc__ = _add_dep_doc (deprecated_func .__doc__ ,
163
- message )
186
+ message , TESTSETUP , TESTCLEANUP )
164
187
return deprecated_func
165
188
166
189
return deprecator
0 commit comments