summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2019-06-15 15:32:43 -0400
committerNed Batchelder <ned@nedbatchelder.com>2019-06-15 15:32:43 -0400
commit730ef8b6047bcbe8b92675b5a8bcbe1060585d16 (patch)
treef499f824574ca3afa23f231ccb5534eeea23f52e
parentcb1b65a4ad1b8302304706b1775401d165486d02 (diff)
downloadpython-coveragepy-git-730ef8b6047bcbe8b92675b5a8bcbe1060585d16.tar.gz
Reporter base class shouldn't be responsible for directories
-rw-r--r--coverage/annotate.py6
-rw-r--r--coverage/html.py7
-rw-r--r--coverage/report.py11
3 files changed, 11 insertions, 13 deletions
diff --git a/coverage/annotate.py b/coverage/annotate.py
index 1d228004..3380dccc 100644
--- a/coverage/annotate.py
+++ b/coverage/annotate.py
@@ -8,7 +8,7 @@ import os
import re
from coverage.files import flat_rootname
-from coverage.misc import isolate_module
+from coverage.misc import ensure_dir, isolate_module
from coverage.report import Reporter
os = isolate_module(os)
@@ -49,8 +49,9 @@ class AnnotateReporter(Reporter):
See `coverage.report()` for arguments.
"""
+ self.directory = directory
self.coverage.get_data()
- self.report_files(self.annotate_file, morfs, directory)
+ self.report_files(self.annotate_file, morfs)
def annotate_file(self, fr, analysis):
"""Annotate a single file.
@@ -63,6 +64,7 @@ class AnnotateReporter(Reporter):
excluded = sorted(analysis.excluded)
if self.directory:
+ ensure_dir(self.directory)
dest_file = os.path.join(self.directory, flat_rootname(fr.relative_filename()))
if dest_file.endswith("_py"):
dest_file = dest_file[:-3] + ".py"
diff --git a/coverage/html.py b/coverage/html.py
index 6cfb85ff..629f7d6a 100644
--- a/coverage/html.py
+++ b/coverage/html.py
@@ -15,7 +15,7 @@ from coverage import env
from coverage.backward import iitems
from coverage.data import add_data_to_hash
from coverage.files import flat_rootname
-from coverage.misc import CoverageException, file_be_gone, Hasher, isolate_module
+from coverage.misc import CoverageException, ensure_dir, file_be_gone, Hasher, isolate_module
from coverage.report import Reporter
from coverage.results import Numbers
from coverage.templite import Templite
@@ -142,9 +142,11 @@ class HtmlReporter(Reporter):
if self.config.extra_css:
self.extra_css = os.path.basename(self.config.extra_css)
+ self.directory = self.config.html_dir
+
# Process all the files.
self.coverage.get_data().set_query_contexts(self.config.query_contexts)
- self.report_files(self.html_file, morfs, self.config.html_dir)
+ self.report_files(self.html_file, morfs)
if not self.all_files_nums:
raise CoverageException("No data to report.")
@@ -182,6 +184,7 @@ class HtmlReporter(Reporter):
"""Generate an HTML file for one source file."""
rootname = flat_rootname(fr.relative_filename())
html_filename = rootname + ".html"
+ ensure_dir(self.directory)
html_path = os.path.join(self.directory, html_filename)
# Get the numbers for this file.
diff --git a/coverage/report.py b/coverage/report.py
index 6f87bbf2..c694d79b 100644
--- a/coverage/report.py
+++ b/coverage/report.py
@@ -7,7 +7,7 @@ import os
import warnings
from coverage.files import prep_patterns, FnmatchMatcher
-from coverage.misc import CoverageException, NoSource, NotPython, ensure_dir, isolate_module
+from coverage.misc import CoverageException, NoSource, NotPython, isolate_module
os = isolate_module(os)
@@ -25,10 +25,6 @@ class Reporter(object):
self.coverage = coverage
self.config = config
- # The directory into which to place the report, used by some derived
- # classes.
- self.directory = None
-
# Our method find_file_reporters used to set an attribute that other
# code could read. That's been refactored away, but some third parties
# were using that attribute. We'll continue to support it in a noisy
@@ -65,7 +61,7 @@ class Reporter(object):
self._file_reporters = sorted(reporters)
return self._file_reporters
- def report_files(self, report_fn, morfs, directory=None):
+ def report_files(self, report_fn, morfs):
"""Run a reporting function on a number of morfs.
`report_fn` is called for each relative morf in `morfs`. It is called
@@ -82,9 +78,6 @@ class Reporter(object):
if not file_reporters:
raise CoverageException("No data to report.")
- self.directory = directory
- ensure_dir(self.directory)
-
for fr in file_reporters:
try:
report_fn(fr, self.coverage._analyze(fr))