summaryrefslogtreecommitdiff
path: root/coverage/sqldata.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2020-01-11 19:26:50 -0500
committerNed Batchelder <ned@nedbatchelder.com>2020-01-11 19:26:50 -0500
commit0b4eeedccd64de32b0837dffd3400e58315ab405 (patch)
treefce9a7ad1bde160b9bd69e977df65cf88039214d /coverage/sqldata.py
parent70d527b91588d854378f78f49ee491b84662df51 (diff)
downloadpython-coveragepy-git-0b4eeedccd64de32b0837dffd3400e58315ab405.tar.gz
Improvements to debugging while chasing #915
Diffstat (limited to 'coverage/sqldata.py')
-rw-r--r--coverage/sqldata.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/coverage/sqldata.py b/coverage/sqldata.py
index cac2c4b3..03a64b2a 100644
--- a/coverage/sqldata.py
+++ b/coverage/sqldata.py
@@ -192,7 +192,7 @@ class CoverageData(SimpleReprMixin):
write any disk file.
warn: a warning callback function, accepting a warning message
argument.
- debug: a debug callback function.
+ debug: a `DebugControl` object (optional)
"""
self._no_disk = no_disk
@@ -963,7 +963,7 @@ class SqliteDb(SimpleReprMixin):
Use as a context manager, then you can use it like a
:class:`python:sqlite3.Connection` object::
- with SqliteDb(filename, debug=True) as db:
+ with SqliteDb(filename, debug_control) as db:
db.execute("insert into schema (version) values (?)", (SCHEMA_VERSION,))
"""
@@ -1025,8 +1025,13 @@ class SqliteDb(SimpleReprMixin):
def __exit__(self, exc_type, exc_value, traceback):
self.nest -= 1
if self.nest == 0:
- self.con.__exit__(exc_type, exc_value, traceback)
- self.close()
+ try:
+ self.con.__exit__(exc_type, exc_value, traceback)
+ self.close()
+ except Exception as exc:
+ if self.debug:
+ self.debug.write("EXCEPTION from __exit__: {}".format(exc))
+ raise
def execute(self, sql, parameters=()):
"""Same as :meth:`python:sqlite3.Connection.execute`."""
@@ -1049,6 +1054,8 @@ class SqliteDb(SimpleReprMixin):
)
except Exception:
pass
+ if self.debug:
+ self.debug.write("EXCEPTION from execute: {}".format(msg))
raise CoverageException("Couldn't use data file {!r}: {}".format(self.filename, msg))
def executemany(self, sql, data):