diff options
| author | Ned Batchelder <ned@nedbatchelder.com> | 2019-07-09 11:58:54 -0400 |
|---|---|---|
| committer | Ned Batchelder <ned@nedbatchelder.com> | 2019-07-09 11:58:54 -0400 |
| commit | e16eb5245857db6574a0c0fdcf76879708a316c4 (patch) | |
| tree | 0d0996c12051281cfe8c0520651d8b30866abe26 | |
| parent | 190d8257ec9c4b2e13561edce02dacdaa8a658f2 (diff) | |
| download | python-coveragepy-git-e16eb5245857db6574a0c0fdcf76879708a316c4.tar.gz | |
Properly close the sqldata object
| -rw-r--r-- | coverage/control.py | 17 | ||||
| -rw-r--r-- | coverage/sqldata.py | 10 | ||||
| -rw-r--r-- | tests/test_debug.py | 4 |
3 files changed, 24 insertions, 7 deletions
diff --git a/coverage/control.py b/coverage/control.py index 250bc137..fbf4455c 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -4,6 +4,7 @@ """Core control stuff for coverage.py.""" import atexit +import contextlib import os import os.path import platform @@ -479,6 +480,7 @@ class Coverage(object): self._instances.pop() if self._started: self._collector.stop() + self._data.close() self._started = False def _atexit(self): @@ -503,6 +505,7 @@ class Coverage(object): self._collector.reset() self._init_data(suffix=None) self._data.erase(parallel=self.config.parallel) + self._data.close() self._data = None def switch_context(self, new_context): @@ -574,6 +577,7 @@ class Coverage(object): """Save the collected coverage data to the data file.""" data = self.get_data() data.write() + data.close() def combine(self, data_paths=None, strict=False): """Combine together a number of similarly-named coverage data files. @@ -611,6 +615,7 @@ class Coverage(object): aliases.add(pattern, result) combine_parallel_data(self._data, aliases=aliases, data_paths=data_paths, strict=strict) + self._data.close() def get_data(self): """Get the collected data. @@ -785,7 +790,8 @@ class Coverage(object): report_contexts=contexts, ) reporter = SummaryReporter(self) - return reporter.report(morfs, outfile=file) + with contextlib.closing(self._data): + return reporter.report(morfs, outfile=file) def annotate( self, morfs=None, directory=None, ignore_errors=None, @@ -806,7 +812,8 @@ class Coverage(object): report_include=include, report_contexts=contexts, ) reporter = AnnotateReporter(self) - reporter.report(morfs, directory=directory) + with contextlib.closing(self._data): + reporter.report(morfs, directory=directory) def html_report(self, morfs=None, directory=None, ignore_errors=None, omit=None, include=None, extra_css=None, title=None, @@ -840,7 +847,8 @@ class Coverage(object): skip_covered=skip_covered, show_contexts=show_contexts, report_contexts=contexts, ) reporter = HtmlReporter(self) - return reporter.report(morfs) + with contextlib.closing(self._data): + return reporter.report(morfs) def xml_report( self, morfs=None, outfile=None, ignore_errors=None, @@ -880,7 +888,8 @@ class Coverage(object): file_to_close = outfile try: reporter = XmlReporter(self) - return reporter.report(morfs, outfile=outfile) + with contextlib.closing(self._data): + return reporter.report(morfs, outfile=outfile) except CoverageException: delete_file = True raise diff --git a/coverage/sqldata.py b/coverage/sqldata.py index d35bb36a..2589d1b8 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -118,7 +118,7 @@ class CoverageSqliteData(SimpleReprMixin): def _reset(self): for db in self._dbs.values(): db.close() - self._dbs = {} + self._dbs.clear() self._file_map = {} self._have_used = False self._current_context_id = None @@ -525,8 +525,14 @@ class CoverageSqliteData(SimpleReprMixin): def write(self): """Write the collected coverage data to a file.""" + pass + + def close(self): + if self._debug.should('dataop'): + self._debug.write("Closing {!r}".format(self._filename)) for db in self._dbs.values(): db.close() + self._dbs.clear() def _start_using(self): if self._pid != os.getpid(): @@ -712,6 +718,8 @@ class SqliteDb(SimpleReprMixin): def close(self): if self.con is not None: + if self.debug: + self.debug.write("Closing connection") self.con.close() self.con = None diff --git a/tests/test_debug.py b/tests/test_debug.py index 351ef919..2e741dca 100644 --- a/tests/test_debug.py +++ b/tests/test_debug.py @@ -146,8 +146,8 @@ class DebugTraceTest(CoverageTest): self.assertRegex(real_messages[-1], r"^\s*\d+\.\w{4}: Writing data") self.assertRegex(last_line, r"\s+_write_file : .*coverage[/\\]data.py @\d+$") else: - self.assertRegex(real_messages[-1], r"^\s*\d+\.\w{4}: Adding file tracers: 0 files") - self.assertRegex(last_line, r"\s+add_file_tracers : .*coverage[/\\]sqldata.py @\d+$") + self.assertRegex(real_messages[-1], r"^\s*\d+\.\w{4}: Closing ") + self.assertRegex(last_line, r"\s+close : .*coverage[/\\]sqldata.py @\d+$") def test_debug_config(self): out_lines = self.f1_debug_output(["config"]) |
