Merge pull request #4192 from asottile/fix_recwarn_stacklevel

Fix filename reported by `warnings.warn` when using `recwarn` under python2.
This commit is contained in:
Anthony Sottile
2018-10-18 16:22:00 -07:00
committed by GitHub
3 changed files with 21 additions and 1 deletions
+14 -1
View File
@@ -156,7 +156,20 @@ class WarningsRecorder(warnings.catch_warnings):
if six.PY2:
def warn(*args, **kwargs):
return self._saved_warn(*args, **kwargs)
kwargs.setdefault("stacklevel", 1)
kwargs["stacklevel"] += 1
# emulate resetting the warn registry
f_globals = sys._getframe(kwargs["stacklevel"] - 1).f_globals
if "__warningregistry__" in f_globals:
orig = f_globals["__warningregistry__"]
f_globals["__warningregistry__"] = None
try:
return self._saved_warn(*args, **kwargs)
finally:
f_globals["__warningregistry__"] = orig
else:
return self._saved_warn(*args, **kwargs)
warnings.warn, self._saved_warn = warn, warnings.warn
return self