summaryrefslogtreecommitdiff
path: root/coverage
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-07-22 20:47:24 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-07-22 20:47:24 -0400
commit4245d1feacee23580f3d809568f87364f4ea7b03 (patch)
tree2291d426ffd0cf886274387f191792a31148cfad /coverage
parent5478599f2cc54878fe61418648a9aece0f6142aa (diff)
downloadpython-coveragepy-git-4245d1feacee23580f3d809568f87364f4ea7b03.tar.gz
Move the raw data dumper to a more internal place.
Diffstat (limited to 'coverage')
-rw-r--r--coverage/cmdline.py9
-rw-r--r--coverage/data.py42
-rw-r--r--coverage/debug.py15
-rw-r--r--coverage/misc.py15
4 files changed, 53 insertions, 28 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index b15eb107..656f1c03 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -8,7 +8,7 @@ import traceback
from coverage import env
from coverage.execfile import run_python_file, run_python_module
-from coverage.misc import CoverageException, ExceptionDuringRun, NoSource, pretty_data
+from coverage.misc import CoverageException, ExceptionDuringRun, NoSource
from coverage.debug import info_formatter, info_header
@@ -602,13 +602,6 @@ class CoverageScript(object):
print(line)
else:
print("No data collected")
- elif info == 'rawdata':
- self.coverage.load()
- if self.coverage.data:
- data = self.coverage.data._read_raw_data_file(self.coverage.config.data_file)
- print(pretty_data(data))
- else:
- print("No data collected")
else:
self.help_fn("Don't know what you mean by %r" % info)
return ERR
diff --git a/coverage/data.py b/coverage/data.py
index 2f1cf442..03e12efd 100644
--- a/coverage/data.py
+++ b/coverage/data.py
@@ -200,11 +200,13 @@ class CoverageData(object):
__bool__ = __nonzero__
- def _open_for_reading(self, filename):
+ @classmethod
+ def _open_for_reading(cls, filename):
"""Open a file appropriately for reading data."""
return open(filename, "r")
- def _read_raw_data(self, file_obj):
+ @classmethod
+ def _read_raw_data(cls, file_obj):
"""Read the raw data from a file object."""
return json.load(file_obj)
@@ -237,10 +239,11 @@ class CoverageData(object):
)
)
- def _read_raw_data_file(self, filename):
+ @classmethod
+ def _read_raw_data_file(cls, filename):
"""Read the raw data from a file, for debugging."""
- with self._open_for_reading(filename) as f:
- return self._read_raw_data(f)
+ with cls._open_for_reading(filename) as f:
+ return cls._read_raw_data(f)
##
## Writing data
@@ -490,3 +493,32 @@ class CoverageDataFiles(object):
new_data.read_file(f)
data.update(new_data, aliases=aliases)
os.remove(f)
+
+
+def debug_main():
+ """Dump the raw data from data files.
+
+ Run this as::
+
+ $ python -m coverage.data [FILE]
+
+ """
+ from coverage.debug import pretty_data
+ import sys
+
+ if len(sys.argv) > 1:
+ files = sys.argv[1:]
+ else:
+ files = [".coverage"]
+
+ for filename in files:
+ data = CoverageData._read_raw_data_file(filename)
+ print("--- {0} ------------------------------".format(filename))
+ if data:
+ print(pretty_data(data))
+ else:
+ print("No data collected")
+
+
+if __name__ == '__main__':
+ debug_main()
diff --git a/coverage/debug.py b/coverage/debug.py
index b4c65d26..e5bb6b0b 100644
--- a/coverage/debug.py
+++ b/coverage/debug.py
@@ -1,7 +1,9 @@
"""Control of and utilities for debugging."""
import inspect
+import json
import os
+import re
# When debugging, it can be helpful to force some options, especially when
@@ -92,3 +94,16 @@ def short_stack(): # pragma: debugging
def dump_stack_frames(): # pragma: debugging
"""Print a summary of the stack to stdout."""
print(short_stack())
+
+
+def pretty_data(data):
+ """Format data as JSON, but as nicely as possible.
+
+ Returns a string.
+
+ """
+ # Start with a basic JSON dump.
+ out = json.dumps(data, indent=4, sort_keys=True)
+ # But pairs of numbers shouldn't be split across lines...
+ out = re.sub(r"\[\s+(-?\d+),\s+(-?\d+)\s+]", r"[\1, \2]", out)
+ return out
diff --git a/coverage/misc.py b/coverage/misc.py
index ca09be7d..b99fbb81 100644
--- a/coverage/misc.py
+++ b/coverage/misc.py
@@ -3,9 +3,7 @@
import errno
import hashlib
import inspect
-import json
import os
-import re
from coverage import env
from coverage.backward import string_class, to_bytes, unicode_class
@@ -172,19 +170,6 @@ def _needs_to_implement(that, func_name):
)
-def pretty_data(data):
- """Format data as JSON, but as nicely as possible.
-
- Returns a string.
-
- """
- # Start with a basic JSON dump.
- out = json.dumps(data, indent=4, sort_keys=True)
- # But pairs of numbers shouldn't be split across lines...
- out = re.sub(r"\[\s+(-?\d+),\s+(-?\d+)\s+]", r"[\1, \2]", out)
- return out
-
-
class CoverageException(Exception):
"""An exception specific to Coverage."""
pass