diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2011-03-15 19:18:12 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2011-03-15 19:18:12 -0400 |
commit | 83a4a2a389f0bc0eee32c578dd7bda64c4f3e18b (patch) | |
tree | 986bd33abdf0b44ede7469945e3351952841d10d | |
parent | 78fa8c3bf90fdf64397565cad64846dc6807e21b (diff) | |
download | python-coveragepy-git-83a4a2a389f0bc0eee32c578dd7bda64c4f3e18b.tar.gz |
A file opened in 'b' mode needs bytes, not strings. Try to do this in a clean-ish way...
-rw-r--r-- | coverage/backward.py | 16 | ||||
-rw-r--r-- | coverage/files.py | 5 | ||||
-rw-r--r-- | test/coveragetest.py | 3 |
3 files changed, 20 insertions, 4 deletions
diff --git a/coverage/backward.py b/coverage/backward.py index c363f21f..af6da629 100644 --- a/coverage/backward.py +++ b/coverage/backward.py @@ -81,3 +81,19 @@ except AttributeError: """Open a source file the best way.""" return open(fname, "rU") +# Python 3.x is picky about bytes and strings, so provide methods to +# get them right, and make them no-ops in 2.x +if sys.version_info >= (3, 0): + def to_bytes(s): + return s.encode('utf8') + + def to_string(b): + return b.decode('utf8') + +else: + def to_bytes(s): + return s + + def to_string(b): + return b + diff --git a/coverage/files.py b/coverage/files.py index 9a8ac564..a68a0a7f 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -1,5 +1,6 @@ """File wrangling.""" +from coverage.backward import to_string import fnmatch, os, sys class FileLocator(object): @@ -72,9 +73,7 @@ class FileLocator(object): data = zi.get_data(parts[1]) except IOError: continue - if sys.version_info >= (3, 0): - data = data.decode('utf8') # TODO: How to do this properly? - return data + return to_string(data) return None diff --git a/test/coveragetest.py b/test/coveragetest.py index 694288f0..aad90e5c 100644 --- a/test/coveragetest.py +++ b/test/coveragetest.py @@ -4,6 +4,7 @@ import imp, os, random, shlex, shutil, sys, tempfile, textwrap import coverage from coverage.backward import sorted, StringIO # pylint: disable=W0622 +from coverage.backward import to_bytes from backtest import run_command from backunittest import TestCase @@ -147,7 +148,7 @@ class CoverageTest(TestCase): # Create the file. f = open(filename, 'wb') try: - f.write(text) + f.write(to_bytes(text)) finally: f.close() |