summaryrefslogtreecommitdiff
path: root/coverage/python.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-10-25 17:40:09 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-10-25 17:40:09 -0400
commitb810cbc0d06df0a04e3380166215b8ad2f40524c (patch)
treeb0ea1499815b84301fa7991e37de128265526e81 /coverage/python.py
parent15100248c12b85a00278371fea60f07718a9d499 (diff)
downloadpython-coveragepy-git-b810cbc0d06df0a04e3380166215b8ad2f40524c.tar.gz
Properly handle filenames with non-ASCII characters. #432
Diffstat (limited to 'coverage/python.py')
-rw-r--r--coverage/python.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/coverage/python.py b/coverage/python.py
index 71b50f0c..fe32150a 100644
--- a/coverage/python.py
+++ b/coverage/python.py
@@ -4,6 +4,7 @@
"""Python source expertise for coverage.py"""
import os.path
+import sys
import zipimport
from coverage import env, files
@@ -95,6 +96,9 @@ class PythonFileReporter(FileReporter):
else:
filename = morf
+ if env.PY2 and isinstance(filename, str):
+ filename = filename.decode(sys.getfilesystemencoding())
+
# .pyc files should always refer to a .py instead.
if filename.endswith(('.pyc', '.pyo')):
filename = filename[:-1]
@@ -106,6 +110,8 @@ class PythonFileReporter(FileReporter):
if hasattr(morf, '__name__'):
name = morf.__name__
name = name.replace(".", os.sep) + ".py"
+ if isinstance(name, bytes):
+ name = name.decode(sys.getfilesystemencoding())
else:
name = files.relative_filename(filename)
self.relname = name
@@ -115,6 +121,7 @@ class PythonFileReporter(FileReporter):
self._statements = None
self._excluded = None
+ @contract(returns='unicode')
def relative_filename(self):
return self.relname