summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2011-01-30 09:42:00 -0500
committerNed Batchelder <ned@nedbatchelder.com>2011-01-30 09:42:00 -0500
commit1973042c8cac74bcef0dadac245f9477c82f065d (patch)
tree259e51488d1ec5287a8f255f4a08f1436a320c04
parentcd2d387ab90f3f07af49f1e045bdae4d8b1f588a (diff)
downloadpython-coveragepy-git-1973042c8cac74bcef0dadac245f9477c82f065d.tar.gz
Isolate the open/tokenize.open distinction into backward.py
-rw-r--r--coverage/backward.py10
-rw-r--r--coverage/codeunit.py9
-rw-r--r--coverage/parser.py6
3 files changed, 15 insertions, 10 deletions
diff --git a/coverage/backward.py b/coverage/backward.py
index 425bcc6e..23c0a569 100644
--- a/coverage/backward.py
+++ b/coverage/backward.py
@@ -71,3 +71,13 @@ try:
import configparser
except ImportError:
import ConfigParser as configparser
+
+# Python 3.2 provides `tokenize.open`, the best way to open source files.
+try:
+ import tokenize
+ open_source = tokenize.open
+except AttributeError:
+ def open_source(fname):
+ """Open a source file the best way."""
+ return open(fname, "rU")
+
diff --git a/coverage/codeunit.py b/coverage/codeunit.py
index f54bda5e..55f44a24 100644
--- a/coverage/codeunit.py
+++ b/coverage/codeunit.py
@@ -1,8 +1,8 @@
"""Code unit (module) handling for Coverage."""
-import glob, os, tokenize
+import glob, os
-from coverage.backward import string_class, StringIO
+from coverage.backward import open_source, string_class, StringIO
from coverage.misc import CoverageException
@@ -104,10 +104,7 @@ class CodeUnit(object):
"""Return an open file for reading the source of the code unit."""
if os.path.exists(self.filename):
# A regular text file: open it.
- if hasattr(tokenize, 'open'): # Python 3.2 and later
- return tokenize.open(self.filename)
- else:
- return open(self.filename)
+ return open_source(self.filename)
# Maybe it's in a zip file?
source = self.file_locator.get_zip_data(self.filename)
diff --git a/coverage/parser.py b/coverage/parser.py
index 4dca5771..a71ac102 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -3,6 +3,7 @@
import glob, opcode, os, re, sys, token, tokenize
from coverage.backward import set, sorted, StringIO # pylint: disable-msg=W0622
+from coverage.backward import open_source
from coverage.bytecode import ByteCodes, CodeObjects
from coverage.misc import nice_pair, CoverageException, NoSource, expensive
@@ -22,10 +23,7 @@ class CodeParser(object):
self.text = text
if not self.text:
try:
- if hasattr(tokenize, 'open'): # Python 3.2 and later
- sourcef = tokenize.open(self.filename)
- else:
- sourcef = open(self.filename, 'rU')
+ sourcef = open_source(self.filename)
self.text = sourcef.read()
sourcef.close()
except IOError: