|
46 | 46 | def _load_obj(obj_name): |
47 | 47 | for maxsplit in range(1, obj_name.count('.') + 1): |
48 | 48 | # TODO when py3 only replace by: module, *func_parts = ... |
49 | | - func_name_split = obj_name.rsplit('.', maxsplit=maxsplit) |
| 49 | + func_name_split = obj_name.rsplit('.', maxsplit) |
50 | 50 | module = func_name_split[0] |
51 | 51 | func_parts = func_name_split[1:] |
52 | 52 | try: |
@@ -186,12 +186,11 @@ def signature_parameters(self): |
186 | 186 | # accessor classes have a signature, but don't want to show this |
187 | 187 | return tuple() |
188 | 188 | try: |
189 | | - signature = inspect.signature(self.method_obj) |
| 189 | + params = self.method_obj.__code__.co_varnames |
190 | 190 | except (TypeError, ValueError): |
191 | 191 | # Some objects, mainly in C extensions do not support introspection |
192 | 192 | # of the signature |
193 | 193 | return tuple() |
194 | | - params = tuple(signature.parameters.keys()) |
195 | 194 | if params and params[0] in ('self', 'cls'): |
196 | 195 | return params[1:] |
197 | 196 | return params |
@@ -264,8 +263,7 @@ def examples_errors(self): |
264 | 263 | error_msgs = '' |
265 | 264 | for test in finder.find(self.raw_doc, self.method_name, globs=context): |
266 | 265 | f = StringIO() |
267 | | - with contextlib.redirect_stdout(f): |
268 | | - runner.run(test) |
| 266 | + runner.run(test, out=f) |
269 | 267 | error_msgs += f.getvalue() |
270 | 268 | return error_msgs |
271 | 269 |
|
|
0 commit comments